<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="46968" data-post-id="46968">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="KronicDeth" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/KronicDeth/120/33300_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  KronicDeth
                      <span class="op-star" title="Thread Starter">
                        <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                      </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>A lot of the pre-existing themes on theme websites don’t work for Elixir because theme bundles for IntelliJ have to know the name of the AttributeKey to set it’s attributes and not all Elixir AttributeKeys fallback to General AttributeKeys, so there’s no mapping in the theme for certain elements OR the fallback is useless whitish color for most of them.  You can see the fallbacks in the menus as “use inherited attributes”</p>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/2/29b47f36383294401a38ae969685ebf55a8b1a2f.png" data-download-href="https://forum.elixirforum.com/uploads/default/29b47f36383294401a38ae969685ebf55a8b1a2f" title="Screen Shot 2017-08-20 at 1.45.00 PM.png" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/optimized/2X/2/29b47f36383294401a38ae969685ebf55a8b1a2f_2_690x338.png" width="690" height="338" srcset="https://forum.elixirforum.com/uploads/default/optimized/2X/2/29b47f36383294401a38ae969685ebf55a8b1a2f_2_690x338.png, https://forum.elixirforum.com/uploads/default/original/2X/2/29b47f36383294401a38ae969685ebf55a8b1a2f.png 1.5x, https://forum.elixirforum.com/uploads/default/original/2X/2/29b47f36383294401a38ae969685ebf55a8b1a2f.png 2x" data-dominant-color="464A50"><div class="meta"><svg class="fa d-icon d-icon-far-image svg-icon" aria-hidden="true"><use href="#far-image"></use></svg><span class="filename">Screen Shot 2017-08-20 at 1.45.00 PM.png</span><span class="informations">825×405 41.6 KB</span><svg class="fa d-icon d-icon-discourse-expand svg-icon" aria-hidden="true"><use href="#discourse-expand"></use></svg></div></a></div><p></p>
<p>It used to be that all Custom Language plugins re-used the Java AttributeKeys, but JetBrains changed their guidance, so that Custom Languages should only use the General AttributeKeys as fallbacks, so themes built for Java or the other JetBrains-supported languages are less likely to look good for Custom Language plugins now.</p>
<p>There is an IntelliJ Zenburn (<a href="https://github.com/pedropenna/Intellij-Zenburn" class="inline-onebox" rel="noopener nofollow ugc">GitHub - pedropenna/Intellij-Zenburn: ZenBurn color scheme for the Intellij 13 based on Emacs Zenburn colors · GitHub</a>).  If the colors aren’t mapping correctly for Elixir, I can add an</p>
   
<p>To the plugin and set AttributeKey overrides in the xml file that Elixir needs as I did for the built-in Darcula and Default themes.  If you need these overrides, please open an Github issue and I’ll add it as an enhancements.  Include lots of screenshots, so I know what I’m aiming for.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="46968" data-batch-url="/posts/batch_likers">
                        3
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/intellij-elixir-elixir-plugin-for-jetbrains-intellij-platform/1697/33">Post #32</a>
	                </div>
	            </div>
              <div id="likers-container-46968" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="46968"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #32"></div>
  </section>
</div>
    <div class="postbit" id="46975" data-post-id="46975">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="AstonJ" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/AstonJ/120/15_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  AstonJ
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>You can use this to convert TextMate themes: <a href="https://github.com/JetBrains/colorSchemeTool" class="inline-onebox" rel="nofollow">GitHub - JetBrains/colorSchemeTool · GitHub</a></p>
<p>Maybe someone could try converting <a href="https://forum.elixirforum.com/t/introducing-elixify-a-code-editor-theme-for-elixir/450" rel="nofollow">Elixify</a> <img src="https://forum.elixirforum.com/uploads/default/original/2X/7/776053aa22968f83c10e90c98b23aa0ddd5c9d47.gif?v=15" title=":lol:" class="emoji emoji-custom" alt=":lol:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="46975" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/intellij-elixir-elixir-plugin-for-jetbrains-intellij-platform/1697/34">Post #33</a>
	                </div>
	            </div>
              <div id="likers-container-46975" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="46975"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #33"></div>
  </section>
</div>
    <div class="postbit" id="46999" data-post-id="46999">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="sztosz" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sztosz/120/1251_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  sztosz
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I think that everyone has full right to use colours he likes most, and nothing wrong with that, but I must say that I really love the default colour theme for Elixir plugin <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="46999" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/intellij-elixir-elixir-plugin-for-jetbrains-intellij-platform/1697/35">Post #34</a>
	                </div>
	            </div>
              <div id="likers-container-46999" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="46999"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #34"></div>
  </section>
</div>
    <div class="postbit" id="47050" data-post-id="47050">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="OvermindDL1" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/OvermindDL1/120/2677_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  OvermindDL1
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="michalmuskala" data-post="32" data-topic="1697">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/michalmuskala/48/20288_2.png" class="avatar"> michalmuskala:</div>
<blockquote>
<p>I managed to set it up and it works just fine. Great job, <a class="mention" href="/u/kronicdeth" rel="nofollow">@KronicDeth</a>. I don’t like how my code looks, though. I find the built-in dark theme a bit too colourful for my liking - I enjoy rather toned-down colours (I’m using zenburn theme in emacs).</p>
</blockquote>
</aside>
<p>Heh, I had the same thought.  I use a dark toned down variant of solarized (as seen in my screenshots everywhere) in my terminal, emacs, atom, and more, and I tried to install it in IntelliJ as well when I tested the elixir plugin but noticed that it was <em>not</em> right.  ^.^;</p>
<p>I can deal with the color issues though if everything is stable enough, my issue was just Intellij was so so very heavy (at least on windows) and was eating more memory than 4 atom projects.  ^.^;</p>
<p>I use IntelliJ for Rust at home though.  I prefer IntelliJ for Java as well but I’m forced to use Eclipse for most of my Java work because I’ve yet to find out how to get live code editing work in IntelliJ for an interface I use when it ‘just works’ with Eclipse.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="47050" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/intellij-elixir-elixir-plugin-for-jetbrains-intellij-platform/1697/36">Post #35</a>
	                </div>
	            </div>
              <div id="likers-container-47050" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="47050"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #35"></div>
  </section>
</div>
    <div class="postbit" id="54289" data-post-id="54289">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="KronicDeth" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/KronicDeth/120/33300_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  KronicDeth
                      <span class="op-star" title="Thread Starter">
                        <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                      </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<h1><a name="p-54289-version-620-1" class="anchor" href="#p-54289-version-620-1" aria-label="Heading link" rel="nofollow"></a>Version 6.2.0</h1>
<p><a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&amp;business=Kronic%2eDeth%40gmail%2ecom&amp;lc=US&amp;item_name=Elixir%20plugin%20for%20IntelliJ%20IDEA&amp;currency_code=USD&amp;bn=PP%2dDonationsBF%3abtn_donate_LG%2egif%3aNonHosted" rel="noopener nofollow ugc">Donate</a></p>
<h1><a name="p-54289-thanks-2" class="anchor" href="#p-54289-thanks-2" aria-label="Heading link" rel="nofollow"></a>Thanks</h1>
<ul>
<li>For reporting header typeID (���) did not match expected (FOR1) from /<code>lib/certifi/ebin/certifi_cacerts.beam</code>
<ul>
<li>Antonios Ntasioudis (<a href="https://github.com/stonehz" rel="noopener nofollow ugc">@stonehz</a>)</li>
<li><a href="https://github.com/adequateDeveloper" rel="noopener nofollow ugc">@adequateDeveloper</a></li>
<li>Abdulrhman A. AlKhodiry (<a href="https://github.com/zeroows" rel="noopener nofollow ugc">@zeroows</a>)</li>
<li>Jan Stevens (<a href="https://github.com/JanStevens" rel="noopener nofollow ugc">@JanStevens</a>)</li>
<li>Andrei Dziahel (<a href="https://github.com/develop7" rel="noopener nofollow ugc">@develop7</a>)</li>
<li>Hassan Schroeder (<a href="https://github.com/hassan" rel="noopener nofollow ugc">@hassan</a>)</li>
<li><a href="https://github.com/dima12qw" rel="noopener nofollow ugc">@dima12qw</a></li>
<li>Mithen_Ji (<a href="https://github.com/mithenji" rel="noopener nofollow ugc">@mithenji</a>)</li>
</ul>
</li>
<li>For reporting that I missed porting <a href="https://github.com/KronicDeth/intellij-elixir/issues/752" rel="noopener nofollow ugc">capital sigil modifier support</a>
<ul>
<li>Julius Beckmann <a href="https://github.com/h4cc" rel="noopener nofollow ugc">@h4cc</a></li>
</ul>
</li>
<li>For reporting that <code>end</code> wasn’t an allowed keyword key
<ul>
<li>Regina Imhoff (<a href="https://github.com/stabbymcduck" rel="noopener nofollow ugc">@StabbyMcDuck</a>)</li>
<li>Aleksandr Kuzmenko (<a href="https://github.com/IcyEagle" rel="noopener nofollow ugc">@IcyEagle</a>)</li>
</ul>
</li>
<li>For answer question on <a href="https://gitter.im/IntelliJ-Plugin-Developers/Lobby" rel="noopener nofollow ugc">https://gitter.im/IntelliJ-Plugin-Developers/Lobby</a>
<ul>
<li>Patrick Scheibe (<a href="https://github.com/halirutan" rel="noopener nofollow ugc">@halirutan</a>)</li>
<li>Alexander Zolotov (<a href="https://github.com/zolotov" rel="noopener nofollow ugc">@zolotov</a>)</li>
<li>Colin Fleming (<a href="https://github.com/cmf" rel="noopener nofollow ugc">@cmf</a>)</li>
</ul>
</li>
</ul>
<h1><a name="p-54289-changelog-3" class="anchor" href="#p-54289-changelog-3" aria-label="Heading link" rel="nofollow"></a>Changelog</h1>
<h2><a name="p-54289-v620-4" class="anchor" href="#p-54289-v620-4" aria-label="Heading link" rel="nofollow"></a>v6.2.0</h2>
<h3><a name="p-54289-enhancements-5" class="anchor" href="#p-54289-enhancements-5" aria-label="Heading link" rel="nofollow"></a>Enhancements</h3>
<ul>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/817" rel="noopener nofollow ugc">#817</a> - * Add note to README that atom module names should be prefixed with <code>:</code> - <a href="https://github.com/merglove" rel="noopener nofollow ugc">@merqlove</a></li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/827" rel="noopener nofollow ugc">#827</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a>
<ul>
<li>
<p>Elixir SDK will now have an Internal Erlang SDK, which can be supplied one of two ways:</p>
<ol>
<li>If <code>intellij-erlang</code> is installed: its Erlang SDK can be used</li>
<li>Otherwise: the Erlang SDK for Elixir SDK from this plugin can be used</li>
</ol>
<p>Either Internal Erlang SDK’s home path is used to locate the <code>erl</code> (or <code>erl.exe</code> on Windows) executable and it is used to run Elixir; bypassing the <code>elixir</code> (or <code>elixir.bat</code> on Windows) script.  Instead, as was done in <span class="hashtag-raw">#789</span>, the ebin directories for the Elixir SDK are passed as <code>-pa</code> options to <code>erl</code>.</p>
<p>The Elixir SDK’s configuration becomes more important: the classpath entries are now the list of <code>ebin</code> directories to pass to <code>erl</code> using <code>-pa</code> instead of scanning for ebins in the homepath, so additional code paths can be added to the Classpaths configuration and they will be used when running <code>mix</code> and <code>mix test</code>.  The classpaths will be initialized to the ebin directories under the home path.</p>
<ul>
<li>To support migrating from earlier version of the plugin, an SDK will be updated when it is used for Mix ExUnit Run Configurations
<ul>
<li>The default Internal Erlang SDK will be set, which uses the latest version of Erlang that can be found on the system.  When <code>intellij-erlang</code> is installed, <code>intellij-elixir</code>’s Erlang version suggestion is still used because <code>intellij-elixir</code> favors the latest version while <code>intellij-erlang</code> favors the first found, which is usually the oldest version.</li>
<li>Update roots (class path, source paths, documentation paths):
<ul>
<li>Class path of <code>HOMEPATH/lib</code> is replaced with <code>HOMEPATH/lib/APP/ebin</code>.</li>
<li>Source path of <code>HOMEPATH/lib</code> is replaced with <code>HOMEPATH/lib/APP/lib</code> IF it exists (so only for source SDKs)</li>
<li>Documentation of <code>http://elixir-lang.org/docs/stable/elixir/</code> will be replaced with <code>https://hexdoc.pm/APP/VERSION</code> for every <code>APP</code> in <code>HOMEPATH/lib</code>.</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/839" rel="noopener nofollow ugc">#839</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a>
<ul>
<li>All <code>ebin</code> paths in the Internal Erlang SDK will be copied to the Elixir SDK, so that they are indexed, which makes the Internal Erlang SDK modules show up in Symbol search.</li>
<li>Erlang SDK modules can be completed and then functions in those modules can be completed after typing <code>.</code>.
<ul>
<li>Atoms have References.
<ul>
<li>Indexed atoms (from decompiled Erlang <code>.beams</code> from the Internal Erlang SDK) will be used for completing atoms as soon the atom is parseable: either after the first letter <code>:</code> or inside the quotes when making a quoted atom.</li>
<li>Atoms will resolve to modules if the atom is a module name.  If the atom is quoted and contains interpolation, it will treat each interpolation as <code>.*</code> and look for regex matches to this derived potential atom name.</li>
</ul>
</li>
</ul>
</li>
<li>Completions for functions after <code>.</code> will now work at the end of file.  Previously, completions only worked in the middle of a file, where the <code>.</code> could parse the next work an existing call, now if that parse doesn’t work and the only thing after is a new line, it will still complete.</li>
</ul>
</li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/830" rel="noopener nofollow ugc">#830</a> - Auto test for mix test case runner will automatically run tests after a change is detected in the project files, which normally happens on save, which happens when losing focus on a changed editor tab by default. - <a href="https://github.com/nivanson" rel="noopener nofollow ugc">@nivanson</a></li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/840" rel="noopener nofollow ugc">#840</a> - Regression test for <a href="https://github.com/KronicDeth/intellij-elixir/issues/821" rel="noopener nofollow ugc">#821</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a></li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/841" rel="noopener nofollow ugc">#841</a> - Regression test for <a href="https://github.com/KronicDeth/intellij-elixir/issues/803" rel="noopener nofollow ugc">#803</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a></li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/842" rel="noopener nofollow ugc">#842</a> - Regression test for <a href="https://github.com/KronicDeth/intellij-elixir/issues/833" rel="noopener nofollow ugc">#833</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a></li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/843" rel="noopener nofollow ugc">#843</a> - Port <a href="https://github.com/elixir-lang/elixir/pull/2774" rel="noopener nofollow ugc">elixir-lang/elixir#2774</a>: Allow <code>A-Z</code> as sigil modifiers in addition to <code>a-z</code> to support <code>U</code> ungreedy modifier that replaced <code>r</code> ungreedy modifier for regexes. - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a></li>
</ul>
<h3><a name="p-54289-bug-fixes-6" class="anchor" href="#p-54289-bug-fixes-6" aria-label="Heading link" rel="nofollow"></a>Bug Fixes</h3>
<ul>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/816" rel="noopener nofollow ugc">#816</a> - Add notice for debug blacklist that it uses atoms, not Aliases, so you need to qualifier module aliases with <code>Elixir.</code> - <a href="https://github.com/merqlove" rel="noopener nofollow ugc">@merqlove</a></li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/817" rel="noopener nofollow ugc">#817</a> - Support atoms (prefixed with <code>:</code>) and<code>Elixir.</code> and plain Aliases for debugger blacklist. - <a href="https://github.com/merglove" rel="noopener nofollow ugc">@merqlove</a></li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/832" rel="noopener nofollow ugc">#832</a> - Add space to import window text - <a href="https://github.com/kentongray" rel="noopener nofollow ugc">@kentongray</a></li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/840" rel="noopener nofollow ugc">#840</a> - Add <code>END</code> to allowed <code>keywordKey</code> tokens - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a></li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/841" rel="noopener nofollow ugc">#841</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a>
<ul>
<li>Only use “Macros” as first header in decompiled <code>.beam</code> files if <code>macro</code> is <code>defmacro</code>.  “Macros” header was being printed when there was only functions because the check when there was no <code>lastMacroNameArity</code> didn’t care what the current <code>macroNameArity.macro</code> was.</li>
<li>When an <code>.erl</code> file has <code>-compile([compressed])</code>, it will be compiled normally, and then gzipped, so that the <code>.beam</code> will not contain the BEAM magic number <code>FOR1</code>, but instead the gzip magic number <code>0x1f</code> <code>0x8b</code>.  So, to properly handle normal and compressed, the decompiler needs to look-ahead 2-bytes and check the gzip magic number.  If the gzip magic number is detected, the InputStream will be passed through <code>GZIPInputStream</code> before the the normal decoding process.</li>
</ul>
</li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/842" rel="noopener nofollow ugc">#842</a> - When decompiling function and macro names from Erlang module, its possible for the name to contain <code>#</code> and they would be interpreted as comments.  Accepting those names in <code>Unquoted</code> wouldn’t escape the <code>#</code> from being treated as a comment, so in addition to <code>unquote</code>ing the name, surround it in double quotes. - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a></li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/848" rel="noopener nofollow ugc">#848</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a>
<ul>
<li><code>AdditionalDataConfigurable</code> only copied the the Internal Erlang SDK Code Paths when the selection in the <code>ComboBox</code> was changed, which meant if the there was only one Erlang SDK or the user never changed the selection, the Code Paths were never copied.  To get the Code Paths copied when the Elixir SDK is first created and <code>setupSdkPaths</code> interface method is called
<ol>
<li>All paths are set directly on the Elixir SDK as before</li>
<li>The default Erlang SDK, which should be the one that was last created, is configured in <code>SdkAdditionalaData</code></li>
<li>The Code paths from the Erlang SDK are copied to the Elixir SDK
<ol>
<li>If the the Erlang SDK is from intellij-elixir and does not have <code>ebin</code> directories for its Class Paths, then the Class Paths is expanded to Code Paths.</li>
</ol>
</li>
</ol>
</li>
</ul>
</li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/851" rel="noopener nofollow ugc">#851</a> - The Code Paths from the Internal Erlang SDK were not being copied from the default Erlang SDK to the Elixir SDK when the default Erlang SDK was set during <code>mix test</code> runs, which meant that the Elixir SDK would not upgrade correctly from 6.1.1 to 6.2.0 without the user deleting the Elixir SDK and recreating it. - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a></li>
</ul>
<h1><a name="p-54289-readme-changes-7" class="anchor" href="#p-54289-readme-changes-7" aria-label="Heading link" rel="nofollow"></a>README Changes</h1>
<h3><a name="p-54289-decompilation-8" class="anchor" href="#p-54289-decompilation-8" aria-label="Heading link" rel="nofollow"></a>Decompilation</h3>
<p><code>.beam</code> files, such as those in the Elixir SDK, the Elixir SDK’s Internal Erlang SDK, and in your project’s <code>build</code> directory will be decompiled to equivalent <code>def</code> and <code>defmacro</code> calls.  The bodies will not be decompiled, only the call definition head and placeholder parameters.  These decompiled call definition heads are enough to allow Go To Declaration, the Structure pane, and Completion to work with the decompiled <code>.beam</code> files.</p>
<p><code>.beam</code> files are not detected purely by their file extension: the BEAM file format starts with a magic number, <code>FOR1</code>, that is checked for before decompiling.</p>
<h4><a name="p-54289-decompression-9" class="anchor" href="#p-54289-decompression-9" aria-label="Heading link" rel="nofollow"></a>Decompression</h4>
<p>If the <code>.beam</code> module was compiled with the <code>compressed</code> compiler directive, which in Erlang looks like</p>
<pre data-code-wrap="erlang"><code class="lang-erlang">-compile([compressed])
</code></pre>
<p>and in Elixir looks like</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">@compile [:compressed]
</code></pre>
<p>then the outer file format is <a href="https://en.wikipedia.org/wiki/Gzip" rel="noopener nofollow ugc">GZip</a> (which is detected by checking for the gzip magic number, <code>1f 8b</code>, at the start of the file) and the <code>.beam</code> will be (stream) decompressed before the <code>.beam</code> header is checked and the chunks decoded.</p>
<h4><a name="p-54289-special-handling-of-call-definition-names-10" class="anchor" href="#p-54289-special-handling-of-call-definition-names-10" aria-label="Heading link" rel="nofollow"></a>Special handling of call definition names</h4>
<p>Functions and macros can have names that aren’t valid identifier names, so the decompiler has special handlers to detect these invalid identifiers and escape them to make decompiled code that is parsable as valid Elixir.</p>
<table>
  <thead>
  <tr>
    <td>Handler</td>
    <td>Name/Arity</td>
    <td>Decompiled</td>
    <td>Reason</td>
  </tr>
  </thead>
  <tbody>
  <tr>
    <td rowspan="42">Infix Operator</td>
    <td><code>!=/2</code></td>
    <td><code>left != right</code></td>
    <td rowspan="42">Infix operators are defined in infix position</td>
  </tr>
  <tr>
    <td><code>!==/2</code></td>
    <td><code>left !== right</code></td>
  </tr>
  <tr>
    <td><code>&amp;&amp;/2</code></td>
    <td><code>left &amp;&amp; right</code></td>
  </tr>
  <tr>
    <td><code>&amp;&amp;&amp;/2</code></td>
    <td><code>left &amp;&amp;&amp; right</code></td>
  </tr>
  <tr>
    <td><code>*/2</code></td>
    <td><code>left * right</code></td>
  </tr>
  <tr>
    <td><code>=+/2</code></td>
    <td><code>left + right</code></td>
  </tr>
  <tr>
    <td><code>=++/2</code></td>
    <td><code>left ++ right</code></td>
  </tr>
  <tr>
    <td><code>-/2</code></td>
    <td><code>left - right</code></td>
  </tr>
  <tr>
    <td><code>--/2</code></td>
    <td><code>left -- right</code></td>
  </tr>
  <tr>
    <td><code>-&gt;/2</code></td>
    <td><code>left -&gt; right</code></td>
  </tr>
  <tr>
    <td><code>../2</code></td>
    <td><code>left .. right</code></td>
  </tr>
  <tr>
    <td><code>//2</code></td>
    <td><code>left / right</code></td>
  </tr>
  <tr>
    <td><code>::/2</code></td>
    <td><code>left :: right</code></td>
  </tr>
  <tr>
    <td><code>&lt;/2</code></td>
    <td><code>left &lt; right</code></td>
  </tr>
  <tr>
    <td><code>&lt;-/2</code></td>
    <td><code>left &lt;- right</code></td>
  </tr>
  <tr>
    <td><code>&lt;&lt;&lt;/2</code></td>
    <td><code>left &lt;&lt;&lt; right</code></td>
  </tr>
  <tr>
    <td><code>&lt;&lt;~/2</code></td>
    <td><code>left &lt;&lt;~ right</code></td>
  </tr>
  <tr>
    <td><code>&lt;=/2</code></td>
    <td><code>left &lt;= right</code></td>
  </tr>
  <tr>
    <td><code>&lt;&gt;/2</code></td>
    <td><code>left &lt;&gt; right</code></td>
  </tr>
  <tr>
    <td><code>&lt;|&gt;/2</code></td>
    <td><code>left &lt;|&gt; right</code></td>
  </tr>
  <tr>
    <td><code>&lt;~/2</code></td>
    <td><code>left &lt;~ right</code></td>
  </tr>
  <tr>
    <td><code>&lt;~&gt;/2</code></td>
    <td><code>left &lt;~&gt; right</code></td>
  </tr>
  <tr>
    <td><code>=/2</code></td>
    <td><code>left = right</code></td>
  </tr>
  <tr>
    <td><code>==/2</code></td>
    <td><code>left == right</code></td>
  </tr>
  <tr>
    <td><code>===/2</code></td>
    <td><code>left === right</code></td>
  </tr>
  <tr>
    <td><code>=&gt;/2</code></td>
    <td><code>left =&gt; right</code></td>
  </tr>
  <tr>
    <td><code>=~/2</code></td>
    <td><code>left =~ right</code></td>
  </tr>
  <tr>
    <td><code>&gt;/2</code></td>
    <td><code>left &gt; right</code></td>
  </tr>
  <tr>
    <td><code>&gt;=/2</code></td>
    <td><code>left &gt;= right</code></td>
  </tr>
  <tr>
    <td><code>&gt;&gt;&gt;/2</code></td>
    <td><code>left &gt;&gt;&gt; right</code></td>
  </tr>
  <tr>
    <td><code>\\/2</code></td>
    <td><code>left \\\\ right</code></td>
  </tr>
  <tr>
    <td><code>^/2</code></td>
    <td><code>left ^ right</code></td>
  </tr>
  <tr>
    <td><code>^^^/2</code></td>
    <td><code>left ^^^ right</code></td>
  </tr>
  <tr>
    <td><code>and/2</code></td>
    <td><code>left and right</code></td>
  </tr>
  <tr>
    <td><code>in/2</code></td>
    <td><code>left in right</code></td>
  </tr>
  <tr>
    <td><code>or/2</code></td>
    <td><code>left or right</code></td>
  </tr>
  <tr>
    <td><code>|&gt;/2</code></td>
    <td><code>left |&gt; right</code></td>
  </tr>
  <tr>
    <td><code>||/2</code></td>
    <td><code>left || right</code></td>
  </tr>
  <tr>
    <td><code>|||/2</code></td>
    <td><code>left ||| right</code></td>
  </tr>
  <tr>
    <td><code>~=/2</code></td>
    <td><code>left ~= right</code></td>
  </tr>
  <tr>
    <td><code>~&gt;/2</code></td>
    <td><code>left ~&gt; right</code></td>
  </tr>
  <tr>
    <td><code>~&gt;&gt;/2</code></td>
    <td><code>left ~&gt;&gt; right</code></td>
  </tr>
  <tr>
    <td rowspan="2">Prefix Operator</td>
    <td><code>+/1</code></td>
    <td><code>(+value)</code></td>
    <td rowspan="2">To prevent precedence errors, unary prefix operators, which also have binary
      infix operators of the same name need to be defined inside parentheses
    </td>
  </tr>
  <tr>
    <td><code>-/1</code></td>
    <td><code>(-value)</code></td>
  </tr>
  <tr>
    <td rowspan="12">Unquoted</td>
    <td><code>%/2</code></td>
    <td><code>unquote(:%)(p0, p1)</code></td>
    <td rowspan="5">Special forms need to defined as atom passed to unquote, as special forms are
      handled before macros defining the calls are applied
    </td>
  </tr>
  <tr>
    <td><code>%{}/1</code></td>
    <td><code>unquote(:%{})(p0)</code></td>
  </tr>
  <tr>
    <td><code>&amp;/1</code></td>
    <td><code>unquote(:&amp;)(p0)</code></td>
  </tr>
  <tr>
    <td><code>./2</code></td>
    <td><code>unquote(:.)(p0, p1)</code></td>
  </tr>
  <tr>
    <td><code>&lt;&lt;&gt;&gt;/1</code></td>
    <td><code>unquote(:&lt;&lt;&gt;&gt;)(p0)</code></td>
  </tr>
  <tr>
    <td><code>do/n</code></td>
    <td><code>unquote(:do)(p0, ...)</code></td>
    <td>Keywords need to be escaped</td>
  </tr>
  <tr>
    <td><code>fn/1</code></td>
    <td><code>unquote(:fn)(p0)</code></td>
    <td rowspan="4">Special forms need to defined as atom passed to unquote, as special forms are
      handled before macros defining the calls are applied
    </td>
  </tr>
  <tr>
    <td><code>unquote/1</code></td>
    <td><code>unquote(:unquote)(p0)</code></td>
  </tr>
  <tr>
    <td><code>unquote_splicing/1</code></td>
    <td><code>unquote(:unquote_splicing)(p0)</code></td>
  </tr>
  <tr>
    <td><code>{}/n</code></td>
    <td><code>unquote(:{})(p0, ...)</code></td>
  </tr>
  <tr>
    <td><code>Capitalized/n</code></td>
    <td><code>unquote(:Capitalized)(p0, ...)</code></td>
    <td>Part of the Corba libraries in OTP have functions starting with a capital letter, which
      would be parsed as an Alias in Elixir if not unquoted.
    </td>
  </tr>
  <tr>
    <td><code>#text#/1</code></td>
    <td><code>unquote(:"#text#")(p0)</code></td>
    <td>
      <div>Part of the XML libraries in OTP have functions
        that start with or contain `#`, which would parse as a comment in Elixir if not unquoted in a double quoted
        atom.
      </div>
    </td>
  </tr>
  <tr>
    <td>Default</td>
    <td><code>name/n</code></td>
    <td><code>name(p0, ...)</code></td>
    <td>If no specialized handler is required, functions and macros are defined normally with pN
      for each parameter in the Nth position
    </td>
  </tr>
  </tbody>
</table>
<h3><a name="p-54289-sdk-11" class="anchor" href="#p-54289-sdk-11" aria-label="Heading link" rel="nofollow"></a>SDK</h3>
<p>Because Elixir is built on top of Erlang, Elixir command line commands don’t have OS native binaries, instead the OS native binaries from Erlang are used.  In order to reliably find the Erlang OS native binaries, like <code>erl</code> and <code>erl.exe</code>, the path to BOTH the Erlang SDK and the Elixir SDK must be configured.  This allows you to install Erlang and Elixir with completely different package managers too: you can install Erlang with <code>kerl</code> and Elixir with <code>kiex</code> and you don’t have to worry about IntelliJ not seeing the environment variables set by <code>kerl</code> when launching IntelliJ from an application launchers instead of a terminal.</p>
<p>Since JetBrains’ OpenAPI only supports one SDK per Project or Module, to support Elixir and Erlang SDK at the same time, the Elixir SDK keeps track of an Internal Erlang SDK.  When setting up your first Elixir SDK, you will be prompted to create an Erlang SDK (if you have the <a href="https://github.com/ignatov/intellij-erlang" rel="noopener nofollow ugc"><code>intellij-erlang</code></a> plugin <a href="https://plugins.jetbrains.com/plugin/7083-erlang" rel="noopener nofollow ugc">installed</a>) or and Erlang for Elixir SDK (if you don’t have <code>intellij-erlang</code> installed and you need to use the minimal Erlang for Elixir SDK supplied by this plugin).</p>
<p>With the Elixir SDK setup with an Internal Erlang SDK, you can see the Elixir SDK name and the home path, but unlike other SDKs, there’s a dropdown for changing the Internal Erlang SDK.</p>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/a/a8fe85df8abf8b62347e0ba0023af6c4ff67ef24.jpg" data-download-href="https://forum.elixirforum.com/uploads/default/a8fe85df8abf8b62347e0ba0023af6c4ff67ef24" title="" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/2X/a/a8fe85df8abf8b62347e0ba0023af6c4ff67ef24.jpg" alt="" role="presentation" width="690" height="932" data-dominant-color="484C50"><div class="meta"><svg class="fa d-icon d-icon-far-image svg-icon" aria-hidden="true"><use href="#far-image"></use></svg><span class="filename"></span><span class="informations">781×1056 131 KB</span><svg class="fa d-icon d-icon-discourse-expand svg-icon" aria-hidden="true"><use href="#discourse-expand"></use></svg></div></a></div><p></p>
<p>You’ll notice there is a mix of two different parent paths in Class Paths:</p>
<ol>
<li>
<p>Those from the Elixir SDK Home Directory, which are the <code>lib/APP/ebin</code> for the <code>APP</code>s that ships with Elixir: <code>eex</code>, <code>elixir</code>, <code>ex_unit</code>, <code>iex</code>, <code>logger</code>, and <code>mix</code>.</p>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/3/3d67d8c53ad310078d3c19a1591fc5983a55c1de.png" data-download-href="https://forum.elixirforum.com/uploads/default/3d67d8c53ad310078d3c19a1591fc5983a55c1de" title="" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/2X/3/3d67d8c53ad310078d3c19a1591fc5983a55c1de.png" alt="" role="presentation" width="323" height="111"><div class="meta"><svg class="fa d-icon d-icon-far-image svg-icon" aria-hidden="true"><use href="#far-image"></use></svg><span class="filename"></span><span class="informations">323×111 2.55 KB</span><svg class="fa d-icon d-icon-discourse-expand svg-icon" aria-hidden="true"><use href="#discourse-expand"></use></svg></div></a></div><p></p>
</li>
<li>
<p>Those from the Internal Erlang SDK Home Directory, which are the <code>lib/APP-VERSION/ebin</code> for the <code>APP</code>s that ship with OTP.</p>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/5/500ffb2e2ffe83c57eac49cc27f183f27c8a09da.png" data-download-href="https://forum.elixirforum.com/uploads/default/500ffb2e2ffe83c57eac49cc27f183f27c8a09da" title="" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/2X/5/500ffb2e2ffe83c57eac49cc27f183f27c8a09da.png" alt="" role="presentation" width="507" height="798"><div class="meta"><svg class="fa d-icon d-icon-far-image svg-icon" aria-hidden="true"><use href="#far-image"></use></svg><span class="filename"></span><span class="informations">507×798 16.3 KB</span><svg class="fa d-icon d-icon-discourse-expand svg-icon" aria-hidden="true"><use href="#discourse-expand"></use></svg></div></a></div><p></p>
</li>
</ol>
<p>The Class Paths are combined from the two SDKs because OpenAPI doesn’t allow to dynamically delegate to the Internal Erlang SDK when checking for Class Paths to scan for completion and running.  If you change the Internal Erlang SDK in the dropdown, the Class Paths will be updated to remove the old Internal Erlang SDK Class Paths and add the new Internal Erlang SDK Class Paths.</p>
<p>These Class Paths are not just for code completion and search anymore, all paths listed as passed with <code>-pa</code> flag to <code>erl</code> or <code>erl.exe</code> when running <code>mix</code>, so that you can mix different versions of OTP applications shipped with different version of OTP, so you can take advantage of the independently updatable OTP apps in the release notes for OTP.<br>
</p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/5/52755845b4db2fc4cc3a4de48bf3b0e5aad76c28.png" data-download-href="https://forum.elixirforum.com/uploads/default/52755845b4db2fc4cc3a4de48bf3b0e5aad76c28" title="" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/2X/5/52755845b4db2fc4cc3a4de48bf3b0e5aad76c28.png" alt="" role="presentation" width="690" height="80" data-dominant-color="3E3E3E"><div class="meta"><svg class="fa d-icon d-icon-far-image svg-icon" aria-hidden="true"><use href="#far-image"></use></svg><span class="filename"></span><span class="informations">1945×228 17.3 KB</span><svg class="fa d-icon d-icon-discourse-expand svg-icon" aria-hidden="true"><use href="#discourse-expand"></use></svg></div></a></div><p></p>
<h4><a name="p-54289-default-sdk-12" class="anchor" href="#p-54289-default-sdk-12" aria-label="Heading link" rel="nofollow"></a>Default SDK</h4>
<ol>
<li>
<p>The default SDK for new projects can we set from the Configure menu on Welcome Screen</p>
</li>
<li>
<p>Hover over “Project Defaults” to see its submenu</p>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/6/699f16a2448ec57129609308fa620afeed4daa1b.png" data-download-href="https://forum.elixirforum.com/uploads/default/699f16a2448ec57129609308fa620afeed4daa1b" title="" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/2X/6/699f16a2448ec57129609308fa620afeed4daa1b.png" alt="" role="presentation" width="669" height="607"><div class="meta"><svg class="fa d-icon d-icon-far-image svg-icon" aria-hidden="true"><use href="#far-image"></use></svg><span class="filename"></span><span class="informations">669×607 30.5 KB</span><svg class="fa d-icon d-icon-discourse-expand svg-icon" aria-hidden="true"><use href="#discourse-expand"></use></svg></div></a></div><p></p>
</li>
<li>
<p>Select “Project Structure” from the submenu</p>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/6/6e865d6fead308044408b7253b5584e1e40dce87.png" data-download-href="https://forum.elixirforum.com/uploads/default/6e865d6fead308044408b7253b5584e1e40dce87" title="" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/2X/6/6e865d6fead308044408b7253b5584e1e40dce87.png" alt="" role="presentation" width="305" height="193"><div class="meta"><svg class="fa d-icon d-icon-far-image svg-icon" aria-hidden="true"><use href="#far-image"></use></svg><span class="filename"></span><span class="informations">305×193 12 KB</span><svg class="fa d-icon d-icon-discourse-expand svg-icon" aria-hidden="true"><use href="#discourse-expand"></use></svg></div></a></div><p></p>
</li>
<li>
<p>IntelliJ will start out with no default SDK.  To make the default SDK, an Elixir SDK, Click New</p>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/c/c1120573780a53ef14e95f8d71ce500be6bc5d3d.png" data-download-href="https://forum.elixirforum.com/uploads/default/c1120573780a53ef14e95f8d71ce500be6bc5d3d" title="" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/optimized/2X/c/c1120573780a53ef14e95f8d71ce500be6bc5d3d_2_690x124.png" alt="" role="presentation" width="690" height="124" srcset="https://forum.elixirforum.com/uploads/default/optimized/2X/c/c1120573780a53ef14e95f8d71ce500be6bc5d3d_2_690x124.png, https://forum.elixirforum.com/uploads/default/original/2X/c/c1120573780a53ef14e95f8d71ce500be6bc5d3d.png 1.5x, https://forum.elixirforum.com/uploads/default/original/2X/c/c1120573780a53ef14e95f8d71ce500be6bc5d3d.png 2x" data-dominant-color="5A5C5E"><div class="meta"><svg class="fa d-icon d-icon-far-image svg-icon" aria-hidden="true"><use href="#far-image"></use></svg><span class="filename"></span><span class="informations">691×125 15.5 KB</span><svg class="fa d-icon d-icon-discourse-expand svg-icon" aria-hidden="true"><use href="#discourse-expand"></use></svg></div></a></div><p></p>
</li>
<li>
<p>Select “Elixir SDK”</p>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/a/ab1186eee022905a96452b9dd2b4c0c5eee05215.png" data-download-href="https://forum.elixirforum.com/uploads/default/ab1186eee022905a96452b9dd2b4c0c5eee05215" title="" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/2X/a/ab1186eee022905a96452b9dd2b4c0c5eee05215.png" alt="" role="presentation" width="592" height="212"><div class="meta"><svg class="fa d-icon d-icon-far-image svg-icon" aria-hidden="true"><use href="#far-image"></use></svg><span class="filename"></span><span class="informations">592×212 26.7 KB</span><svg class="fa d-icon d-icon-discourse-expand svg-icon" aria-hidden="true"><use href="#discourse-expand"></use></svg></div></a></div><p></p>
</li>
<li>
<p>You’ll get “Cannot Create SDK” message because there are no Erlang SDKs for the Elixir SDK to use as an Internal Erlang SDK.  Click OK to create the Erlang SDK first.</p>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/7/76397b074b8d7d6039d98bcd13bf6fa89052b6ef.png" data-download-href="https://forum.elixirforum.com/uploads/default/76397b074b8d7d6039d98bcd13bf6fa89052b6ef" title="" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/2X/7/76397b074b8d7d6039d98bcd13bf6fa89052b6ef.png" alt="" role="presentation" width="404" height="150"><div class="meta"><svg class="fa d-icon d-icon-far-image svg-icon" aria-hidden="true"><use href="#far-image"></use></svg><span class="filename"></span><span class="informations">404×150 13.1 KB</span><svg class="fa d-icon d-icon-discourse-expand svg-icon" aria-hidden="true"><use href="#discourse-expand"></use></svg></div></a></div><p></p>
</li>
<li>
<p>You’ll be actually prompted to Select Home Directory for the Erlang SDK</p>
<ul>
<li>
<p>If you have the <a href="https://github.com/ignatov/intellij-erlang" rel="noopener nofollow ugc"><code>intellij-erlang</code></a> plugin <a href="https://plugins.jetbrains.com/plugin/7083-erlang" rel="noopener nofollow ugc">installed</a>, you’ll create an Erlang SDK from it.</p>
<p><img src="https://raw.githubusercontent.com/KronicDeth/intellij-elixir/v6.2.0/screenshots/features/sdk/default/Erlang%20SDK.png?raw=true" alt="Erlang SDK" title="Erlang SDK" width="425" height="270"></p>
<p><strong>NOTE: Erlang SDK’s default Home Directory favors the <em>oldest</em> version of Erlang installed.  You probably want the newest version.  To manually select the Home Directory, it is the directory that contains the <code>bin</code>, <code>erts-VERSION</code>, and <code>lib</code> subdirectories.  For Homebrew, the path looks like <code>/usr/local/Cellar/erlang/VERSION/lib/erlang</code>.  It is important to select the <code>lib/erlang</code> directory and not the <code>VERSION</code> directory for <code>intellij-erlang</code> to accept it as a Home Directory.</strong></p>
</li>
<li>
<p>If you don’t have <code>intellij-erlang</code> installed, then you’ll create and Erlang for Elixir SDK, which is supplied by this plugin.</p>
</li>
</ul>
</li>
<li>
<p>With an Erlang SDK available to use as the Internal Erlang SDK, you’ll be prompted for the Home Directory for the Elixir SDK.</p>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/8/8f4b594124e4590c55596fcc359842f57fe7f140.png" data-download-href="https://forum.elixirforum.com/uploads/default/8f4b594124e4590c55596fcc359842f57fe7f140" title="" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/2X/8/8f4b594124e4590c55596fcc359842f57fe7f140.png" alt="" role="presentation" width="427" height="269"><div class="meta"><svg class="fa d-icon d-icon-far-image svg-icon" aria-hidden="true"><use href="#far-image"></use></svg><span class="filename"></span><span class="informations">427×269 14.1 KB</span><svg class="fa d-icon d-icon-discourse-expand svg-icon" aria-hidden="true"><use href="#discourse-expand"></use></svg></div></a></div><p></p>
</li>
</ol>
<h1><a name="p-54289-installation-13" class="anchor" href="#p-54289-installation-13" aria-label="Heading link" rel="nofollow"></a>Installation</h1>
<p><a href="https://github.com/KronicDeth/intellij-elixir/blob/v6.2.0/README.md#installation" rel="noopener nofollow ugc">Installation Instructions</a></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="54289" data-batch-url="/posts/batch_likers">
                        3
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/intellij-elixir-elixir-plugin-for-jetbrains-intellij-platform/1697/37">Post #36</a>
	                </div>
	            </div>
              <div id="likers-container-54289" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="54289"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #36"></div>
  </section>
</div>
    <div class="postbit" id="55045" data-post-id="55045">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="KronicDeth" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/KronicDeth/120/33300_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  KronicDeth
                      <span class="op-star" title="Thread Starter">
                        <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                      </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<h1><a name="p-55045-version-630-1" class="anchor" href="#p-55045-version-630-1" aria-label="Heading link" rel="nofollow"></a>Version 6.3.0</h1>
<p><a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&amp;business=Kronic%2eDeth%40gmail%2ecom&amp;lc=US&amp;item_name=Elixir%20plugin%20for%20IntelliJ%20IDEA&amp;currency_code=USD&amp;bn=PP%2dDonationsBF%3abtn_donate_LG%2egif%3aNonHosted" rel="noopener nofollow ugc">Donate</a></p>
<h1><a name="p-55045-thanks-2" class="anchor" href="#p-55045-thanks-2" aria-label="Heading link" rel="nofollow"></a>Thanks</h1>
<ul>
<li>For explaining difficulties with using README Project section in Small IDEs
<ul>
<li>Michel Perez <a href="https://github.com/mrkaspa" rel="noopener nofollow ugc">@mrkaspa</a></li>
<li>Ron Arts <a href="https://github.com/raarts" rel="noopener nofollow ugc">@raarts</a></li>
</ul>
</li>
<li>For reporting that the Internal Erlang SDK in Elixir SDK in Rich IDE support in 6.2.0 broke <code>mix test</code> runner for Small IDEs
<ul>
<li>Jan Stevens <a href="https://github.com/JanStevens" rel="noopener nofollow ugc">@JanStevens</a></li>
</ul>
</li>
</ul>
<h1><a name="p-55045-changelog-3" class="anchor" href="#p-55045-changelog-3" aria-label="Heading link" rel="nofollow"></a>Changelog</h1>
<h2><a name="p-55045-v630-4" class="anchor" href="#p-55045-v630-4" aria-label="Heading link" rel="nofollow"></a>v6.3.0</h2>
<h3><a name="p-55045-enhancements-5" class="anchor" href="#p-55045-enhancements-5" aria-label="Heading link" rel="nofollow"></a>Enhancements</h3>
<ul>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/854" rel="noopener nofollow ugc">#854</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a>
<ul>
<li><code>credo</code> external annotator
<ul>
<li>Once modifications have settled on a file and all internal annotators have run, <code>mix credo</code> will be run on any modified file.
<ul>
<li>Each check failure reported by <code>mix credo</code> will be turned into a warning annotation (yellow highlight) of the line or line and column credo identified.</li>
<li>If you hover over the annotation (either in the source or on right gutter), the <code>mix credo PATH:LINE(:COLUMN)</code> explanation will be shown.  Links in the tooltip are clickable and allow you to jump to the specific line or line and column of the failure.</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/856" rel="noopener nofollow ugc">#856</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a>
<ul>
<li>Explain Rich vs Small IDEs more</li>
<li>Add feature support table for Rich vs Small IDEs with links to alternatives for Rich IDEs features not in Small IDEs.</li>
<li>Reorder Project subsections based on usage.</li>
</ul>
</li>
</ul>
<h3><a name="p-55045-bug-fixes-6" class="anchor" href="#p-55045-bug-fixes-6" aria-label="Heading link" rel="nofollow"></a>Bug Fixes</h3>
<ul>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/854" rel="noopener nofollow ugc">#854</a> - Rename package with typo <code>org.elixir_lang.annonator</code> → <code>org.elixir_lang.annotator</code>. - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a></li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/855" rel="noopener nofollow ugc">#855</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a>
<ul>
<li>Change error to say mix, elixir, or erlang path is not set instead of just mix path.</li>
<li>Rewrite of <code>MixRunningStateUtil#setElixir</code> to support calling <code>erl</code> directly in IntelliJ IDEA added a check that sdk type was the Elixir SDK Type, but there was no <code>else</code> clauses to handle that there IS an SDK, but its NOT Elixir, which is the common case on all Small IDEs (like Rubymine).  To fill this gap, if the SDK is not Elixir and a Small IDE is detected, then the SDK Home from Preferences &gt; Other Settings &gt; Elixir External Tools &gt; Elixir SDK &gt; Path will be used to get the absolute path to the <code>elixir</code> (or <code>elixir.bat</code> executable and set it in the <code>GeneralCommandLine</code>.</li>
</ul>
</li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/856" rel="noopener nofollow ugc">#856</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a>
<ul>
<li>Add missing <code>**</code> for bold.</li>
<li>Document alternative setup in Small IDEs</li>
<li>Put Import from external model first in Project subsections, so that people are more likely to import as a mix project correctly.</li>
</ul>
</li>
</ul>
<h1><a name="p-55045-readme-updates-7" class="anchor" href="#p-55045-readme-updates-7" aria-label="Heading link" rel="nofollow"></a>README updates</h1>
<h1><a name="p-55045-thanks-8" class="anchor" href="#p-55045-thanks-8" aria-label="Heading link" rel="nofollow"></a>Thanks</h1>
<ul>
<li>For explaining difficulties with using README Project section in Small IDEs
<ul>
<li>Michel Perez <a href="https://github.com/mrkaspa" rel="noopener nofollow ugc">@mrkaspa</a></li>
<li>Ron Arts <a href="https://github.com/raarts" rel="noopener nofollow ugc">@raarts</a></li>
</ul>
</li>
<li>For reporting that the Internal Erlang SDK in Elixir SDK in Rich IDE support in 6.2.0 broke <code>mix test</code> runner for Small IDEs
<ul>
<li>Jan Stevens <a href="https://github.com/JanStevens" rel="noopener nofollow ugc">@JanStevens</a></li>
</ul>
</li>
</ul>
<h1><a name="p-55045-changelog-9" class="anchor" href="#p-55045-changelog-9" aria-label="Heading link" rel="nofollow"></a>Changelog</h1>
<h2><a name="p-55045-v630-10" class="anchor" href="#p-55045-v630-10" aria-label="Heading link" rel="nofollow"></a>v6.3.0</h2>
<h3><a name="p-55045-enhancements-11" class="anchor" href="#p-55045-enhancements-11" aria-label="Heading link" rel="nofollow"></a>Enhancements</h3>
<ul>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/854" rel="noopener nofollow ugc">#854</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a>
<ul>
<li><code>credo</code> external annotator
<ul>
<li>Once modifications have settled on a file and all internal annotators have run, <code>mix credo</code> will be run on any modified file.
<ul>
<li>Each check failure reported by <code>mix credo</code> will be turned into a warning annotation (yellow highlight) of the line or line and column credo identified.</li>
<li>If you hover over the annotation (either in the source or on right gutter), the <code>mix credo PATH:LINE(:COLUMN)</code> explanation will be shown.  Links in the tooltip are clickable and allow you to jump to the specific line or line and column of the failure.</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/856" rel="noopener nofollow ugc">#856</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a>
<ul>
<li>Explain Rich vs Small IDEs more</li>
<li>Add feature support table for Rich vs Small IDEs with links to alternatives for Rich IDEs features not in Small IDEs.</li>
<li>Reorder Project subsections based on usage.</li>
</ul>
</li>
</ul>
<h3><a name="p-55045-bug-fixes-12" class="anchor" href="#p-55045-bug-fixes-12" aria-label="Heading link" rel="nofollow"></a>Bug Fixes</h3>
<ul>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/854" rel="noopener nofollow ugc">#854</a> - Rename package with typo <code>org.elixir_lang.annonator</code> → <code>org.elixir_lang.annotator</code>. - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a></li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/855" rel="noopener nofollow ugc">#855</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a>
<ul>
<li>Change error to say mix, elixir, or erlang path is not set instead of just mix path.</li>
<li>Rewrite of <code>MixRunningStateUtil#setElixir</code> to support calling <code>erl</code> directly in IntelliJ IDEA added a check that sdk type was the Elixir SDK Type, but there was no <code>else</code> clauses to handle that there IS an SDK, but its NOT Elixir, which is the common case on all Small IDEs (like Rubymine).  To fill this gap, if the SDK is not Elixir and a Small IDE is detected, then the SDK Home from Preferences &gt; Other Settings &gt; Elixir External Tools &gt; Elixir SDK &gt; Path will be used to get the absolute path to the <code>elixir</code> (or <code>elixir.bat</code> executable and set it in the <code>GeneralCommandLine</code>.</li>
</ul>
</li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/856" rel="noopener nofollow ugc">#856</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a>
<ul>
<li>Add missing <code>**</code> for bold.</li>
<li>Document alternative setup in Small IDEs</li>
<li>Put Import from external model first in Project subsections, so that people are more likely to import as a mix project correctly.</li>
</ul>
</li>
</ul>
<h1><a name="p-55045-readme-updates-13" class="anchor" href="#p-55045-readme-updates-13" aria-label="Heading link" rel="nofollow"></a>README updates</h1>
<h1><a name="p-55045-elixir-plugin-14" class="anchor" href="#p-55045-elixir-plugin-14" aria-label="Heading link" rel="nofollow"></a>Elixir plugin</h1>
<p><a href="https://travis-ci.org/KronicDeth/intellij-elixir" rel="noopener nofollow ugc"><img src="https://travis-ci.org/KronicDeth/intellij-elixir.svg?branch=master" alt="Build Status" width="98" height="20"></a></p>
<p>This is a plugin that adds support for <a href="http://elixir-lang.org/" rel="nofollow">Elixir</a> to JetBrains IDEs.</p>
<p>The plugin works both in the rich IDEs that allow alternative language SDK selection and small IDEs that are language specific.  The rich IDEs work best for IntelliJ Elixir because only in the rich IDEs can have an Elixir SDK set as the Project SDK.  In all small IDEs, the native language SDK is always there, which makes anything that uses the SDK, such as running <code>elixir</code>, <code>erl</code>, or <code>mix</code> more complicated both internally and externally in the configuration you have to setup.</p>
<h2><a name="p-55045-ides-15" class="anchor" href="#p-55045-ides-15" aria-label="Heading link" rel="nofollow"></a>IDEs</h2>
<p><em>The plugin is free to use in all JetBrains IDEs.  The Cost column in the below table is what JetBrains charges for the IDE itself.  IntelliJ Elixir is maintained by <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a> who does not get any of the subscription money.  If you want to support the plugin itself, make a <a href="https://github.com/KronicDeth/intellij-elixir/tree/v6.3.0#donations" rel="noopener nofollow ugc">donation</a>.</em></p>
<div class="md-table">
<table>
<thead>
<tr>
<th>IDE</th>
<th>Rich/Small</th>
<th>Languages</th>
<th>Cost</th>
<th>Trial</th>
<th>License</th>
<th>Source</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.jetbrains.com/idea/download/download-thanks.html?code=IIC" rel="noopener nofollow ugc">IntelliJ IDEA Community Edition</a></td>
<td>Rich</td>
<td>Java</td>
<td>Free</td>
<td>N/A</td>
<td>Apache 2.0</td>
<td><a href="https://github.com/JetBrains/intellij-community" rel="noopener nofollow ugc">JetBrains/intellij-community</a></td>
</tr>
<tr>
<td><a href="https://www.jetbrains.com/idea/download/download-thanks.html" rel="noopener nofollow ugc">IntelliJ IDEA Ultimate Edition</a></td>
<td>Rich</td>
<td>Java</td>
<td><a href="https://www.jetbrains.com/idea/buy/#edition=discounts" rel="noopener nofollow ugc">Subscription</a></td>
<td>30-days</td>
<td>Commercial</td>
<td>N/A</td>
</tr>
<tr>
<td><a href="https://www.jetbrains.com/objc/download/download-thanks.html" rel="noopener nofollow ugc">AppCode</a></td>
<td>Small</td>
<td>Objective-C</td>
<td><a href="https://www.jetbrains.com/objc/buy/#edition=discounts" rel="noopener nofollow ugc">Subscription</a></td>
<td>30-days</td>
<td>Commercial</td>
<td>N/A</td>
</tr>
<tr>
<td><a href="https://www.jetbrains.com/clion/download/download-thanks.html" rel="noopener nofollow ugc">CLion</a></td>
<td>Small</td>
<td>C/C++</td>
<td><a href="https://www.jetbrains.com/clion/buy/#edition=discounts" rel="noopener nofollow ugc">Subscription</a></td>
<td>30-days</td>
<td>Commercial</td>
<td>N/A</td>
</tr>
<tr>
<td><a href="https://www.jetbrains.com/datagrip/download/download-thanks.html" rel="noopener nofollow ugc">DataGrip</a></td>
<td>Small</td>
<td>SQL</td>
<td><a href="https://www.jetbrains.com/datagrip/buy/#edition=discounts" rel="noopener nofollow ugc">Subscription</a></td>
<td>30-days</td>
<td>Commercial</td>
<td>N/A</td>
</tr>
<tr>
<td><a href="https://www.jetbrains.com/go/download/download-thanks.html?type=eap" rel="noopener nofollow ugc">Gogland</a></td>
<td>Small</td>
<td>Go</td>
<td>Free</td>
<td>N/A</td>
<td>Early Access Preview</td>
<td>N/A</td>
</tr>
<tr>
<td><a href="https://www.jetbrains.com/phpstorm/download/download-thanks.html" rel="noopener nofollow ugc">PHPStorm</a></td>
<td>Small</td>
<td>PHP</td>
<td><a href="https://www.jetbrains.com/phpstorm/buy/#edition=discounts" rel="noopener nofollow ugc">Subscription</a></td>
<td>30-days</td>
<td>Commercial</td>
<td>N/A</td>
</tr>
<tr>
<td><a href="https://www.jetbrains.com/pycharm/download/download-thanks.html?code=PCC" rel="noopener nofollow ugc">PyCharm Community Edition</a></td>
<td>Small</td>
<td>Python</td>
<td>Free</td>
<td>N/A</td>
<td>Apache 2.0</td>
<td><a href="https://github.com/JetBrains/intellij-community/tree/master/python" rel="noopener nofollow ugc">JetBrains/intellij-community subdirectory</a></td>
</tr>
<tr>
<td><a href="https://www.jetbrains.com/pycharm/download/download-thanks.html" rel="noopener nofollow ugc">PyCharm Professional Edition</a></td>
<td>Small</td>
<td>Python</td>
<td><a href="https://www.jetbrains.com/pycharm/buy/#edition=discounts" rel="noopener nofollow ugc">Subscription</a></td>
<td>N/A</td>
<td>Commercial</td>
<td>N/A</td>
</tr>
<tr>
<td><a href="https://www.jetbrains.com/rider/download/download-thanks.html" rel="noopener nofollow ugc">Rider</a></td>
<td>Small</td>
<td>.NET</td>
<td><a href="https://www.jetbrains.com/rider/buy/#edition=discounts" rel="noopener nofollow ugc">Subcription</a></td>
<td>N/A</td>
<td>Commercial</td>
<td>N/A</td>
</tr>
<tr>
<td><a href="https://www.jetbrains.com/ruby/download/download-thanks.html" rel="noopener nofollow ugc">RubyMine</a></td>
<td>Small</td>
<td>Ruby</td>
<td><a href="https://www.jetbrains.com/ruby/buy/#edition=discounts" rel="noopener nofollow ugc">Subscription</a></td>
<td>30-days (<a href="https://www.jetbrains.com/ruby/buy/#edition=trial" rel="noopener nofollow ugc">90-day for whole team</a>)</td>
<td>Commercial</td>
<td>N/A</td>
</tr>
<tr>
<td><a href="https://www.jetbrains.com/webstorm/download/download-thanks.html" rel="noopener nofollow ugc">WebStorm</a></td>
<td>Small</td>
<td>JavaScript</td>
<td><a href="https://www.jetbrains.com/webstorm/buy/#edition=discounts" rel="noopener nofollow ugc">Subscription</a></td>
<td>30-days</td>
<td>Commercial</td>
<td>N/A</td>
</tr>
</tbody>
</table>
</div><p>Once you have your IDE of choice installed, you can <a href="https://github.com/KronicDeth/intellij-elixir/tree/v6.3.0#installation" rel="noopener nofollow ugc">install this plugin</a></p>
<h2><a name="p-55045-features-16" class="anchor" href="#p-55045-features-16" aria-label="Heading link" rel="nofollow"></a>Features</h2>
<div class="md-table">
<table>
<thead>
<tr>
<th>Feature</th>
<th><a href="https://github.com/KronicDeth/intellij-elixir/tree/v6.3.0#ides" rel="noopener nofollow ugc">Rich</a></th>
<th><a href="https://github.com/KronicDeth/intellij-elixir/tree/v6.3.0#ides" rel="noopener nofollow ugc">Small</a></th>
<th>Alternative</th>
</tr>
</thead>
<tbody>
<tr>
<td>Project</td>
<td>Yes</td>
<td>No</td>
<td>1. Open directory<br>2. <a href="https://github.com/KronicDeth/intellij-elixir/tree/v6.3.0#elixir-sdk-path" rel="noopener nofollow ugc">Elixir SDK Path in External Elixir Tools</a></td>
</tr>
<tr>
<td>Project Structure</td>
<td>Automatic</td>
<td>Manual</td>
<td></td>
</tr>
<tr>
<td>Project Settings</td>
<td>Yes</td>
<td>No</td>
<td></td>
</tr>
<tr>
<td>Module Settings</td>
<td>Yes</td>
<td>No</td>
<td></td>
</tr>
<tr>
<td>New Elixir File</td>
<td>Yes</td>
<td>Yes</td>
<td></td>
</tr>
<tr>
<td>Syntax Highlighting and Semantic Annotation</td>
<td>Yes</td>
<td>Yes</td>
<td></td>
</tr>
<tr>
<td>Grammar Parsing</td>
<td>Yes</td>
<td>Yes</td>
<td></td>
</tr>
<tr>
<td>Inspections</td>
<td>Yes</td>
<td>Yes</td>
<td></td>
</tr>
<tr>
<td>Quick Fixes</td>
<td>Yes</td>
<td>Yes</td>
<td></td>
</tr>
<tr>
<td>Code Folding</td>
<td>Yes</td>
<td>Yes</td>
<td></td>
</tr>
<tr>
<td>Commenter</td>
<td>Yes</td>
<td>Yes</td>
<td></td>
</tr>
<tr>
<td>Debugger</td>
<td>Yes</td>
<td>Yes</td>
<td></td>
</tr>
<tr>
<td>Delimiters</td>
<td>Yes</td>
<td>Yes</td>
<td></td>
</tr>
<tr>
<td>Building/Compiling</td>
<td>Yes</td>
<td>No</td>
<td>Build/compile as part <code>mix</code> run configurations only</td>
</tr>
<tr>
<td>Live Templates</td>
<td>Yes</td>
<td>Yes</td>
<td></td>
</tr>
<tr>
<td>Run Configurations</td>
<td>Yes</td>
<td>Yes</td>
<td></td>
</tr>
<tr>
<td>Completion</td>
<td>Yes</td>
<td>Yes</td>
<td></td>
</tr>
<tr>
<td>Decompilation</td>
<td>Yes</td>
<td>Yes</td>
<td></td>
</tr>
<tr>
<td>Go To Declaration</td>
<td>Yes</td>
<td>Yes</td>
<td></td>
</tr>
<tr>
<td>Formatting</td>
<td>Yes</td>
<td>Yes</td>
<td></td>
</tr>
<tr>
<td>Go To Symbol</td>
<td>Yes</td>
<td>Yes</td>
<td></td>
</tr>
<tr>
<td>Go To Test</td>
<td>Yes</td>
<td>Yes</td>
<td></td>
</tr>
<tr>
<td>Go To Test Subject</td>
<td>Yes</td>
<td>Yes</td>
<td></td>
</tr>
<tr>
<td>Find Usage</td>
<td>Yes</td>
<td>Yes</td>
<td></td>
</tr>
<tr>
<td>Refactor</td>
<td>Yes</td>
<td>Yes</td>
<td></td>
</tr>
<tr>
<td>SDK</td>
<td>Yes</td>
<td>No</td>
<td><a href="https://github.com/KronicDeth/intellij-elixir/tree/v6.3.0#elixir-sdk-path" rel="noopener nofollow ugc">Elixir SDK Path in External Elixir Tools</a></td>
</tr>
<tr>
<td>Structure</td>
<td>Yes</td>
<td>Yes</td>
<td></td>
</tr>
</tbody>
</table>
</div><h3><a name="p-55045-project-17" class="anchor" href="#p-55045-project-17" aria-label="Heading link" rel="nofollow"></a>Project</h3>
<b>
NOTE: This feature only works in Rich IDEs as it depends on an extension point unavailable in Small IDEs.  To setup a project in a Small IDE
</b><ol><b>
<li>Open Directory of the project</li>
</b><li><b><a href="https://github.com/KronicDeth/intellij-elixir/tree/v6.3.0#elixir-sdk-path" rel="noopener nofollow ugc">Setup the Elixir SDK Path in External Elixir Tools</a><br>
</b></li>
</ol>
<h4><a name="p-55045-from-existing-sources-18" class="anchor" href="#p-55045-from-existing-sources-18" aria-label="Heading link" rel="nofollow"></a>From Existing Sources</h4>
<h5><a name="p-55045-import-project-from-external-model-19" class="anchor" href="#p-55045-import-project-from-external-model-19" aria-label="Heading link" rel="nofollow"></a>Import project from external model</h5>
<p>If you’ve already created a <code>mix</code> project, you can load it as an Elixir project into the plugin.</p>
<ol>
<li>File &gt; New &gt; Project From Existing Sources…</li>
<li>Select the root directory of your project.</li>
<li>Select “Import project from external model”</li>
<li>Select Mix<br>
<div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/d/d58aa4ba6ffac471d55e37520a4d0d5628b0c152.png" data-download-href="https://forum.elixirforum.com/uploads/default/d58aa4ba6ffac471d55e37520a4d0d5628b0c152" title="" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/optimized/2X/d/d58aa4ba6ffac471d55e37520a4d0d5628b0c152_2_690x626.png" alt="" role="presentation" width="690" height="626" srcset="https://forum.elixirforum.com/uploads/default/optimized/2X/d/d58aa4ba6ffac471d55e37520a4d0d5628b0c152_2_690x626.png, https://forum.elixirforum.com/uploads/default/original/2X/d/d58aa4ba6ffac471d55e37520a4d0d5628b0c152.png 1.5x, https://forum.elixirforum.com/uploads/default/original/2X/d/d58aa4ba6ffac471d55e37520a4d0d5628b0c152.png 2x" data-dominant-color="51565A"><div class="meta"><svg class="fa d-icon d-icon-far-image svg-icon" aria-hidden="true"><use href="#far-image"></use></svg><span class="filename"></span><span class="informations">726×659 16.5 KB</span><svg class="fa d-icon d-icon-discourse-expand svg-icon" aria-hidden="true"><use href="#discourse-expand"></use></svg></div></a></div></li>
<li>Click Next</li>
<li>The “Mix project root” will be filled in with the selected directory.</li>
<li>(Optional) Uncheck “Fetch dependencies with mix” if you don’t want to run <code>mix deps.get</code> when importing the project
<ul>
<li>If “Fetch dependencies with mix” is checked both <code>mix hex.local --force</code> and <code>mix deps.get</code> will be run.</li>
</ul>
</li>
<li>Ensure the correct “Mix Path” is detected.  On Windows, the <code>mix.bat</code>, such as<br>
<code>C:\Program Files (x86)\Elixir\bin\mix.bat</code> should be used instead of the <code>mix</code> file without the extension.</li>
<li>Ensure the “Mix Version” is as expected.  The number in parentheses should match the Elixir version.</li>
<li>Click Next</li>
<li>All directories with <code>mix.exs</code> files will be selected as “Mix projects to import”.  To import just the main project and not its dependencies, click Unselect All.</li>
<li>Check the box next to the project root to use only its <code>mix.exs</code>.  (It will likely be the first checkbox at the top.)</li>
<li>Click Next</li>
<li>Select a Project SDK directory by clicking Configure.</li>
<li>The plugin will automatically find the newest version of Elixir installed. (<strong>NOTE: SDK detection only works for<br>
Linux, homebrew installs on OSX, and Windows.  <a href="https://github.com/KronicDeth/intellij-elixir/issues" rel="noopener nofollow ugc">Open an issue</a><br>
with information about Elixir install locations on your operating system and package manager to have SDK detection<br>
added for it.</strong>)</li>
<li>If the automatic detection doesn’t find your Elixir SDK or you want to use an older version, manually select select<br>
the directory above the <code>bin</code> directory containing <code>elixir</code>, <code>elixirc</code>, <code>iex</code>, and <code>mix</code>. (On Windows it is the<br>
directory containing <code>elixir.bat</code>, <code>elixirc.bat</code>, <code>iex.bat</code>, and <code>mix.bat</code>.)</li>
<li>Click Finish after you select SDK name from the Project SDK list.</li>
</ol>
<h5><a name="p-55045-create-project-from-existing-sources-20" class="anchor" href="#p-55045-create-project-from-existing-sources-20" aria-label="Heading link" rel="nofollow"></a>Create project from existing sources</h5>
<p>If you’ve already created a (non-<code>mix</code>) project, you can load it as an Elixir project into the plugin.</p>
<ol>
<li>File &gt; New &gt; Project From Existing Sources…</li>
<li>Select the root directory of your project.</li>
<li>Leave the default selection, “Create project from existing sources”</li>
<li>Click Next</li>
<li>Project name will be filled with the basename of the root directory.  Customize it if you like.</li>
<li>Project location will be the root directory.</li>
<li>Click Next.</li>
<li>If you previously opened the directory in IntelliJ or another JetBrains IDE, you’ll be prompted to overwrite the<br>
.idea directory.  Click Yes.</li>
<li>You’ll be prompted with a list of detected Elixir project roots to add to the project.  Each root contains a<br>
<code>mix.exs</code>.  Uncheck any project roots that you don’t want added.</li>
<li>Click Next.</li>
<li>Select a Project SDK directory by clicking Configure.</li>
<li>The plugin will automatically find the newest version of Elixir installed. (<strong>NOTE: SDK detection only works for<br>
Linux, homebrew installs on OSX, and Windows.  <a href="https://github.com/KronicDeth/intellij-elixir/issues" rel="noopener nofollow ugc">Open an issue</a><br>
with information about Elixir install locations on your operating system and package manager to have SDK detection<br>
added for it.</strong>)</li>
<li>If the automatic detection doesn’t find your Elixir SDK or you want to use an older version, manually select select<br>
the directory above the <code>bin</code> directory containing <code>elixir</code>, <code>elixirc</code>, <code>iex</code>, and <code>mix</code>.</li>
<li>Click Next after you select SDK name from the Project SDK list.</li>
<li>Click Finish on the framework page.  (<em>No framework detection is implemented yet for Elixir.</em>)</li>
<li>Choose whether to open in a New Window or in This Window.</li>
</ol>
<h4><a name="p-55045-new-21" class="anchor" href="#p-55045-new-21" aria-label="Heading link" rel="nofollow"></a>New</h4>
<p>If you want to create a basic (non-<code>mix</code>) Elixir project with a <code>lib</code> directory, perform the following steps.</p>
<ol>
<li>File &gt; New &gt; Project<br>
<img src="https://forum.elixirforum.com/uploads/default/original/2X/b/bd76614608dc79c52c56034b0879f6843b2a03cf.png" alt="" role="presentation" width="612" height="54"></li>
<li>Select Elixir from the project type menu on the left</li>
<li>Click Next<br>
<div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/a/af062e9e052e0085e9f3f973a158dfff4f0598f4.png" data-download-href="https://forum.elixirforum.com/uploads/default/af062e9e052e0085e9f3f973a158dfff4f0598f4" title="" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/2X/a/af062e9e052e0085e9f3f973a158dfff4f0598f4.png" alt="" role="presentation" width="509" height="429"><div class="meta"><svg class="fa d-icon d-icon-far-image svg-icon" aria-hidden="true"><use href="#far-image"></use></svg><span class="filename"></span><span class="informations">509×429 22.3 KB</span><svg class="fa d-icon d-icon-discourse-expand svg-icon" aria-hidden="true"><use href="#discourse-expand"></use></svg></div></a></div></li>
<li>Select a Project SDK directory by clicking Configure.<br>
<div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/8/87279f9d8d60bce6ba73f611e2d4563ac4ef5d4b.png" data-download-href="https://forum.elixirforum.com/uploads/default/87279f9d8d60bce6ba73f611e2d4563ac4ef5d4b" title="" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/2X/8/87279f9d8d60bce6ba73f611e2d4563ac4ef5d4b.png" alt="" role="presentation" width="509" height="430"><div class="meta"><svg class="fa d-icon d-icon-far-image svg-icon" aria-hidden="true"><use href="#far-image"></use></svg><span class="filename"></span><span class="informations">509×430 19 KB</span><svg class="fa d-icon d-icon-discourse-expand svg-icon" aria-hidden="true"><use href="#discourse-expand"></use></svg></div></a></div></li>
<li>Select a Project SDK directory by clicking Configure.</li>
<li>The plugin will automatically find the newest version of Elixir installed.
<ul>
<li>macOS / OSX
<ul>
<li>Homebrew (<code>/usr/local/Cellar/elixir</code>)</li>
<li>Nix (<code>/nix/store</code>)</li>
</ul>
</li>
<li>Linux
<ul>
<li><code>/usr/local/lib/elixir</code></li>
<li>Nix and NixOS (<code>/nix/store</code>)</li>
</ul>
</li>
<li>Windows
<ul>
<li>32-bit (<code>C:\Program Files\Elixir</code>)</li>
<li>64-bit (<code>C:\Program Files (x86)\Elixir</code>)</li>
<li>(<strong>NOTE: SDK detection only works for <a href="https://github.com/KronicDeth/intellij-elixir/issues" rel="noopener nofollow ugc">Open an issue</a> with information about Elixir install locations on your operating system and package manager to have SDK detection added for it.</strong>)</li>
</ul>
</li>
</ul>
</li>
<li>If the automatic detection doesn’t find your Elixir SDK or you want to use an older version, manually select select the directory above the <code>bin</code> directory containing <code>elixir</code>, <code>elixirc</code>, <code>iex</code>, and <code>mix</code>.  If the <code>bin</code>, <code>lib,</code> or <code>src</code> directory is incorrectly selected, it will be corrected to the parent directory.</li>
<li>Click Next after you select SDK name from the Project SDK list.</li>
<li>Change the <code>Project name</code> to the name your want for the project<br>
<div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/5/5a95e8a25256615d6a4f175c2b84e9d47ef1431c.png" data-download-href="https://forum.elixirforum.com/uploads/default/5a95e8a25256615d6a4f175c2b84e9d47ef1431c" title="" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/2X/5/5a95e8a25256615d6a4f175c2b84e9d47ef1431c.png" alt="" role="presentation" width="564" height="426"><div class="meta"><svg class="fa d-icon d-icon-far-image svg-icon" aria-hidden="true"><use href="#far-image"></use></svg><span class="filename"></span><span class="informations">564×426 28.5 KB</span><svg class="fa d-icon d-icon-discourse-expand svg-icon" aria-hidden="true"><use href="#discourse-expand"></use></svg></div></a></div></li>
<li>(Optionally) change the <code>Project location</code> if the directory does not match what you want</li>
<li>(Optionally) expand <code>More Settings</code> to change the <code>Module name</code>, <code>Content root</code>, <code>Module file location</code>, and/or <code>Project format</code>.  The defaults derived from the <code>Project name</code> and <code>Project location</code> should work for most projects.</li>
<li>Click Finish</li>
<li>Choose whether to open in a New Window or in This Window.<br>
<div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/5/5a95e8a25256615d6a4f175c2b84e9d47ef1431c.png" data-download-href="https://forum.elixirforum.com/uploads/default/5a95e8a25256615d6a4f175c2b84e9d47ef1431c" title="" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/2X/5/5a95e8a25256615d6a4f175c2b84e9d47ef1431c.png" alt="" role="presentation" width="564" height="426"><div class="meta"><svg class="fa d-icon d-icon-far-image svg-icon" aria-hidden="true"><use href="#far-image"></use></svg><span class="filename"></span><span class="informations">564×426 28.5 KB</span><svg class="fa d-icon d-icon-discourse-expand svg-icon" aria-hidden="true"><use href="#discourse-expand"></use></svg></div></a></div></li>
</ol>
<h3><a name="p-55045-external-annotators-22" class="anchor" href="#p-55045-external-annotators-22" aria-label="Heading link" rel="nofollow"></a>External Annotators</h3>
<p>In addition to the built-in syntax highlighting and annotations above, various <code>mix</code> tasks will be run to gather annotations from Elixir status analysis tools.</p>
<h4><a name="p-55045-credo-23" class="anchor" href="#p-55045-credo-23" aria-label="Heading link" rel="nofollow"></a>Credo</h4>
<p>If <a href="https://github.com/rrrene/credo" rel="noopener nofollow ugc"><code>credo</code></a> is not installed as a project dependency, nothing will happen, but if it is installed, <code>mix credo PATH</code> will be called on any files after updates have quieted.  Any <code>credo</code> check failures will show up as warning annotations</p>
<p><img src="/screenshots/features/external_annotators/credo/Warning%20Annotations.png?raw=true" alt="Warning Annotations" title="Warning Annotations" width="" height=""></p>
<p>Individual check failures will show the explanation (from <code>mix credo PATH:LINE(:COLUMN)</code>) if you hover over the annotation</p>
<p><img src="/screenshots/features/external_annotators/credo/Explanation.png?raw=true" alt="Explanation" title="Credo Check Failure Explanation" width="" height=""></p>
<p>You can hover over the explanation and click the embedded links to jump to the line (and column) where the failure occurred.</p>
<h3><a name="p-55045-sdk-24" class="anchor" href="#p-55045-sdk-24" aria-label="Heading link" rel="nofollow"></a>SDK</h3>
<p><strong>NOTE: These instructions only apply to Rich IDEs, for a Small IDE use <a href="https://github.com/KronicDeth/intellij-elixir/tree/v6.3.0#elixir-sdk-path" rel="noopener nofollow ugc">Elixir SDK Path</a></strong></p>
<h3><a name="p-55045-elixir-external-tools-25" class="anchor" href="#p-55045-elixir-external-tools-25" aria-label="Heading link" rel="nofollow"></a>Elixir External Tools</h3>
<h4><a name="p-55045-rich-ideshttpsgithubcomkronicdethintellij-elixirtreev630ides-26" class="anchor" href="#p-55045-rich-ideshttpsgithubcomkronicdethintellij-elixirtreev630ides-26" aria-label="Heading link" rel="nofollow"></a><a href="https://github.com/KronicDeth/intellij-elixir/tree/v6.3.0#ides" rel="noopener nofollow ugc">Rich IDEs</a></h4>
<p><img src="https://github.com/KronicDeth/intellij-elixir/blob/v6.3.0/screenshots/features/external_elixir_tools/Rich%20IDE.png?raw=true" alt="Elixir External Tools in Rich IDEs" title="Elixir External Tools in Rich IDEs" width="" height=""></p>
<p>In a <a href="https://github.com/KronicDeth/intellij-elixir/tree/v6.3.0#ides" rel="noopener nofollow ugc">Rich IDE</a>, like IntelliJ IDEA, only the path to <code>mix</code> is configured as an external tool.  This <code>mix</code> path is only used when creating new projects, so when opening a pre-existing project with <a href="https://github.com/KronicDeth/intellij-elixir/tree/v6.3.0#import-project-from-external-model" rel="noopener nofollow ugc">Import project from external model</a>, this doesn’t even need to be set.</p>
<h4><a name="p-55045-small-ideshttpsgithubcomkronicdethintellij-elixirtreev630ides-27" class="anchor" href="#p-55045-small-ideshttpsgithubcomkronicdethintellij-elixirtreev630ides-27" aria-label="Heading link" rel="nofollow"></a><a href="https://github.com/KronicDeth/intellij-elixir/tree/v6.3.0#ides" rel="noopener nofollow ugc">Small IDEs</a></h4>
<p><img src="https://github.com/KronicDeth/intellij-elixir/blob/v6.3.0/screenshots/features/external_elixir_tools/Small%20IDE.png?raw=true" alt="Elixir External Tools in Small IDEs" title="Elixir External Tools in Small IDEs" width="" height=""></p>
<h5><a name="p-55045-elixir-sdk-path-28" class="anchor" href="#p-55045-elixir-sdk-path-28" aria-label="Heading link" rel="nofollow"></a>Elixir SDK Path</h5>
<p><strong>NOTE: To setup the SDK in a Rich IDE use <a href="https://github.com/KronicDeth/intellij-elixir/tree/v6.3.0#import-project-from-external-model" rel="noopener nofollow ugc">Import project from external model</a> or <a href="https://github.com/KronicDeth/intellij-elixir/tree/v6.3.0#sdk" rel="noopener nofollow ugc">SDK</a></strong></p>
<p>In a <a href="https://github.com/KronicDeth/intellij-elixir/tree/v6.3.0#ides" rel="noopener nofollow ugc">Small IDE</a>, like Rubymine, the Project SDK is always a Ruby SDK, so to support a pseudo-Elixir-SDK in a Small IDE, the Elixir SDK Path can be set.</p>
<ol>
<li>Open Preferences &gt; Other Settings &gt; Elixir External Tools</li>
<li>Set the Elixir SDK Path</li>
</ol>
<ul>
<li>Paste the path to an Elixir SDK</li>
<li>Click the <code>...</code> to select the directory</li>
</ul>
<p>The pattern for the Elixir SDK Path varies based on the OS and package manager you used to install Elixir</p>
<div class="md-table">
<table>
<thead>
<tr>
<th>OS</th>
<th>Package Manager</th>
<th>Elixir SDK Path</th>
</tr>
</thead>
<tbody>
<tr>
<td>OSX/macOS</td>
<td>Homebrew</td>
<td><code>/usr/local/Cellar/elixir/VERSION</code></td>
</tr>
<tr>
<td>OSX/macOS/Linux</td>
<td>Nix</td>
<td><code>/nix/store/HASH-elixir-VERSION</code></td>
</tr>
<tr>
<td>Windows 32-bit</td>
<td>Erlang Solutions</td>
<td><code>C:\Program Files\Elixir</code></td>
</tr>
<tr>
<td>Windows 64-bit</td>
<td>Erlang Solutions</td>
<td><code>C:\Program Files (x86)\Elixir</code></td>
</tr>
<tr>
<td>Linux</td>
<td>Default</td>
<td><code>/usr/local/lib/elixir</code></td>
</tr>
</tbody>
</table>
</div><h1><a name="p-55045-installation-29" class="anchor" href="#p-55045-installation-29" aria-label="Heading link" rel="nofollow"></a>Installation</h1>
<p><a href="https://github.com/KronicDeth/intellij-elixir/blob/v6.3.0/README.md#installation" rel="noopener nofollow ugc">Installation Instructions</a></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="55045" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/intellij-elixir-elixir-plugin-for-jetbrains-intellij-platform/1697/38">Post #37</a>
	                </div>
	            </div>
              <div id="likers-container-55045" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="55045"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #37"></div>
  </section>
</div>
    <div class="postbit" id="56114" data-post-id="56114">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="KronicDeth" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/KronicDeth/120/33300_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  KronicDeth
                      <span class="op-star" title="Thread Starter">
                        <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                      </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<h1><a name="p-56114-version-640-1" class="anchor" href="#p-56114-version-640-1" aria-label="Heading link" rel="nofollow"></a>Version 6.4.0</h1>
<p><a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&amp;business=Kronic%2eDeth%40gmail%2ecom&amp;lc=US&amp;item_name=Elixir%20plugin%20for%20IntelliJ%20IDEA&amp;currency_code=USD&amp;bn=PP%2dDonationsBF%3abtn_donate_LG%2egif%3aNonHosted" rel="noopener nofollow ugc">Donate</a></p>
<h1><a name="p-56114-thanks-2" class="anchor" href="#p-56114-thanks-2" aria-label="Heading link" rel="nofollow"></a>Thanks</h1>
<ul>
<li>For reporting assertion error when explanation content was not indented 5 spaces
<ul>
<li>Andrei Dziahel (<a href="https://github.com/develop7" rel="noopener nofollow ugc">@develop7</a>)</li>
</ul>
</li>
<li>For reporting assertion error in <code>Credo#stripEdge</code>
<ul>
<li>Ron Arts (<a href="https://github.com/raarts" rel="noopener nofollow ugc">@raarts</a>)</li>
</ul>
</li>
<li>For reporting that <code>end</code> wasn’t being decompiled with <code>Unquoted</code> in <code>wx-1.8.2/ebin/gl.beam</code>
<ul>
<li>Denis Andrejew (<a href="https://github.com/seeekr" rel="noopener nofollow ugc">@seeekr</a>)</li>
</ul>
</li>
<li>For reporting that <code>$code_change</code> wasn’t being decompiled with <code>Unquoted</code> in <code>tools-2.11/ebin/fprof.beam</code>
<ul>
<li>Denis Andrejew (<a href="https://github.com/seeekr" rel="noopener nofollow ugc">@seeekr</a>)</li>
</ul>
</li>
<li>For reporting that <code>BeamFileImpl</code> needed <code>StubbedSpine getStubbedSpine()</code> in IntelliJ IDEA 2017.3 EAP/Public Preview
<ul>
<li>Matt Jadczak (<a href="https://github.com/mjadczak" rel="noopener nofollow ugc">@mjadczak</a>)</li>
<li>Raman But-Husaim (<a href="https://github.com/RamanBut-Husaim" rel="noopener nofollow ugc">@RamanBut-Husaim</a>)</li>
</ul>
</li>
<li>For showing that <code>StubbedSpine getStubbedSpine()</code> could be copied from <code>ClsFileImpl</code>, but then fixing it, so that <code>getStubbedSpine()</code> had a default implementation on the interface, so I didn’t need to use reflection to support &gt; 2017.3 and earlier versions. <img src="https://forum.elixirforum.com/images/emoji/apple/heart.png?v=15" title=":heart:" class="emoji" alt=":heart:" loading="lazy" width="20" height="20">
<ul>
<li>Peter Gromov (<a href="https://github.com/donnerpeter" rel="noopener nofollow ugc">@donnerpeter</a>)</li>
</ul>
</li>
<li>For reporting that <code>Credo</code> annotator violated “Write access is allowed from event dispatch thread only” when <code>Type. putDefaultErlangSdk</code> was triggered for upgraders that didn’t upgrade their SDK manually or with a <code>mix</code> Run Configuration before the Credo annotator started running.
<ul>
<li>Pavel Kotlyar (<a href="https://github.com/paxer" rel="noopener nofollow ugc">@paxer</a>)</li>
<li>Shane S (<a href="https://github.com/ShaneSegal" rel="noopener nofollow ugc">@ShaneSegal</a>)</li>
<li><a href="https://github.com/chinazhangyujia" rel="noopener nofollow ugc">@chinazhangyujia</a></li>
<li>Szymon Jeż (<a href="https://github.com/szymon-jez" rel="noopener nofollow ugc">@szymon-jez</a>)</li>
<li>Björn Erlwein (<a href="https://github.com/beji" rel="noopener nofollow ugc">@beji</a>)</li>
<li>Ram Kumar (<a href="https://github.com/ramka001" rel="noopener nofollow ugc">@ramka001</a>)</li>
<li>Steve Wagner (<a href="https://github.com/ciroque" rel="noopener nofollow ugc">@ciroque</a>)</li>
<li>Sergey Shramko (<a href="https://github.com/sshramko" rel="noopener nofollow ugc">@sshramko</a>)</li>
<li>Anton Medvedev (<a href="https://github.com/antonmedv" rel="noopener nofollow ugc">@antonmedv</a>)</li>
<li>Raz (<a href="https://github.com/RazgrizHsu" rel="noopener nofollow ugc">@RazgrizHsu</a>)</li>
<li>Andre Dobroskok (<a href="https://github.com/andre-dubber" rel="noopener nofollow ugc">@andre-dubber</a>)</li>
<li>Wojciech Bednarski (<a href="https://github.com/wbednarski" rel="noopener nofollow ugc">@wbednarski</a>)</li>
</ul>
</li>
<li>For reporting ANSI escape codes were not converted to colors in console output
<ul>
<li>Alexey (<a href="https://github.com/Nihisil" rel="noopener nofollow ugc">@Nihisil</a>)</li>
<li>Hannes Nevalainen (<a href="https://github.com/kwando" rel="noopener nofollow ugc">@kwando</a>)</li>
</ul>
</li>
<li>For pointing me towards <code>com.intellij.execution.process.ColoredProcessHandler</code> for ANSI escape code colors. <img src="https://forum.elixirforum.com/images/emoji/apple/heart.png?v=15" title=":heart:" class="emoji" alt=":heart:" loading="lazy" width="20" height="20">
<ul>
<li>Sergey Savenko (<a href="https://github.com/deadok22" rel="noopener nofollow ugc">@deadok22</a>)</li>
</ul>
</li>
</ul>
<h1><a name="p-56114-changelog-3" class="anchor" href="#p-56114-changelog-3" aria-label="Heading link" rel="nofollow"></a>Changelog</h1>
<h2><a name="p-56114-v640-4" class="anchor" href="#p-56114-v640-4" aria-label="Heading link" rel="nofollow"></a>v6.4.0</h2>
<h3><a name="p-56114-enhancements-5" class="anchor" href="#p-56114-enhancements-5" aria-label="Heading link" rel="nofollow"></a>Enhancements</h3>
<ul>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/861" rel="noopener nofollow ugc">#861</a> - Regression test for <a href="https://github.com/KronicDeth/intellij-elixir/issues/860" rel="noopener nofollow ugc">#860</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a></li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/862" rel="noopener nofollow ugc">#862</a> - Regression test for <a href="https://github.com/KronicDeth/intellij-elixir/issues/859" rel="noopener nofollow ugc">#859</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a></li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/863" rel="noopener nofollow ugc">#863</a> - Convert ANSI escape codes to colored output in <code>mix</code> Run and Debug output - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a></li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/886" rel="noopener nofollow ugc">#886</a> - Regression test for <a href="https://github.com/KronicDeth/intellij-elixir/issues/883" rel="noopener nofollow ugc">#883</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a></li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/887" rel="noopener nofollow ugc">#887</a> - Regression test for <a href="https://github.com/KronicDeth/intellij-elixir/issues/878" rel="noopener nofollow ugc">#878</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a></li>
</ul>
<h3><a name="p-56114-bug-fixes-6" class="anchor" href="#p-56114-bug-fixes-6" aria-label="Heading link" rel="nofollow"></a>Bug Fixes</h3>
<ul>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/861" rel="noopener nofollow ugc">#861</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a>.
<ul>
<li>Quote <code>-</code> in addition to <code>#</code> in <code>Unquoted</code> <code>MacroNameArity</code> decompiler.</li>
<li>Quote <code>-</code> in decompiled module names.</li>
</ul>
</li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/862" rel="noopener nofollow ugc">#862</a> - Wrap call definitions with name <code>nil</code> as <code>unquote(:nil)</code> in the decompiler. - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a></li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/884" rel="noopener nofollow ugc">#884</a> - <code>Application#runWriteAction</code> MUST be run from EventDispatch thread.  This is true when run from a Run Configuration runner, but when the Credo annotator runs <code>runWriteAction</code>, it’s not in an EventDispatch thread, so followed <a href="https://www.jetbrains.org/intellij/sdk/docs/basics/architectural_overview/general_threading_rules.html" rel="noopener nofollow ugc">IntelliJ Platform SDK DevGuide - General Threading Rules</a> and wrapped the <code>runWriteAction</code> in <code>Application#invokeAndWait</code>. - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a></li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/885" rel="noopener nofollow ugc">#885</a> - Wrap <code>sdkModificator::commitChanges</code> in <code>invokeAndWait</code> <code>runWriteAction</code> in <code>MixRunningStateUtil#updateRoots</code>. - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a></li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/886" rel="noopener nofollow ugc">#886</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a>
<ul>
<li>
<p>Generalize what needs to be double quoted for <code>Unquoted</code> decompiler</p>
<ul>
<li>Aliases and special forms are bare atoms</li>
<li>Anything that is NEITHER an identifier NOR a prefix operator is a double quoted atom.</li>
</ul>
<p>Normal identifiers and prefix operators then fall through to the <code>Default</code> decompiler.</p>
</li>
</ul>
</li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/887" rel="noopener nofollow ugc">#887</a> - Add <code>end</code> to <code>Unquoted</code> decompiler bare atoms. - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a></li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/888" rel="noopener nofollow ugc">#888</a> - Replace <code>assert</code>s in <code>Credo</code> external annotator with extended log messages that record the unexpected line. - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a></li>
</ul>
<h1><a name="p-56114-installation-7" class="anchor" href="#p-56114-installation-7" aria-label="Heading link" rel="nofollow"></a>Installation</h1>
<p><a href="https://github.com/KronicDeth/intellij-elixir/blob/v6.4.0/README.md#installation" rel="noopener nofollow ugc">Installation Instructions</a></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="56114" data-batch-url="/posts/batch_likers">
                        5
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/intellij-elixir-elixir-plugin-for-jetbrains-intellij-platform/1697/39">Post #38</a>
	                </div>
	            </div>
              <div id="likers-container-56114" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="56114"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #38"></div>
  </section>
</div>
    <div class="postbit" id="56890" data-post-id="56890">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="KronicDeth" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/KronicDeth/120/33300_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  KronicDeth
                      <span class="op-star" title="Thread Starter">
                        <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                      </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<h1><a name="p-56890-version-650-1" class="anchor" href="#p-56890-version-650-1" aria-label="Heading link" rel="nofollow"></a>Version 6.5.0</h1>
<p><a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&amp;business=Kronic%2eDeth%40gmail%2ecom&amp;lc=US&amp;item_name=Elixir%20plugin%20for%20IntelliJ%20IDEA&amp;currency_code=USD&amp;bn=PP%2dDonationsBF%3abtn_donate_LG%2egif%3aNonHosted" rel="noopener nofollow ugc">Donate</a></p>
<h1><a name="p-56890-thanks-2" class="anchor" href="#p-56890-thanks-2" aria-label="Heading link" rel="nofollow"></a>Thanks</h1>
<ul>
<li>For reporting the grammar did not support <code>not in</code>
<ul>
<li>Jan Stevens (<a href="https://github.com/JanStevens" rel="noopener nofollow ugc">@JanStevens</a>)</li>
</ul>
</li>
<li>For reporting the <code>credo</code> edge detection errors were due to UTF-8 charset not being set.
<ul>
<li>Malte Werschy (<a href="https://github.com/mwerschy" rel="noopener nofollow ugc">@mwerschy</a>)</li>
</ul>
</li>
<li>For pointed out that <code>GeneralCommandLine#withCharset</code> existed to set the charset to UTF-8 always.
<ul>
<li>Aleksey Kladov (<a href="https://github.com/matklad" rel="noopener nofollow ugc">@matklad</a>)</li>
</ul>
</li>
</ul>
<h1><a name="p-56890-changelog-3" class="anchor" href="#p-56890-changelog-3" aria-label="Heading link" rel="nofollow"></a>Changelog</h1>
<h2><a name="p-56890-v650-4" class="anchor" href="#p-56890-v650-4" aria-label="Heading link" rel="nofollow"></a>v6.5.0</h2>
<h3><a name="p-56890-enhancements-5" class="anchor" href="#p-56890-enhancements-5" aria-label="Heading link" rel="nofollow"></a>Enhancements</h3>
<ul>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/898" rel="noopener nofollow ugc">#898</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a>
<ul>
<li>Update Build Matrix
<ul>
<li>Only include IDEA versions within the last year.  Prior versions are supported, but not tested.  It is up to users stuck on older versions to report incompatibilities and then I’m specifically fix those bugs.
<ul>
<li>Add <code>2017.2</code></li>
<li>Drop <code>2016.1.4</code></li>
</ul>
</li>
<li>Only include Elixir versions within the last year.  Prior versions are supported, but not tested.  It is up to users stuck on older versions to report incompatibilities and then I’m specifically fix those bugs.
<ul>
<li>Add <code>1.5.2</code></li>
<li>Drop <code>1.3.4</code></li>
</ul>
</li>
<li>Only include OTP versions within the last year.  Prior versions are supported, but not tested.  It is up to users stuck on older versions to report incompatibilities and then I’m specifically fix those bugs.
<ul>
<li>Add <code>20.1</code></li>
<li>Drop <code>18.3</code></li>
</ul>
</li>
</ul>
</li>
<li>Support <code>not in</code> grammar added by elixir-lang/elixir#5620 shipped with Elixir 1.5.</li>
<li>Don’t treat numeric operands to <code>@</code> and unary operators as separate operations from non-numeric operands to port elixir-lang/elixir@9747e58db773c716c01c210642ec1d91475e0c83 that shipped with Elixir 1.5.0.  This only kicks in if the Elixir SDK is version &gt;= 1.5.0 or not set.  With an earlier SDK, you’ll get the earlier behavior.</li>
</ul>
</li>
</ul>
<h3><a name="p-56890-bug-fixes-6" class="anchor" href="#p-56890-bug-fixes-6" aria-label="Heading link" rel="nofollow"></a>Bug Fixes</h3>
<ul>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/898" rel="noopener nofollow ugc">#898</a> - Make binary infix vs unary prefix <code>+</code>/<code>-</code> handling more robust to support <code>one(two, - three)</code> used in Elixir 1.5 <code>enum.ex</code>. - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a></li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/901" rel="noopener nofollow ugc">#901</a> - Call <code>withCharSet(Charsets.UTF_8)</code> on all <code>GeneralCommandLines</code> to prevent encoding errors on Windows. - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a></li>
</ul>
<p><a href="https://github.com/KronicDeth/intellij-elixir/blob/v6.5.0/README.md#installation" rel="noopener nofollow ugc">Installation Instructions</a></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="56890" data-batch-url="/posts/batch_likers">
                        3
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/intellij-elixir-elixir-plugin-for-jetbrains-intellij-platform/1697/40">Post #39</a>
	                </div>
	            </div>
              <div id="likers-container-56890" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="56890"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #39"></div>
  </section>
</div>
    <div class="postbit" id="57081" data-post-id="57081">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="KronicDeth" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/KronicDeth/120/33300_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  KronicDeth
                      <span class="op-star" title="Thread Starter">
                        <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                      </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<h1><a name="p-57081-version-651-1" class="anchor" href="#p-57081-version-651-1" aria-label="Heading link" rel="nofollow"></a>Version 6.5.1</h1>
<p><a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&amp;business=Kronic%2eDeth%40gmail%2ecom&amp;lc=US&amp;item_name=Elixir%20plugin%20for%20IntelliJ%20IDEA&amp;currency_code=USD&amp;bn=PP%2dDonationsBF%3abtn_donate_LG%2egif%3aNonHosted" rel="noopener nofollow ugc">Donate</a></p>
<h1><a name="p-57081-thanks-2" class="anchor" href="#p-57081-thanks-2" aria-label="Heading link" rel="nofollow"></a>Thanks</h1>
<ul>
<li>For reporting that that Rider does not ship with <code>MockProjectEx</code> and my test checks probably broke the the plugin for all non-IDEA IDEs <img src="https://forum.elixirforum.com/images/emoji/apple/man_facepalming.png?v=15" title=":man_facepalming:" class="emoji" alt=":man_facepalming:" loading="lazy" width="20" height="20"> .
<ul>
<li>Raman But-Husaim (<a href="https://github.com/RamanBut-Husaim" rel="noopener nofollow ugc">@RamanBut-Husaim</a>)</li>
</ul>
</li>
</ul>
<h1><a name="p-57081-changelog-3" class="anchor" href="#p-57081-changelog-3" aria-label="Heading link" rel="nofollow"></a>Changelog</h1>
<h2><a name="p-57081-v651-4" class="anchor" href="#p-57081-v651-4" aria-label="Heading link" rel="nofollow"></a>v6.5.1</h2>
<h3><a name="p-57081-bug-fixes-5" class="anchor" href="#p-57081-bug-fixes-5" aria-label="Heading link" rel="nofollow"></a>Bug Fixes</h3>
<ul>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/904" rel="noopener nofollow ugc">#904</a> - Don’t do <code>project instanceOf MockProjectEx</code> because not all IDEs, such as Rider, ship with <code>MockProjectEx</code>; instead, do a <code>Class#getCanonicalName()</code> check. - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a></li>
</ul>
<p><a href="https://github.com/KronicDeth/intellij-elixir/blob/VERSION/README.md#installation" rel="noopener nofollow ugc">Installation Instructions</a></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="57081" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/intellij-elixir-elixir-plugin-for-jetbrains-intellij-platform/1697/41">Post #40</a>
	                </div>
	            </div>
              <div id="likers-container-57081" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="57081"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #40"></div>
  </section>
</div>
    <div class="postbit" id="60394" data-post-id="60394">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="KronicDeth" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/KronicDeth/120/33300_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  KronicDeth
                      <span class="op-star" title="Thread Starter">
                        <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                      </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<h1><a name="p-60394-version-660-1" class="anchor" href="#p-60394-version-660-1" aria-label="Heading link" rel="nofollow"></a>Version 6.6.0</h1>
<p><a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&amp;business=Kronic%2eDeth%40gmail%2ecom&amp;lc=US&amp;item_name=Elixir%20plugin%20for%20IntelliJ%20IDEA&amp;currency_code=USD&amp;bn=PP%2dDonationsBF%3abtn_donate_LG%2egif%3aNonHosted" rel="noopener nofollow ugc">Donate</a></p>
<h1><a name="p-60394-thanks-2" class="anchor" href="#p-60394-thanks-2" aria-label="Heading link" rel="nofollow"></a>Thanks</h1>
<ul>
<li>For reporting that <code>HEAD-&lt;SHA1&gt;</code> format used for <code>brew install --head elixir</code> directory was unparsable and caused a <code>null</code> <code>Version</code> and a NPE when sorting to determine the default directory.
<ul>
<li>Geek Zhang (<a href="https://github.com/geekerzp" rel="noopener nofollow ugc">@geekerzp</a>)</li>
<li><a href="https://github.com/gw4e" rel="noopener nofollow ugc">@gw4e</a></li>
</ul>
</li>
<li>For letting me know that templates are compiled to private functions in View modules.
<ul>
<li>Chris McCord (<a href="https://github.com/chrismccord" rel="noopener nofollow ugc">@chrismccord</a>)</li>
</ul>
</li>
<li>For <a href="https://intellij-support.jetbrains.com/hc/en-us/community/posts/207231009-ERB-like-template-language" rel="noopener nofollow ugc">explaining</a> how ERB is implemented in Rubymine and pointing to <a href="https://github.com/JetBrains/intellij-plugins/tree/master/handlebars" rel="noopener nofollow ugc"><code>handlebars</code></a> as an open-source implementation of a similar language.
<ul>
<li>Dennis Ushakov (<a href="https://github.com/denofevil" rel="noopener nofollow ugc">@denofevil</a>)</li>
</ul>
</li>
</ul>
<h1><a name="p-60394-changelog-3" class="anchor" href="#p-60394-changelog-3" aria-label="Heading link" rel="nofollow"></a>Changelog</h1>
<h2><a name="p-60394-v660-4" class="anchor" href="#p-60394-v660-4" aria-label="Heading link" rel="nofollow"></a>v6.6.0</h2>
<h3><a name="p-60394-enhancements-5" class="anchor" href="#p-60394-enhancements-5" aria-label="Heading link" rel="nofollow"></a>Enhancements</h3>
<ul>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/923" rel="noopener nofollow ugc">#923</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a>
<ul>
<li>EEx support
<ul>
<li>Lexer for EEx format</li>
<li>Parser for EEx format</li>
<li>EEx as a Template Language
<ul>
<li>Any file with <code>.eex</code> as the final extension will be treated as EEx.  To determine the Template Data Language, the <code>.eex</code> extension will be stripped and any remaining extension will be looked up to get the File Type and its associated Language.  For example, <code>*.txt.eex</code> will be EEx with Plain Text (<code>.txt</code>) as the Data Template Language.  Likewise, <code>*.html.eex</code> will be EEx with HTML as the Data Template Language.  There’s no need to register <code>*.txt.eex</code> or <code>*.html.eex</code> or any other <code>*.DATA_TEMPLATE_LANGUAGE_EXTENSION.eex</code> pattern explicitly: the nested extension will be looked up using the normal extension setup.</li>
</ul>
</li>
</ul>
</li>
<li>Update Build Matrix
<ul>
<li>IDEA <code>2016.2</code> is dropped because it’s over a year old.  It is still supported, but not actively tested.</li>
</ul>
</li>
</ul>
</li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/931" rel="noopener nofollow ugc">#931</a> - Decompile <code>LocT</code> chunk for private macros and functions and the derived names of anonymous functions. - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a></li>
</ul>
<h3><a name="p-60394-bug-fixes-6" class="anchor" href="#p-60394-bug-fixes-6" aria-label="Heading link" rel="nofollow"></a>Bug Fixes</h3>
<ul>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/910" rel="noopener nofollow ugc">#910</a> - <code>mix hex.local --force</code> → <code>mix local.hex --force</code> in <code>README</code> - <a href="https://github.com/bryanhuntesl-lowpriv" rel="noopener nofollow ugc">@bryanhuntesl-lowpriv</a></li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/930" rel="noopener nofollow ugc">#930</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a>
<ul>
<li>Parse <code>HEAD-&lt;SHA1&gt;</code> as <code>0.0.&lt;SHA1&gt;</code> for sorting versions from homebrew homepath.  It will almost always be last unless there is an unknown version, which uses <code>0.0.0</code>.</li>
<li>Ensure any unparsable version sorts as <code>0.0.0</code> (<code>UKNOWN_VERSION</code>).</li>
</ul>
</li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/932" rel="noopener nofollow ugc">#932</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a>
<ul>
<li>Look at parent of <code>eexTag</code> to resolve <code>fn</code> parameters</li>
<li>Ensure functions <code>fn</code> in <code>eex</code> tags don’t error by looking at <code>eex</code> element parent.</li>
<li>Search above <code>eexTag</code> and <code>eex</code> to determine if variable.</li>
</ul>
</li>
</ul>
<h1><a name="p-60394-readme-updates-7" class="anchor" href="#p-60394-readme-updates-7" aria-label="Heading link" rel="nofollow"></a>README updates</h1>
<h3><a name="p-60394-embedded-elixir-eex-templates-8" class="anchor" href="#p-60394-embedded-elixir-eex-templates-8" aria-label="Heading link" rel="nofollow"></a>Embedded Elixir (EEx) Templates</h3>
<p>Any file with <code>.eex</code> as the final extension will be treated as Embedded Elixir (<a href="https://hexdocs.pm/eex" rel="noopener nofollow ugc">EEx</a>) templates.  To determine the Template Data Language, the <code>.eex</code> extension will be stripped and any remaining extension will be looked up to get the File Type and its associated Language. For example, <code>*.txt.eex</code> will be EEx with Plain Text (<code>.txt</code>) as the Data Template Language. Likewise, <code>*.html.eex</code> will be EEx with HTML as the Data Template Language. There’s no need to register <code>*.txt.eex</code> or <code>*.html.eex</code> or any other <code>*.DATA_TEMPLATE_LANGUAGE_EXTENSION.eex</code> pattern explicitly: the nested extension will be looked up using the normal extension setup.</p>
<p><img src="/screenshots/features/eex_templates/Form%20Template.png?raw=true" alt="Form Template" title="`lib/*_web/templates/user/form.html.eex` from `mix phx.gen.html Accounts User users name:string age:integer`" width="" height=""></p>
<p><img src="/screenshots/features/eex_templates/Parameter%20Usage%20in%20Form%20Template.png?raw=true" alt="Parameter Usage in Form Template" title="`f` parameter to `fn` passed to `form_for` is highlighted in pink, the parameter highlight color" width="" height=""></p>
<h4><a name="p-60394-advanced-configuration-9" class="anchor" href="#p-60394-advanced-configuration-9" aria-label="Heading link" rel="nofollow"></a>Advanced configuration</h4>
<p>If you need more file-by-file configuration of the Template Data Language than can be achieved with a file extension/pattern, IntelliJ IDEA (Community or Ultimate Edition) has support for setting the Template Data Language on a specific path.</p>
<ol>
<li>Preferences &gt; Languages and Frameworks &gt; Template Data Languages</li>
</ol>
<h4><a name="p-60394-call-definition-macros-10" class="anchor" href="#p-60394-call-definition-macros-10" aria-label="Heading link" rel="nofollow"></a>Call definition macros</h4>
<p>It turns out that in the <code>.beam</code> binary format there are no macros.  This makes sense since the BEAM format was made for Erlang, which does not have macros, and only has functions.  Elixir marks its macros in the compiled <code>.beam</code> by prefixing them with <code>MACRO-</code>.</p>
<p>There are 2 chunks in the BEAM format for function references: <code>ExpT</code>, which is for exports (because in Erlang module they are from <code>-export</code>), which are the public functions and macros; and <code>LocT</code>, which is for locals (anything not exported in Erlang), which are private functions and macros.</p>
<div class="md-table">
<table>
<thead>
<tr>
<th>BEAM Chunk</th>
<th>Atom Prefix</th>
<th>Macro</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>ExpT</code></td>
<td><code>MACRO-</code></td>
<td><code>defmacro</code></td>
</tr>
<tr>
<td><code>ExpT</code></td>
<td>N/A</td>
<td><code>def</code></td>
</tr>
<tr>
<td><code>LocT</code></td>
<td><code>MACRO-</code></td>
<td><code>defmacrop</code></td>
</tr>
<tr>
<td><code>LocT</code></td>
<td>N/A</td>
<td><code>defp</code></td>
</tr>
</tbody>
</table>
</div><h5><a name="p-60394-defp-with-in-name-11" class="anchor" href="#p-60394-defp-with-in-name-11" aria-label="Heading link" rel="nofollow"></a><code>defp</code> with <code>/</code> in name</h5>
<p>Much like there are no macros in BEAM, there are no anonymous functions either.  Any anonymous function (using <code>fn</code> in Elixir or <code>fun</code> in Erlang) ends up being a named function in the <code>LocT</code> chunk.  Anonymous functions names start with <code>-</code>, then the parent function’s name, a <code>/</code> and a unique number for that scope.</p>
<p>As an example, <code>Kernel</code> has</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">defp unquote(:"-MACRO-binding/2-fun-0-")(p0, p1, p2, p3) do
  # body not decompiled
end
</code></pre>
<p>which is generated from the <code>for</code> in</p>
<pre data-code-wrap="elixir"><code class="lang-elixir"> defmacro binding(context \\ nil) do
    in_match? = Macro.Env.in_match?(__CALLER__)
    for {v, c} &lt;- __CALLER__.vars, c == context do
      {v, wrap_binding(in_match?, {v, [generated: true], c})}
    end
  end
</code></pre>
<blockquote>
<p>– <a href="https://github.com/elixir-lang/elixir/blob/v1.5.2/lib/elixir/lib/kernel.ex#L2560-L2565" rel="noopener nofollow ugc">Kernel.binding/1</a></p>
</blockquote>
<p>[Removal of EEx work-around]</p>
<p><a href="https://github.com/KronicDeth/intellij-elixir/blob/v6.6.0/README.md#installation" rel="noopener nofollow ugc">Installation Instructions</a></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="60394" data-batch-url="/posts/batch_likers">
                        3
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/intellij-elixir-elixir-plugin-for-jetbrains-intellij-platform/1697/42">Post #41</a>
	                </div>
	            </div>
              <div id="likers-container-60394" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="60394"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #41"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <a class="load-more-button" data-turbo-stream="true" href="/topics/1697/load_more?page=5">Load more posts</a>
</div></template></turbo-stream>