<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="60704" data-post-id="60704">
  <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-60704-v670-1" class="anchor" href="#p-60704-v670-1" aria-label="Heading link" rel="nofollow"></a>v6.7.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-60704-thanks-2" class="anchor" href="#p-60704-thanks-2" aria-label="Heading link" rel="nofollow"></a>Thanks</h1>
<ul>
<li>For reporting performance issues with nesting anonymous functions
<ul>
<li>Michiel Karnebeek (<a href="https://github.com/mkarnebeek" rel="noopener nofollow ugc">@mkarnebeek</a>)</li>
</ul>
</li>
<li>For helping with parser change ideas
<ul>
<li>Robert Ekendahl (<a href="https://github.com/rekendahl" rel="noopener nofollow ugc">@rekendahl</a>)</li>
<li>Patrick Scheibe (<a href="https://github.com/halirutan" rel="noopener nofollow ugc">@halirutan</a>)</li>
</ul>
</li>
<li>For reporting general performance issues
<ul>
<li>Nikolai Shikov (<a href="https://github.com/nikshik" rel="noopener nofollow ugc">@nikshik</a>)</li>
<li>Alexey Mihaylov (<a href="https://github.com/take-five" rel="noopener nofollow ugc">@take-five</a>)</li>
<li><a href="https://github.com/andshape" rel="noopener nofollow ugc">@andshape</a></li>
</ul>
</li>
</ul>
<h1><a name="p-60704-changelog-3" class="anchor" href="#p-60704-changelog-3" aria-label="Heading link" rel="nofollow"></a>Changelog</h1>
<h2><a name="p-60704-v670-4" class="anchor" href="#p-60704-v670-4" aria-label="Heading link" rel="nofollow"></a>v6.7.0</h2>
<h3><a name="p-60704-enhancements-5" class="anchor" href="#p-60704-enhancements-5" aria-label="Heading link" rel="nofollow"></a>Enhancements</h3>
<ul>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/943" rel="noopener nofollow ugc">#943</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a>
<ul>
<li>Regression test for <span class="hashtag-raw">#580</span></li>
<li><code>{EOL}|.</code> → <code>{ANY}</code> in <code>Elixir.flex</code></li>
<li>Convert (some) unimportant newlines from <code>EOL</code> to <code>WHITE_SPACE</code> token, as GrammarKit is smarter about reparsing when only <code>WHITE_SPACE</code> changes in size.
<ul>
<li>After
<ul>
<li><code>fn</code></li>
<li><code>do</code></li>
<li><code>-&gt;</code></li>
<li>block identifier (<code>after</code>, <code>catch</code>, <code>else</code>, and <code>rescue</code>)</li>
<li>keyword pair colon</li>
<li><code>(</code></li>
</ul>
</li>
<li>Before
<ul>
<li>Comments</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3><a name="p-60704-bug-fixes-6" class="anchor" href="#p-60704-bug-fixes-6" aria-label="Heading link" rel="nofollow"></a>Bug Fixes</h3>
<ul>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/943" rel="noopener nofollow ugc">#943</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a>
<ul>
<li>
<p>Remove <code>!stabOperationPrefix</code> before <code>expression</code>, since <code>stabOperationPrefix</code> itself starts with <code>expression</code> and instead put a negative look-ahead, <code>!(infixComma | stabInfixOperator)</code> after <code>expression</code>.  This now works when it previously didn’t because <code>COMMA</code> was added to <code>expressionRecoverUntil</code>, which means both <code>COMMA</code> and <code>STAB_OPERATOR</code> are now in both not eaten by <code>expression</code>’s error recovery.</p>
<p>This drops Fn1 through Fn8 to ~176ms instead of the previous time of the last optimization of 13 seconds for Fn8.  It started at 26 seconds and now it appears that the time no longer grows with the number of <code>fn</code>.  It also eliminates the pause when hitting entering inside the <code>fn</code> nesting.</p>
<p><a href="https://docs.google.com/spreadsheets/d/1mASN4BB3IAd5ZLQR5dz0Tzx2Yl-w4g5VUjz3bgd5kD4/edit?usp=sharing" rel="noopener nofollow ugc">Data and Chart</a></p>
</li>
</ul>
</li>
</ul>
<p><a href="https://github.com/KronicDeth/intellij-elixir/blob/v6.7.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="60704" data-batch-url="/posts/batch_likers">
                        2
                      </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/43">Post #42</a>
	                </div>
	            </div>
              <div id="likers-container-60704" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="60704"
                     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 #42"></div>
  </section>
</div>
    <div class="postbit" id="62236" data-post-id="62236">
  <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-62236-version-700-1" class="anchor" href="#p-62236-version-700-1" aria-label="Heading link" rel="nofollow"></a>Version 7.0.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-62236-thanks-2" class="anchor" href="#p-62236-thanks-2" aria-label="Heading link" rel="nofollow"></a>Thanks</h1>
<ul>
<li>For reporting that <code>mix credo</code> spiking the CPU can make IntelliJ appear sluggish while its using <code>mix credo</code> for annotations.
<ul>
<li><a href="https://github.com/dKrishtal" rel="noopener nofollow ugc">@dKrishtal</a></li>
</ul>
</li>
<li>For explaining how to properly switch invalidate the parsed files when the Elixir level changes when the SDK changes
<ul>
<li>Dennis Ushakov (<a href="https://github.com/denofevil" rel="noopener nofollow ugc">@denofevil</a>)</li>
</ul>
</li>
</ul>
<h1><a name="p-62236-changelog-3" class="anchor" href="#p-62236-changelog-3" aria-label="Heading link" rel="nofollow"></a>Changelog</h1>
<h2><a name="p-62236-v700-4" class="anchor" href="#p-62236-v700-4" aria-label="Heading link" rel="nofollow"></a>v7.0.0</h2>
<h3><a name="p-62236-enhancements-5" class="anchor" href="#p-62236-enhancements-5" aria-label="Heading link" rel="nofollow"></a>Enhancements</h3>
<ul>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/944" rel="noopener nofollow ugc">#944</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a>
<ul>
<li>Eliminate the majority of the <code>eolStar</code> parser rules around operators where they do not matter leaving only the <code>eolStar</code> after <code>COMMA</code> and the the ones that help differentiate unary and binary <code>+</code>/<code>-</code>.  This simplifies the parser and under certain conditions should prevent reparsing when only <code>WHITE_SPACE</code> changes in size.
<ul>
<li>Look-ahead in the lexer, where it’s cheaper than the parser to see if the next token does not care if there’s an <code>EOL</code> or normal <code>WHITE_SPACE</code>.</li>
<li>After operators that don’t care if they are followed by <code>EOL</code>, try to match all following <code>WHITE_SPACE</code>, <code>ESCAPED_EOL</code> and <code>EOL</code>.</li>
</ul>
</li>
</ul>
</li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/950" rel="noopener nofollow ugc">#950</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a>
<ul>
<li>
<p>If you want to limit the performance impact of the credo annotator because <code>mix credo</code> spikes your CPU, you can limit the number of <code>mix credo</code> runs to 1 per open file by disabling the Explanation tooltip</p>
<ol>
<li>Preferences &gt; Editor &gt; Inspections &gt; Credo</li>
<li>Uncheck “Include Explanation”</li>
</ol>
<p>If you don’t want the annotator to run at all on open editors, then you can disable the paired<br>
inspection</p>
<ol>
<li>Preferences &gt; Editor &gt; Inspections</li>
<li>Uncheck Elixir &gt; Credo</li>
</ol>
<p>If you’ve unchecked the inspection, it disables both the annotation and the pair inspection when Analyze &gt; Inspect Code… is run.  You can still run the Credo inspection by name.</p>
<ol>
<li>Analyze &gt; Run Inspection By Name… (⌥⇧⌘I)</li>
<li>Type “Credo”</li>
<li>Select “Credo” from the shortened list</li>
<li>Hit Enter.</li>
</ol>
<p>You’ll be presented with a “Run ‘Credo’” dialog</p>
<ol>
<li>Change the “Inspection scope” from “Whole project”, which would include the <code>deps</code> to “Custom scope”</li>
<li>Select “Project Production Files” from the “Custom scope” dropdown</li>
<li>Click “OK”</li>
</ol>
</li>
</ul>
</li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/951" rel="noopener nofollow ugc">#951</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a>
<ul>
<li>Setup <code>VirtualFilePointerManager</code> during <code>ParsingTestCase</code></li>
<li>Put <code>LineMarkerInfo</code> on leaf elements for Method (Call Definition) Separators for a performance improvement.</li>
<li>Add IntelliJ IDEA 2017.3 to the build matrix</li>
</ul>
</li>
</ul>
<h3><a name="p-62236-bug-fixes-6" class="anchor" href="#p-62236-bug-fixes-6" aria-label="Heading link" rel="nofollow"></a>Bug Fixes</h3>
<ul>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/947" rel="noopener nofollow ugc">#947</a> - When the SDK changes, record what <code>Release</code> of Elixir is used indirectly, using a <code>Level</code> <code>enum</code> that only cares about the major and minor version. Changing the <code>Level</code>, will mark the open files and .beam files as invalidated, so that if the SDK is changed, the stubs and code <code>Level</code> will agree, so there isn’t a stub incompatibility with the PSI. - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a></li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/950" rel="noopener nofollow ugc">#950</a> - Allow credo section to be empty when processing credo explanations - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a></li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/951" rel="noopener nofollow ugc">#951</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a>
<ul>
<li>Prevent negative indent, not supported in 2017.3</li>
<li>Cleanup SDKs from MixProjectImportBuilderTest</li>
</ul>
</li>
</ul>
<h2><a name="p-62236-incompatible-changes-7" class="anchor" href="#p-62236-incompatible-changes-7" aria-label="Heading link" rel="nofollow"></a>Incompatible Changes</h2>
<ul>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/951" rel="noopener nofollow ugc">#951</a> - Drop support for IntelliJ IDEA before 2016.3 - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a></li>
</ul>
<h1><a name="p-62236-readme-updates-8" class="anchor" href="#p-62236-readme-updates-8" aria-label="Heading link" rel="nofollow"></a>README Updates</h1>
<h3><a name="p-62236-credo-9" class="anchor" href="#p-62236-credo-9" aria-label="Heading link" rel="nofollow"></a>Credo</h3>
<h4><a name="p-62236-annotator-10" class="anchor" href="#p-62236-annotator-10" aria-label="Heading link" rel="nofollow"></a>Annotator</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></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/5/5b865f38ba24c9dcd4e5c314c304b3bbe0d298a5.png" data-download-href="https://forum.elixirforum.com/uploads/default/5b865f38ba24c9dcd4e5c314c304b3bbe0d298a5" title="" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/optimized/2X/5/5b865f38ba24c9dcd4e5c314c304b3bbe0d298a5_2_690x196.png" alt="" role="presentation" width="690" height="196" srcset="https://forum.elixirforum.com/uploads/default/optimized/2X/5/5b865f38ba24c9dcd4e5c314c304b3bbe0d298a5_2_690x196.png, https://forum.elixirforum.com/uploads/default/original/2X/5/5b865f38ba24c9dcd4e5c314c304b3bbe0d298a5.png 1.5x, https://forum.elixirforum.com/uploads/default/original/2X/5/5b865f38ba24c9dcd4e5c314c304b3bbe0d298a5.png 2x" data-dominant-color="32322F"><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">794×226 20.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>
<p>Individual check failures will show the explanation (from <code>mix credo PATH:LINE(:COLUMN)</code>) if you hover over the annotation</p>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/f/fd9343e52081ac775dbb84df13400321ac747af1.png" data-download-href="https://forum.elixirforum.com/uploads/default/fd9343e52081ac775dbb84df13400321ac747af1" title="" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/2X/f/fd9343e52081ac775dbb84df13400321ac747af1.png" alt="" role="presentation" width="578" height="791"><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">578×791 39.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>
<p>You can hover over the explanation and click the embedded links to jump to the line (and column) where the failure occurred.</p>
<h4><a name="p-62236-inspection-11" class="anchor" href="#p-62236-inspection-11" aria-label="Heading link" rel="nofollow"></a>Inspection</h4>
<h5><a name="p-62236-batch-mode-12" class="anchor" href="#p-62236-batch-mode-12" aria-label="Heading link" rel="nofollow"></a>Batch Mode</h5>
<p>If you’d like to run the <code>mix credo</code> external annotator when it is disabled, you can run it using the inspection name.</p>
<ol>
<li>Analyze &gt; Run Inspection By Name… (⌥⇧⌘I)</li>
<li>Type “Credo”</li>
<li>Select “Credo” from the shortened list</li>
<li>Hit Enter.</li>
</ol>
<p>You’ll be presented with a “Run ‘Credo’” dialog</p>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/b/b7acdb1cb7463481d246dd7ded8291a40e2d0a5a.png" data-download-href="https://forum.elixirforum.com/uploads/default/b7acdb1cb7463481d246dd7ded8291a40e2d0a5a" title="Run 'Credo'" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/2X/b/b7acdb1cb7463481d246dd7ded8291a40e2d0a5a.png" alt="Run 'Credo'" width="522" height="285"><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">Run 'Credo'</span><span class="informations">522×285 15.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>
<ol>
<li>Change the “Inspection scope” from “Whole project”, which would include the <code>deps</code> to “Custom scope”</li>
<li>Select “Project Production Files” from the “Custom scope” dropdown</li>
<li>Click “OK”</li>
</ol>
<p>The Inspections Result Tool Pane will open and show results as each file is processed.</p>
<ol>
<li>
<p>Click the <img src="https://forum.elixirforum.com/images/emoji/apple/play_button.png?v=15" title=":play_button:" class="emoji" alt=":play_button:" loading="lazy" width="20" height="20"> to expand the Credo section to show all warnings</p>
<p><img src="https://forum.elixirforum.com/uploads/default/original/2X/9/9e5f17aae1ab379d1b581ad1227b75d85bbdbc29.png" alt="Individual Entry" width="633" height="59"></p>
</li>
<li>
<p>Click an entry for the details of an individual warning with a code highlighting.</p>
<p><img src="https://forum.elixirforum.com/uploads/default/original/2X/9/915d07cdfe96ba394a8c57cb2494d3877b6adcb1.png" alt="Code Highlighting" width="287" height="98"></p>
<p>The view will show the parts of the file that aren’t annotated as collapsed with the discontinuous line number indicating the jumps.</p>
<p>If you click on + collapse markers, you can expand the collapsed sections to see the full context</p>
<p><img src="https://raw.githubusercontent.com/KronicDeth/intellij-elixir/v7.0.0/screenshots/features/inspection/credo/batch_mode/Expansion.png" alt="Expansion" width="" height=""></p>
<p>Or you can hover over the collapsed section to see a tooltip preview of the expansion</p>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/9/962561f8cec1a506220264ec0d8749415d65b6d5.png" data-download-href="https://forum.elixirforum.com/uploads/default/962561f8cec1a506220264ec0d8749415d65b6d5" title="Expansion Preview" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/2X/9/962561f8cec1a506220264ec0d8749415d65b6d5.png" alt="Expansion Preview" width="598" height="181"><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">Expansion Preview</span><span class="informations">598×181 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>
<h4><a name="p-62236-configuration-13" class="anchor" href="#p-62236-configuration-13" aria-label="Heading link" rel="nofollow"></a>Configuration</h4>
<table>
  <thead>
    <tr>
      <th>
        Preferences &gt; Editor &gt; Inspections
      </th>
      <th>
        Preferences &gt; Editor &gt; Inspections &gt; Credo
      </th>
      <th colspan="5">
        Editor
      </th>
      <th colspan="5">
        Inspections
      </th>
    </tr>
    <tr>
      <th rowspan="2">
        Elixir &gt; Credo
      </th>
      <th rowspan="2">
        Include Explanation
      </th>
      <th rowspan="2">
        Highlight
      </th>
      <th rowspan="2">
        Message
      </th>
      <th rowspan="2">
        Explanation in tooltip
      </th>
      <th colspan="2">
        <code>mix credo</code> Runs
      </th>
      <th rowspan="2">
        Highlight
      </th>
      <th rowspan="2">
        Message
      </th>
      <th>
        <code>mix credo</code> Runs
      </th>
      <th colspan="2">
        Action
      </th>
    </tr>
    <tr>
      <th>
        Per File
      </th>
      <th>
        Per Issue
      </th>
      <th>
        Working Directory
      </th>
      <th>
        Inspect Code
      </th>
      <th>
        Run Inspection By Name
      </th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>
        ☑
      </td>
      <td>
        ☑
      </td>
      <td>
        Yes
      </td>
      <td>
        Yes
      </td>
      <td>
        Yes
      </td>
      <td>
        1
      </td>
      <td>
        1
      </td>
      <td>
        Yes
      </td>
      <td>
        Yes
      </td>
      <td>
        1
      </td>
      <td>
        Yes
      </td>
      <td>
        Yes
      </td>
    </tr>
    <tr>
      <td>
        ☑
      </td>
      <td>
        ☐
      </td>
      <td>
        Yes
      </td>
      <td>
        Yes
      </td>
      <td>
        No
      </td>
      <td>
        1
      </td>
      <td>
        0
      </td>
      <td>
        Yes
      </td>
      <td>
        Yes
      </td>
      <td>
        1
      </td>
      <td>
        Yes
      </td>
      <td>
        Yes
      </td>
    </tr>
    <tr>
      <td>
        ☐
      </td>
      <td>
        ⁿ/ₐ
      </td>
      <td>
        No
      </td>
      <td>
        No
      </td>
      <td>
        No
      </td>
      <td>
        0
      </td>
      <td>
        0
      </td>
      <td>
        Yes
      </td>
      <td>
        Yes
      </td>
      <td>
        1
      </td>
      <td>
        No
      </td>
      <td>
        Yes
      </td>
    </tr>
  </tbody>
</table>
<p>If you want to limit the performance impact of the credo annotator because <code>mix credo</code> spikes your CPU, you can limit the number of <code>mix credo</code> runs to 1 per open file by disabling the Explanation tooltip</p>
<ol>
<li>Preferences &gt; Editor &gt; Inspections &gt; Credo</li>
<li>Uncheck “Include Explanation”</li>
</ol>
<p>If you don’t want the annotator to run at all on open editors, then you can disable the paired inspection</p>
<ol>
<li>Preferences &gt; Editor &gt; Inspections</li>
<li>Uncheck Elixir &gt; Credo</li>
</ol>
<p>Once the annotator is disabled, you can still run the inspection in <a href="#batch-mode" rel="nofollow">batch mode</a></p>
<p><a href="https://github.com/KronicDeth/intellij-elixir/blob/v7.0.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="62236" 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/44">Post #43</a>
	                </div>
	            </div>
              <div id="likers-container-62236" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="62236"
                     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 #43"></div>
  </section>
</div>
    <div class="postbit" id="63635" data-post-id="63635">
  <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-63635-version-710-1" class="anchor" href="#p-63635-version-710-1" aria-label="Heading link" rel="nofollow"></a>Version 7.1.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-63635-changelog-2" class="anchor" href="#p-63635-changelog-2" aria-label="Heading link" rel="nofollow"></a>Changelog</h1>
<h2><a name="p-63635-v710-3" class="anchor" href="#p-63635-v710-3" aria-label="Heading link" rel="nofollow"></a>v7.1.0</h2>
<h3><a name="p-63635-enhancements-4" class="anchor" href="#p-63635-enhancements-4" aria-label="Heading link" rel="nofollow"></a>Enhancements</h3>
<ul>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/955" rel="noopener nofollow ugc">#955</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a>
<ul>
<li>Start using Kotlin for new development.</li>
<li>Elixir Facet in Small IDEs
<ul>
<li>Preferences &gt; Languages &amp; Frameworks &gt; Elixir can set the Elixir Facet SDK for the Project Module used in Small IDEs as a per-project settings.</li>
<li>Preferences &gt; Languages &amp; Frameworks &gt; Elixir&gt; SDKs can add, delete, and configure Elixir SDKs as per-application settings.</li>
<li>Preferences &gt; Languages * Frameworks &gt; Elixir &gt; Internal SDKs can add, delete, and configure Erlang SDK for Elixir SDKs as per-application settings.</li>
</ul>
</li>
<li>Configure SDK before running <code>mix</code> when importing mix projects, so that the <code>mix</code> path does not need to be configured separately from the SDK path.
<ul>
<li>The <code>mix</code> path no longer needs to be setup independently from the Elixir SDK.</li>
</ul>
</li>
</ul>
</li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/957" rel="noopener nofollow ugc">#957</a> - Add Local shared <code>credo</code> inspection, so the the <code>credo</code> inspection works for Code &gt; Code Cleanup. - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a></li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/958" rel="noopener nofollow ugc">#958</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a>
<ul>
<li>
<p>Show Mix ExUnit in context menu in Elixir Facets, so that</p>
<ul>
<li>Run ‘Mix ExUnit …’</li>
<li>Debug ‘Mix ExUnit …’</li>
<li>"Create “Mix ExUnit …'”</li>
</ul>
<p>appear in Rubymine when you right-click the <code>test</code> directory and it is Marked as a Test Sources Root.  It will appear green in Rubymine if already marked.  To mark it, do the following:</p>
<ol>
<li>Right-Click <code>test</code> directory</li>
<li>Select “Mark Directory as &gt; Test Sources Root”</li>
</ol>
</li>
</ul>
</li>
</ul>
<h3><a name="p-63635-bug-fixes-5" class="anchor" href="#p-63635-bug-fixes-5" aria-label="Heading link" rel="nofollow"></a>Bug Fixes</h3>
<ul>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/955" rel="noopener nofollow ugc">#955</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a>
<ul>
<li>Protect access to <code>JavadocOrderRootType.getInstance()</code> so that it doesn’t cause an error in Small IDEs where its Extension Point is not defined.</li>
<li>If the explanation tooltip is empty, fallback to the message for the credo annotator instead.</li>
</ul>
</li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/956" rel="noopener nofollow ugc">#956</a> - Check if <code>SdkAdditionalData</code> is <code>null</code> before getting <code>ErlangSDK</code> as it can be <code>null</code> in certain scenarios in Rubymine. - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a></li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/958" rel="noopener nofollow ugc">#958</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a><br>
Fix <code>isConfigurationFromContext</code>, so that it works on Mix ExUnit Run Configurations generated from directories.  Check if the <code>programParameters</code> and <code>workingDirectory</code> match by just<br>
generating another configuration from the context as this ensures the logic matches and includes support for <code>PsiDirectory</code>.</li>
</ul>
<h1><a name="p-63635-readme-updates-6" class="anchor" href="#p-63635-readme-updates-6" aria-label="Heading link" rel="nofollow"></a>README Updates</h1>
<h4><a name="p-63635-from-existing-sources-7" class="anchor" href="#p-63635-from-existing-sources-7" aria-label="Heading link" rel="nofollow"></a>From Existing Sources</h4>
<h5><a name="p-63635-import-project-from-external-model-8" class="anchor" href="#p-63635-import-project-from-external-model-8" 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>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>
<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</li>
</ol>
<ul>
<li>If “Fetch dependencies with mix” is checked both <code>mix local.hex --force</code> and <code>mix deps.get</code> will be run.</li>
</ul>
<ol start="12">
<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 Finish</li>
</ol>
<h3><a name="p-63635-sdk-9" class="anchor" href="#p-63635-sdk-9" 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>
<h4><a name="p-63635-rich-ides-10" class="anchor" href="#p-63635-rich-ides-10" aria-label="Heading link" rel="nofollow"></a>Rich IDEs</h4>
<p>Rich IDEs can use the Project Structure system to configure Elixir and Erlang SDKs and select the Project/Module SDK.</p>
<p>…</p>
<h4><a name="p-63635-small-ides-11" class="anchor" href="#p-63635-small-ides-11" aria-label="Heading link" rel="nofollow"></a>Small IDEs</h4>
<p>Because Small IDEs like Rubymine do not have Project Structure, the Elixir SDK, Erlang SDK, and selected SDK must be configured in Preferences.</p>
<h5><a name="p-63635-elixir-facet-sdk-12" class="anchor" href="#p-63635-elixir-facet-sdk-12" aria-label="Heading link" rel="nofollow"></a>Elixir Facet SDK</h5>
<p>Facets are a feature of JetBrains OpenAPI that allow additional languages and frameworks to be added to a Module.  In Small IDEs, each Project has only one Module and its SDK <strong>MUST</strong> match the Small IDE’s language, such as a Ruby SDK in Rubymine, so to allow an Elixir SDK to be selected, an Elixir Facet is added to the Module in Small IDEs.</p>
<p>To configure the Elixir Facet SDK</p>
<ol>
<li>Open Preferences &gt; Languages &amp; Frameworks &gt; Elixir</li>
<li>Select a previously created Elixir SDK from the SDK combo box.</li>
</ol>
<ul>
<li>If there is no Elixir SDK, you can <a href="#elixir-sdks" rel="nofollow">create one</a> first.</li>
</ul>
<ol start="3">
<li>Click Apply to save the Preferences changes or OK to save and close.</li>
</ol>
<h5><a name="p-63635-elixir-sdks-13" class="anchor" href="#p-63635-elixir-sdks-13" aria-label="Heading link" rel="nofollow"></a>Elixir SDKs</h5>
<p>In Small IDEs, Elixir SDKs are tracked as Application Preferences, so any Elixir SDK you create in one project will be usable in another and you won’t have to create the SDK in each project, just <a href="#elixir-facet-sdk" rel="nofollow">select it</a>.</p>
<ol>
<li>
<p>Open Preferences &gt; Languages &amp; Frameworks &gt; Elixir &gt; SDKs</p>
</li>
<li>
<p>Click <code>+</code> to add a new Elixir SDK</p>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/c/c6d17467fcb9ae8f72de111e783e5e9b2732190e.png" data-download-href="https://forum.elixirforum.com/uploads/default/c6d17467fcb9ae8f72de111e783e5e9b2732190e" title="" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/optimized/2X/c/c6d17467fcb9ae8f72de111e783e5e9b2732190e_2_690x587.png" alt="" role="presentation" width="690" height="587" srcset="https://forum.elixirforum.com/uploads/default/optimized/2X/c/c6d17467fcb9ae8f72de111e783e5e9b2732190e_2_690x587.png, https://forum.elixirforum.com/uploads/default/original/2X/c/c6d17467fcb9ae8f72de111e783e5e9b2732190e.png 1.5x, https://forum.elixirforum.com/uploads/default/original/2X/c/c6d17467fcb9ae8f72de111e783e5e9b2732190e.png 2x" data-dominant-color="41454A"><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">794×676 22 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>If you don’t already have an Erlang SDK for Elixir SDK setup, you’ll need to create one first.</p>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/4/4468959a26f73075e1f7b071f17e8124a0034d1d.png" data-download-href="https://forum.elixirforum.com/uploads/default/4468959a26f73075e1f7b071f17e8124a0034d1d" title="" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/2X/4/4468959a26f73075e1f7b071f17e8124a0034d1d.png" alt="" role="presentation" width="401" height="149"><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">401×149 9.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><p></p>
</li>
<li>
<p>You’ll be prompted with the default path for the most recent version of Erlang installed.</p>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/1/1c1ce7e42224a3f790f9cc31b63731c22ab51fb8.png" data-download-href="https://forum.elixirforum.com/uploads/default/1c1ce7e42224a3f790f9cc31b63731c22ab51fb8" title="" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/2X/1/1c1ce7e42224a3f790f9cc31b63731c22ab51fb8.png" alt="" role="presentation" width="422" height="479"><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">422×479 22.2 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 can change directory to a select a different version.  The home directory for “Erlang SDK for Elixir SDK” for Homebrew is <strong>NOT</strong> <code>/usr/local/Cellar/erlang/VERSION</code>, but <code>/usr/local/Cellar/erlang/VERSION/lib/erlang</code> due to where the OTP app <code>ebin</code> directories are located.</p>
</li>
<li>
<p>Click OK to create the Erlang SDK for Elixir SDK.</p>
</li>
<li>
<p>With at least one Erlang SDK for Elixir SDK setup, you’ll be prompted with the default path for the most recent version of Elixir installed.</p>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/5/5c0630027bce0bcf3d57b8d1fb685b39328eb22e.png" data-download-href="https://forum.elixirforum.com/uploads/default/5c0630027bce0bcf3d57b8d1fb685b39328eb22e" title="" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/2X/5/5c0630027bce0bcf3d57b8d1fb685b39328eb22e.png" alt="" role="presentation" width="428" height="482"><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">428×482 22.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>Click OK to create the Elixir SDK.</p>
</li>
<li>
<p>Click Apply to save the Preferences changes or OK to save and close.</p>
</li>
</ol>
<p>You can further customize the Elixir SDK by selecting its name from the left list.</p>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/c/c57c1e2a9b1bb48786ca3a73f7e9df28aaf388d9.png" data-download-href="https://forum.elixirforum.com/uploads/default/c57c1e2a9b1bb48786ca3a73f7e9df28aaf388d9" title="" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/optimized/2X/c/c57c1e2a9b1bb48786ca3a73f7e9df28aaf388d9_2_690x308.png" alt="" role="presentation" width="690" height="308" srcset="https://forum.elixirforum.com/uploads/default/optimized/2X/c/c57c1e2a9b1bb48786ca3a73f7e9df28aaf388d9_2_690x308.png, https://forum.elixirforum.com/uploads/default/original/2X/c/c57c1e2a9b1bb48786ca3a73f7e9df28aaf388d9.png 1.5x, https://forum.elixirforum.com/uploads/default/original/2X/c/c57c1e2a9b1bb48786ca3a73f7e9df28aaf388d9.png 2x" data-dominant-color="4B4F54"><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">896×401 59.8 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>
<ul>
<li>Change Home Path</li>
<li>Change Internal Erlang SDK</li>
<li>Change <code>ebin</code> directories on the Classpath tab</li>
</ul>
<h5><a name="p-63635-internal-erlang-sdk-14" class="anchor" href="#p-63635-internal-erlang-sdk-14" aria-label="Heading link" rel="nofollow"></a>Internal Erlang SDK</h5>
<p>If you want to change the Internal Erlang SDK, you’ll need to create a new Erlang SDK for Elixir SDK.</p>
<ol>
<li>
<p>Open Preferences &gt; Languages &amp; Frameworks &gt; Elixir &gt; Internal SDKs</p>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/f/fd5c3a5fefae48a5bdda8f6ab072086ef3be00ea.png" data-download-href="https://forum.elixirforum.com/uploads/default/fd5c3a5fefae48a5bdda8f6ab072086ef3be00ea" title="" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/optimized/2X/f/fd5c3a5fefae48a5bdda8f6ab072086ef3be00ea_2_690x296.png" alt="" role="presentation" width="690" height="296" srcset="https://forum.elixirforum.com/uploads/default/optimized/2X/f/fd5c3a5fefae48a5bdda8f6ab072086ef3be00ea_2_690x296.png, https://forum.elixirforum.com/uploads/default/original/2X/f/fd5c3a5fefae48a5bdda8f6ab072086ef3be00ea.png 1.5x, https://forum.elixirforum.com/uploads/default/original/2X/f/fd5c3a5fefae48a5bdda8f6ab072086ef3be00ea.png 2x" data-dominant-color="4B4F54"><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">990×425 70 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>Follow the same steps as above to create an SDK</p>
</li>
</ol>
<p><a href="https://github.com/KronicDeth/intellij-elixir/blob/v7.1.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="63635" data-batch-url="/posts/batch_likers">
                        2
                      </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/45">Post #44</a>
	                </div>
	            </div>
              <div id="likers-container-63635" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="63635"
                     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 #44"></div>
  </section>
</div>
    <div class="postbit" id="63772" data-post-id="63772">
  <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-63772-version-720-1" class="anchor" href="#p-63772-version-720-1" aria-label="Heading link" rel="nofollow"></a>Version 7.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-63772-thanks-2" class="anchor" href="#p-63772-thanks-2" aria-label="Heading link" rel="nofollow"></a>Thanks</h1>
<ul>
<li>For reporting that <code>OrderRootType.getOrderRootType</code> now has a <code>@NotNull</code> annotation, which causes newer Small IDE releases to  break when trying to access <code>JavaDocRootType.getInstance()</code>.
<ul>
<li>Vladimir Guguiev (<a href="https://github.com/wzrdzl" rel="noopener nofollow ugc">@wzrdzl</a>)</li>
<li>Nitin Gupta (<a href="https://github.com/nitingupta910" rel="noopener nofollow ugc">@nitingupta910</a>)</li>
</ul>
</li>
<li>For reporting “invokeAndWait from read-action leads to possible deadlock” warning
<ul>
<li>Josh Taylor (<a href="https://github.com/joshuataylor" rel="noopener nofollow ugc">@joshuataylor</a>)</li>
</ul>
</li>
</ul>
<h1><a name="p-63772-changelog-3" class="anchor" href="#p-63772-changelog-3" aria-label="Heading link" rel="nofollow"></a>Changelog</h1>
<h2><a name="p-63772-v720-4" class="anchor" href="#p-63772-v720-4" aria-label="Heading link" rel="nofollow"></a>v7.2.0</h2>
<h3><a name="p-63772-enhancements-5" class="anchor" href="#p-63772-enhancements-5" aria-label="Heading link" rel="nofollow"></a>Enhancements</h3>
<ul>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/963" rel="noopener nofollow ugc">#963</a> - <code>mix</code> runs will be faster as they will no longer check to see if the SDK is updated. - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a></li>
</ul>
<h3><a name="p-63772-bug-fixes-6" class="anchor" href="#p-63772-bug-fixes-6" aria-label="Heading link" rel="nofollow"></a>Bug Fixes</h3>
<ul>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/963" rel="noopener nofollow ugc">#963</a> - Avoid problems with read and write locks when updating Elixir SDK on-demand by instead updating them when any project is open using a project converter. - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a></li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/964" rel="noopener nofollow ugc">#964</a> - <a href="https://github.com/JetBrains/intellij-community/commit/9adbba0b6fe279bcc65ad96ab7332d7bf5b59a83" rel="noopener nofollow ugc">JetBrains/intellij-community@9adbba0</a> added <code>@NotNull</code> to <code>OrderRootType.getOrderRootType</code>, which <code>JavaDocRootType.getInstance</code> calls, which means any Small IDE using <code>intellij-community</code> since 4 months ago, including the newest CLion cannot have <code>JavadocOrderRootType.getInstance</code> safely called. - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a></li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/966" rel="noopener nofollow ugc">#966</a> - Path changes were not being written back to disk because the <code>projectSdksModel.apply()</code> was being called before the <code>editor.apply()</code>, which would have copied to the <code>editor'</code>s path changes to the <code>projectSdksModel</code>. - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a></li>
</ul>
<p><a href="https://github.com/KronicDeth/intellij-elixir/blob/v7.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="63772" data-batch-url="/posts/batch_likers">
                        2
                      </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/46">Post #45</a>
	                </div>
	            </div>
              <div id="likers-container-63772" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="63772"
                     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 #45"></div>
  </section>
</div>
    <div class="postbit" id="64542" data-post-id="64542">
  <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-64542-version-721-1" class="anchor" href="#p-64542-version-721-1" aria-label="Heading link" rel="nofollow"></a>Version 7.2.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-64542-thanks-2" class="anchor" href="#p-64542-thanks-2" aria-label="Heading link" rel="nofollow"></a>Thanks</h1>
<ul>
<li>For reporting that <code>.bat</code> was no longer needed on WIndows
<ul>
<li>Huabin Zhang (<a href="https://github.com/zhanghuabin" rel="noopener nofollow ugc">@zhanghuabin</a>)</li>
</ul>
</li>
<li>For reporting that Credo annotator broke on Elixir scratch files
<ul>
<li>Andrei Dziahel (<a href="https://github.com/develop7" rel="noopener nofollow ugc">@develop7</a>)</li>
</ul>
</li>
<li>For reporting that another read action wrapper was needed in the Mix project importer
<ul>
<li>Doston Turgunov (<a href="https://github.com/doston9471" rel="noopener nofollow ugc">@doston9471</a>)</li>
</ul>
</li>
<li>For reporting <code>ExternalLanguageAnnotators.allForFile</code> was being called with a <code>null</code> <code>PsiFile</code>
<ul>
<li>Sławomir Stec (<a href="https://github.com/stokilo" rel="noopener nofollow ugc">@stokilo</a>)</li>
</ul>
</li>
<li>For reporting the Credo annotator, in certain projects, severely slows down the responsiveness of the editor.
<ul>
<li>Bartosz Nowak (<a href="https://github.com/sztosz" rel="noopener nofollow ugc">@sztosz</a>)</li>
<li>Joseph Miller (<a href="https://github.com/joffotron" rel="noopener nofollow ugc">@joffotron</a>)</li>
<li>Benjamin Piouffle (<a href="https://github.com/Betree" rel="noopener nofollow ugc">@Betree</a>)</li>
<li>Thomas Schmidleithner (<a href="https://github.com/tschmidleithner" rel="noopener nofollow ugc">@tschmidleithner</a>)</li>
<li>Georgy (<a href="https://github.com/gazoon" rel="noopener nofollow ugc">@gazoon</a>)</li>
<li>Josh Taylor (<a href="https://github.com/joshuataylor" rel="noopener nofollow ugc">@joshuataylor</a>)</li>
</ul>
</li>
<li>For pairing with me to demonstrate the responsiveness problems
<ul>
<li>Yordis Prieto (<a href="https://github.com/yordis" rel="noopener nofollow ugc">@yordis</a>)</li>
<li>Phillipp Ohlandt (<a href="https://github.com/phillippohlandt" rel="noopener nofollow ugc">@phillippohlandt</a>)</li>
</ul>
</li>
<li>For reporting that configuring Erlang SDK for Elixir SDK failed when more than <code>CLASSES</code> and <code>SOURCES</code> Root Types are installed
<ul>
<li>Valentin Nazarov (<a href="https://github.com/kozlice" rel="noopener nofollow ugc">@kozlice</a>)</li>
</ul>
</li>
</ul>
<h1><a name="p-64542-changelog-3" class="anchor" href="#p-64542-changelog-3" aria-label="Heading link" rel="nofollow"></a>Changelog</h1>
<h2><a name="p-64542-v721-4" class="anchor" href="#p-64542-v721-4" aria-label="Heading link" rel="nofollow"></a>v7.2.1</h2>
<h3><a name="p-64542-bug-fixes-5" class="anchor" href="#p-64542-bug-fixes-5" aria-label="Heading link" rel="nofollow"></a>Bug Fixes</h3>
<ul>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/980" rel="noopener nofollow ugc">#980</a> - Use <code>documentionRootType</code> to indirectly get the documentation <code>OrderRootType</code> in the Erlang SDK Type, so that it works in Small IDEs that have more than <code>CLASSES</code> and <code>SOURCES</code> root types installed. - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a></li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/981" rel="noopener nofollow ugc">#981</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a>
<ul>
<li>
<p>The <a href="https://github.com/rrrene/credo" rel="noopener nofollow ugc"><code>credo</code></a> annotator is disabled by default as numerous users find running <code>mix credo</code> in the background has a negative impact on their system performance.  If you like to try enabling the annotation, you can turn it on using the configuration.</p>
<ol>
<li>Preferences &gt; Editor &gt; Inspections &gt; Elixir</li>
<li>Check “Credo”</li>
<li>Click OK to save and close Preferences</li>
</ol>
<p>If you notice a degradation the in the responsiveness of the editor, it is recommended you disable the annotator again.</p>
<ol>
<li>Preferences &gt; Editor &gt; Inspections &gt; Elixir</li>
<li>Uncheck “Credo”</li>
<li>Click OK to save and close Preferences</li>
</ol>
</li>
</ul>
</li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/982" rel="noopener nofollow ugc">#982</a> - Protect from <code>PsiFile</code> being <code>null</code> in <code>Local</code> credo inspector - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a></li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/983" rel="noopener nofollow ugc">#983</a> - Run <code>Qualified#moduleName</code> <code>getText</code> in Read Action. - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a></li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/985" rel="noopener nofollow ugc">#985</a> - Scratch Files have a <code>Project</code>, but not a <code>Module</code>, so change flow to use <code>Project</code> when <code>Module</code> is <code>null</code> in credo annotator. - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a></li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/986" rel="noopener nofollow ugc">#986</a> - Don’t add <code>.bat</code> to <code>mix</code> on Windows. <code>mix</code> is never run as an executable.  It is either run as a script to <code>elixir.bat</code> OR as an argument to <code>erl.exe</code> when <code>erl.exe</code> is running <code>elixir</code>. - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a></li>
</ul>
<h1><a name="p-64542-readme-updates-6" class="anchor" href="#p-64542-readme-updates-6" aria-label="Heading link" rel="nofollow"></a>README Updates</h1>
<h3><a name="p-64542-credo-7" class="anchor" href="#p-64542-credo-7" aria-label="Heading link" rel="nofollow"></a>Credo</h3>
<h4><a name="p-64542-annotator-8" class="anchor" href="#p-64542-annotator-8" aria-label="Heading link" rel="nofollow"></a>Annotator</h4>
<p>When enabled, 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/credo/external_annotator/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/credo/external_annotator/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>
<h5><a name="p-64542-enable-9" class="anchor" href="#p-64542-enable-9" aria-label="Heading link" rel="nofollow"></a>Enable</h5>
<p>The <a href="https://github.com/rrrene/credo" rel="noopener nofollow ugc"><code>credo</code></a> annotator is disabled by default as numerous users find running <code>mix credo</code> in the background has a negative impact on their system performance.  If you like to try enabling the annotation, you can turn it on using the <a href="#configuration" rel="nofollow">configuration</a>.</p>
<ol>
<li>Preferences &gt; Editor &gt; Inspections &gt; Elixir</li>
<li>Check “Credo”</li>
</ol>
<h5><a name="p-64542-disable-10" class="anchor" href="#p-64542-disable-10" aria-label="Heading link" rel="nofollow"></a>Disable</h5>
<p>If you notice a degradation the in the responsiveness of the editor, it is recommended you disable the annotator again.</p>
<ol>
<li>Preferences &gt; Editor &gt; Inspections &gt; Elixir</li>
<li>Uncheck “Credo”</li>
</ol>
<p><a href="https://github.com/KronicDeth/intellij-elixir/blob/v7.2.1/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="64542" data-batch-url="/posts/batch_likers">
                        2
                      </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/47">Post #46</a>
	                </div>
	            </div>
              <div id="likers-container-64542" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="64542"
                     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 #46"></div>
  </section>
</div>
    <div class="postbit" id="69079" data-post-id="69079">
  <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-69079-version-730-1" class="anchor" href="#p-69079-version-730-1" aria-label="Heading link" rel="nofollow"></a>Version 7.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-69079-thanks-2" class="anchor" href="#p-69079-thanks-2" aria-label="Heading link" rel="nofollow"></a>Thanks</h1>
<ul>
<li>For reporting <code>StreamEx</code> is missing <code>nonNull</code> on some IDEs/versions
<ul>
<li><a href="https://github.com/runflowcode" rel="noopener nofollow ugc">@runflowcode</a></li>
<li>Steve Morin (<a href="https://github.com/smorin" rel="noopener nofollow ugc">@smorin</a>)</li>
<li>IgoR Taskovski (<a href="https://github.com/igortaskovski" rel="noopener nofollow ugc">@igortaskovski</a>)</li>
<li>João Veiga (<a href="https://github.com/jveiga" rel="noopener nofollow ugc">@jveiga</a>)</li>
<li><a href="https://github.com/JohnConnor1969" rel="noopener nofollow ugc">@JohnConnor1969</a></li>
<li>Kalpa Vrikcha (<a href="https://github.com/kalpabarbosa" rel="noopener nofollow ugc">@kalpabarbosa</a>)</li>
<li>长毛是狗 (<a href="https://github.com/www3838438" rel="noopener nofollow ugc">@www3838438</a>)</li>
<li><a href="https://github.com/VladRose" rel="noopener nofollow ugc">@VladRose</a></li>
<li>Pavel (<a href="https://github.com/birladeanuPavel" rel="noopener nofollow ugc">@birladeanuPavel</a>)</li>
<li>Dmitry Zakharov (<a href="https://github.com/zakharov-dy" rel="noopener nofollow ugc">@zakharov-dy</a>)</li>
<li>Nick Gravel (<a href="https://github.com/nickgravel" rel="noopener nofollow ugc">@nickgravel</a>)</li>
<li>Carlo Pati (<a href="https://github.com/deemaxx" rel="noopener nofollow ugc">@deemaxx</a>)</li>
<li><a href="https://github.com/MortadaAK" rel="noopener nofollow ugc">@MortadaAK</a></li>
</ul>
</li>
</ul>
<h1><a name="p-69079-changelog-3" class="anchor" href="#p-69079-changelog-3" aria-label="Heading link" rel="nofollow"></a>Changelog</h1>
<h2><a name="p-69079-v730-4" class="anchor" href="#p-69079-v730-4" aria-label="Heading link" rel="nofollow"></a>v7.3.0</h2>
<h3><a name="p-69079-enhancements-5" class="anchor" href="#p-69079-enhancements-5" aria-label="Heading link" rel="nofollow"></a>Enhancements</h3>
<ul>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/1015" rel="noopener nofollow ugc">#1015</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a>
<ul>
<li>Add supplemental file editor for <code>.beam</code> files: “BEAM Chunks”.  The decompiled binary file will continue to be shown on the default “Text” editor tab.</li>
</ul>
</li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/1021" rel="noopener nofollow ugc">#1021</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a>
<ul>
<li>
<p>Support for <a href="https://github.com/elixir-lang/elixir/commit/23c7542d95683a497a7b93071b9ccbbeb9e45d2f" class="inline-onebox" rel="noopener nofollow ugc">Remove incorrect wording regarding test cases · elixir-lang/elixir@23c7542 · GitHub</a></p>
<div class="md-table">
<table>
<thead>
<tr>
<th>Version</th>
<th>Struct</th>
<th>Started Event</th>
<th>Finished Event</th>
<th><code>%ExUnit.Test{}</code> field</th>
</tr>
</thead>
<tbody>
<tr>
<td>&lt; 1.6.0</td>
<td><code>%ExUnit.TestCase{}</code></td>
<td><code>:case_started</code></td>
<td><code>:case_finished</code></td>
<td><code>case</code></td>
</tr>
<tr>
<td>&gt;= 1.6.0</td>
<td><code>%ExUnit.TestCase{}</code></td>
<td><code>:module_started</code></td>
<td><code>:module_finished</code></td>
<td><code>module</code></td>
</tr>
</tbody>
</table>
</div><p>Because Elixir 1.6.0 could not introduce a breaking change, the <code>&lt; 1.6.0</code> events are fired, but <code>resources/exunit/1.6.0/team_city_ex_unit_formatting.ex</code> will ignore them and only convert the <code>&gt;= 1.6.0</code> events to TeamCity event used in the JetBrains Test Runner UI.</p>
</li>
</ul>
</li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/1018" rel="noopener nofollow ugc">#1018</a> - Expose Declarations &gt; Functions and Declarations &gt; Macros in Color Settings - <a href="https://github.com/dimcha" rel="noopener nofollow ugc">@dimcha</a></li>
</ul>
<h3><a name="p-69079-bug-fixes-6" class="anchor" href="#p-69079-bug-fixes-6" aria-label="Heading link" rel="nofollow"></a>Bug Fixes</h3>
<ul>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/1019" rel="noopener nofollow ugc">#1019</a> - Don’t use <code>StreamEx</code> because support is inconsistent across IDEs - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a></li>
</ul>
<h1><a name="p-69079-readmemd-updates-7" class="anchor" href="#p-69079-readmemd-updates-7" aria-label="Heading link" rel="nofollow"></a><code>README.md</code> Updates</h1>
<h3><a name="p-69079-beam-files-8" class="anchor" href="#p-69079-beam-files-8" aria-label="Heading link" rel="nofollow"></a><code>.beam</code> Files</h3>
<p><code>.beam</code> files are the compiled version of modules on the BEAM virtual machine used by Elixir and Erlang.  They are the equivalent of <code>.class</code> files in Java.</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>
<p><code>.beam</code> files have 2 editors registered: <a href="#decompilation-text" rel="nofollow">decompiled Text</a> and <a href="#beam-chunks" rel="nofollow">BEAM Chunks</a></p>
<p><img src="/https://github.com/KronicDeth/intellij-elixir/blob/v7.3.0/screenshots/features/beam_files/Editor%20Tabs.png?raw=true" alt="file Editor Tabs" title=".beam file Editor Tabs" width="" height=""></p>
<h4><a name="p-69079-decompression-9" class="anchor" href="#p-69079-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-69079-beam-chunks-10" class="anchor" href="#p-69079-beam-chunks-10" aria-label="Heading link" rel="nofollow"></a>BEAM Chunks</h4>
<p><code>.beam</code> files are composed of binary chunks.  Each chunk is formatted</p>
<table>
  <thead>
    <tr>
      <th>Offset</th>
      <th>+0</th>
      <th>+1</th>
      <th>+2</th>
      <th>+3</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td colspan="4">Name (ASCII Characters)</td>
    </tr>
    <tr>
      <th>4</th>
      <td colspan="4">Length (`unsigned-big-integer`)</td>
    </tr>
    <tr>
      <th>8+</th>
      <td colspan="4">Chunk-Specific</td>
    </tr>
  </tbody>
</table>
<p>This format is generically referred to as <a href="https://en.wikipedia.org/wiki/Type-length-value" rel="noopener nofollow ugc">Type-Length-Value</a></p>
<p>The BEAM Chunks editor tab is subdivided into further tabs, one for each chunk in the <code>.beam</code> file.</p>
<p><img src="/https://github.com/KronicDeth/intellij-elixir/blob/v7.3.0/screenshots/features/beam_files/beam_chunks/Chunk%20Tabs.png?raw=true" alt="BEAM Chunks editor chunk tabs" title="BEAM Chunks editor chunk tabs" width="" height=""></p>
<p>The tabs are listed in the order that the chunks occur in the .beam file.</p>
<h5><a name="p-69079-atom-atu8-11" class="anchor" href="#p-69079-atom-atu8-11" aria-label="Heading link" rel="nofollow"></a><code>Atom</code> / <code>AtU8</code></h5>
<p>The <code>Atom </code>chunk holds <a href="https://en.wikipedia.org/wiki/ISO/IEC_8859-1" rel="noopener nofollow ugc">LATIN-1</a> encoded atoms while <code>AtU8</code> chunk holds <a href="https://en.wikipedia.org/wiki/UTF-8" rel="noopener nofollow ugc">UTF-8</a> atoms. There will only be one of these atom-related chunks in any given <code>.beam</code> file. <code>AtU8</code> is used in newer versions of OTP that support UTF-8 atoms.  <code>AtU8</code> was <a href="https://github.com/erlang/otp/pull/1078" rel="noopener nofollow ugc">introduced</a> in OTP 20.</p>
<h6><a name="p-69079-format-12" class="anchor" href="#p-69079-format-12" aria-label="Heading link" rel="nofollow"></a>Format</h6>
<table>
  <thead>
    <tr>
      <th>Offset</th>
      <th>+0</th>
      <th>+1</th>
      <th>+2</th>
      <th>+3</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td colspan="4">atom count (`unsigned-big-integer`)</td>
    </tr>
    <tr>
      <th>4</th>
      <td>length<sub>1</sub> (`unsigned-byte`)</td>
      <td colspan="3">bytes (for length<sub>1</sub>)</td>
    </tr>
    <tr>
      <th>4+length<sub>1</sub>+...+length<sub>n-1</sub></th>
      <td>length<sub>n</sub> (`unsigned-byte`)</td>
      <td colspan="3">bytes (for length<sub>n</sub>)</td>
    </tr>
  </tbody>
</table>
<h6><a name="p-69079-tab-13" class="anchor" href="#p-69079-tab-13" aria-label="Heading link" rel="nofollow"></a>Tab</h6>
<p>The <code>Atom</code>/<code>AtU8</code> tab shows a table with the columns</p>
<div class="md-table">
<table>
<thead>
<tr>
<th style="text-align:left">Column</th>
<th style="text-align:left">Description</th>
<th style="text-align:left">Source</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">Index</td>
<td style="text-align:left">1-based to match Erlang convention.  In the <code>Code</code> chunk, <code>atom(0)</code> is reserved to always translate to <code>nil</code></td>
<td style="text-align:left">Derived</td>
</tr>
<tr>
<td style="text-align:left">Byte Count</td>
<td style="text-align:left">The byte count for the atom’s bytes</td>
<td style="text-align:left">Raw</td>
</tr>
<tr>
<td style="text-align:left">Characters</td>
<td style="text-align:left">From encoding the bytes as LATIN-1 for <code>Atom</code> chunk or UTF-8 for <code>AtU8</code> chunk</td>
<td style="text-align:left">Derived</td>
</tr>
</tbody>
</table>
</div><p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/2/2395f6c88a23f75fdf3c31c3de280db3528bd2cd.png" data-download-href="https://forum.elixirforum.com/uploads/default/2395f6c88a23f75fdf3c31c3de280db3528bd2cd" title="AtU8 Table" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/2X/2/2395f6c88a23f75fdf3c31c3de280db3528bd2cd.png" alt="AtU8 Table" width="690" height="132" data-dominant-color="3F4244"><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">AtU8 Table</span><span class="informations">701×135 10.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>
<h5><a name="p-69079-attr-14" class="anchor" href="#p-69079-attr-14" aria-label="Heading link" rel="nofollow"></a><code>Attr</code></h5>
<p>The <code>Attr</code> chunk holds the module attributes, but only those that are persisted.  Erlang module attributes are persisted by default, but in Elixir module attributes need to be marked as persisted with <a href="https://hexdocs.pm/elixir/Module.html#register_attribute/3" rel="noopener nofollow ugc"><code>Module.register_attribute/3</code></a></p>
<h6><a name="p-69079-format-15" class="anchor" href="#p-69079-format-15" aria-label="Heading link" rel="nofollow"></a>Format</h6>
<p>The <code>Attr</code> chunk uses External Term Format (<code>term_to_binary</code>’s output) to encode a <a href="http://erlang.org/doc/man/proplists.html" rel="nofollow">proplist</a>, which is similar to, but not quite the same an Elixir <a href="https://hexdocs.pm/elixir/Keyword.html#t:t/0" rel="noopener nofollow ugc">Keyword list</a></p>
<p>All modules will have a <code>:vsn</code> attribute that is either set explicitly or defaults to the MD5 of the module.</p>
<h6><a name="p-69079-tab-16" class="anchor" href="#p-69079-tab-16" aria-label="Heading link" rel="nofollow"></a>Tab</h6>
<p>The <code>Attr</code> tab shows a table with the columns</p>
<div class="md-table">
<table>
<thead>
<tr>
<th style="text-align:left">Column</th>
<th style="text-align:left">Description</th>
<th style="text-align:left">Source</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">Key</td>
<td style="text-align:left">Attribute name</td>
<td style="text-align:left">Raw</td>
</tr>
<tr>
<td style="text-align:left">Value</td>
<td style="text-align:left">Attribute value. <strong>Note: The value always appears as a list as read from the binary format.  I don’t know why.</strong></td>
<td style="text-align:left">Raw</td>
</tr>
</tbody>
</table>
</div><p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/9/9e576a05e661afcf43b575f89a1ef0cd42b540e6.png" data-download-href="https://forum.elixirforum.com/uploads/default/9e576a05e661afcf43b575f89a1ef0cd42b540e6" title="Attr Table" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/2X/9/9e576a05e661afcf43b575f89a1ef0cd42b540e6.png" alt="Attr Table" width="432" height="139"><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">Attr Table</span><span class="informations">432×139 8.65 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>
<h5><a name="p-69079-cinf-17" class="anchor" href="#p-69079-cinf-17" aria-label="Heading link" rel="nofollow"></a><code>CInf</code></h5>
<p>The <code>CInf</code> chunk is the Compilation Information for the Erlang or Erlang Core compiler.  Even Elixir modules have it because Elixir code passes through this part of the Erlang Core compiler</p>
<h6><a name="p-69079-format-18" class="anchor" href="#p-69079-format-18" aria-label="Heading link" rel="nofollow"></a>Format</h6>
<p>The <code>CInf</code> chunk uses External Term Format (<code>term_to_binary</code>’s output) to encode a <a href="http://erlang.org/doc/man/proplists.html" rel="nofollow">proplist</a>, which is similar to, but not quite the same an Elixir <a href="https://hexdocs.pm/elixir/Keyword.html#t:t/0" rel="noopener nofollow ugc">Keyword list</a></p>
<h6><a name="p-69079-tab-19" class="anchor" href="#p-69079-tab-19" aria-label="Heading link" rel="nofollow"></a>Tab</h6>
<p>The <code>CInf</code> tab shows a table with the columns</p>
<div class="md-table">
<table>
<thead>
<tr>
<th style="text-align:left">Column</th>
<th style="text-align:left">Description</th>
<th style="text-align:left">Source</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">Key</td>
<td style="text-align:left">Option name</td>
<td style="text-align:left">Raw</td>
</tr>
<tr>
<td style="text-align:left">Value</td>
<td style="text-align:left">Inspected value</td>
<td style="text-align:left">Raw</td>
</tr>
</tbody>
</table>
</div><p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/f/f521b3699ba47743d191acc6827e42cd03ee9637.png" data-download-href="https://forum.elixirforum.com/uploads/default/f521b3699ba47743d191acc6827e42cd03ee9637" title="CInf Table" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/2X/f/f521b3699ba47743d191acc6827e42cd03ee9637.png" alt="CInf Table" width="570" height="107"><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">CInf Table</span><span class="informations">570×107 8.17 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>
<h5><a name="p-69079-code-20" class="anchor" href="#p-69079-code-20" aria-label="Heading link" rel="nofollow"></a><code>Code</code></h5>
<p>The <code>Code</code> chunk contains the byte code for the module.</p>
<h6><a name="p-69079-format-21" class="anchor" href="#p-69079-format-21" aria-label="Heading link" rel="nofollow"></a>Format</h6>
<p>It is encoded in <a href="http://beam-wisdoms.clau.se/en/latest/indepth-beam-file.html#beam-compact-term-encoding" rel="noopener nofollow ugc">BEAM Compact Term Encoding</a>, which differs from the binary format produced by <code>term_to_binary</code>.</p>
<h6><a name="p-69079-tab-22" class="anchor" href="#p-69079-tab-22" aria-label="Heading link" rel="nofollow"></a>Tab</h6>
<p>The <code>Code</code> tab shows a read-only editor with one byte code operation on each line.  For ease of reading, operations are grouped by function and then label block with indentation indicating scope.</p>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/f/f5230d6722005d65cac851ea7eb0b3efb337518e.png" data-download-href="https://forum.elixirforum.com/uploads/default/f5230d6722005d65cac851ea7eb0b3efb337518e" title="Code Chunk Read-Only Editor" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/optimized/2X/f/f5230d6722005d65cac851ea7eb0b3efb337518e_2_690x337.png" alt="Code Chunk Read-Only Editor" width="690" height="337" srcset="https://forum.elixirforum.com/uploads/default/optimized/2X/f/f5230d6722005d65cac851ea7eb0b3efb337518e_2_690x337.png, https://forum.elixirforum.com/uploads/default/optimized/2X/f/f5230d6722005d65cac851ea7eb0b3efb337518e_2_1035x505.png 1.5x, https://forum.elixirforum.com/uploads/default/original/2X/f/f5230d6722005d65cac851ea7eb0b3efb337518e.png 2x" data-dominant-color="323130"><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">Code Chunk Read-Only Editor</span><span class="informations">1185×579 106 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>By default as many references to other chunks and references to other parts of <code>Code</code> chunk are inlined to ease understanding.  If you want to see the raw byte code operations, you can turn off the various inliners.</p>
<p>####### Controls</p>
<table>
  <thead>
    <tr>
      <th>Control</th>
      <th>On</th>
      <th>Off</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td rowspan="2">Inline Atoms</td>
      <td>
        <code>atom(0)</code> is inlined as <code>nil</code>
      </td>
      <td>
        <code>atom(N)</code> if "Inline Integers" is Off
      </td>
    </tr>
    <tr>
      <td>
        <code>atom(n)</code> looks up index `n` in `Atom`/`AtU8` chunk and inlines its `inspect`ed version
      </td>
      <td>
        <code>N</code> if "Inline Integers" is On and the argument supports "Inline Integers"
      </td>
    </tr>
    <tr>
      <td rowspan="2">Inline Functions</td>
      <td rowspan="2">
        <code>literal(n)</code> looks up index <code>n</code> in <code>FunT</code> chunk and inlines the name if the argument supports "Inline Functions"
      </td>
      <td>
        <code>literal(n)</code> if "Inline Integers" is Off
      </td>
    </tr>
    <tr>
      <td>
        <code>n</code> if "Inline Integers" is On and the argument supports "Inline Integers"
      </td>
    </tr>
    <tr>
      <td rowspan="2">
        Inline Imports
      </td>
      <td rowspan="2">
        <code>literal(n)</code> looks up index <code>n</code> in <code>ImpT</code> and inlines it as a function reference: <code>&amp;module.name/arity</code> if argument supports "Inline Functions"
      </td>
      <td>
        <code>literal(n)</code> if "Inline Integers" Is Off
      </td>
    </tr>
    <tr>
      <td>
        <code>n</code> if "Inline Integers" is On and the argument supports "Inline Integers"
      </td>
    </tr>
    <tr>
      <td rowspan="2">Inline Integers</td>
      <td><code>atom(n)</code> and <code>literal(n)</code> inline as <code>n</code> if argument supports "Inline Integers"</td>
      <td rowspan="2"><code>atom(n)</code>, <code>integer(n)</code>, and <code>literal(n)</code></td>
    </tr>
    <tr>
      <td><code>integer(n)</code> inlines as <code>n</code></td>
    </tr>
    <tr>
      <td>Inline Labels</td>
      <td><code>label(n)</code> inlines as <code>n</code> if argument supports "Inline Labels"</td>
      <td><code>label(n)</code></td>
    </tr>
    <tr>
      <td>Inline Lines</td>
      <td><code>line(literal(n))</code> looks up index `n` in the "Line Reference" table in the `Lines` chunk.  The Line Reference contains a file name index and line.  The file name index is looked up in the "File Name" table in the `Lines` chunk.  The line from the Line Reference and the File name from the "File Name" table are inlined as `line(file_name: file_name, line: line)`.</td>
      <td><code>line</code> operations are left as is</td>
    </tr>
    <tr>
      <td>Inline Literals</td>
      <td><code>literal(n)</code> looks up index <code>n</code> in <code>LitT</code> chunk and inlines its `inspect`ed version if the argument supports "Inline Literals"</td>
      <td><code>literal(n)</code></td>
    </tr>
    <tr>
      <td>Inline Local Calls</td>
      <td><code>label(n)</code> finds <code>label(n)</code> in <code>Code</code> chunk, then searches back for the previous <code>func_info</code> operation, then inlines it as a function reference: <code>&amp;module.name/arity</code> if argument supports "Inline Local Calls"</td>
      <td><code>label(n)</code></td>
    </tr>
    <tr>
      <td>Inline Strings</td>
      <td>Looks up <code>bit_length<code> and <code>byte_offset</code> into `StrT` chunk as their CharList value if supported by operation as value to <code>string</code> argument name</code></code></td>
      <td><code>bit_length<code> and <code>byte_offset</code>arguments are left as is</code></code></td>
    </tr>
    <tr>
      <td>Show Argument Names</td>
      <td>Adds keyword argument names before each argument value</td>
      <td>Leaves values as positional arguments</td>
    </tr>
  </tbody>
</table>
<p>If any of the inliners are incorrect or you have an argument name that makes more sense, please open an <a href="https://github.com/KronicDeth/intellij-elixir/issues" rel="noopener nofollow ugc">issue</a>.</p>
<h5><a name="p-69079-dbgi-23" class="anchor" href="#p-69079-dbgi-23" aria-label="Heading link" rel="nofollow"></a><code>Dbgi</code></h5>
<p>The <code>Dbgi</code> chunk contains Debug Info.  It was <a href="https://github.com/erlang/otp/pull/1367" rel="noopener nofollow ugc">introduced</a> in OTP 20 as a replacement for the <code>Abst</code> chunk.  While the <code>Abst</code> chunk was required to contain the Erlang AST, the <code>Dbgi</code> format can contain the debug info for other languages, such as Elixir <code>quoted</code> form AST.</p>
<h6><a name="p-69079-format-24" class="anchor" href="#p-69079-format-24" aria-label="Heading link" rel="nofollow"></a>Format</h6>
<p>Because the format is language neutral, the format is a set of nested, versioned formats.  The outer most layer is</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">{:debug_info_v1, backend, metadata | :none}
</code></pre>
<p>For <code>:debug_info_v1</code>, Elixir’s <code>backend</code> is <code>:elixir_erl</code>.  The <code>metadata</code> for <code>:elixir_erl</code> is further versioned: <code>{:elixir_v1, map, specs}</code>.</p>
<p><code>map</code> contains the bulk of the data.</p>
<div class="md-table">
<table>
<thead>
<tr>
<th style="text-align:left">Key</th>
<th style="text-align:left">Value</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>:attributes</code></td>
<td style="text-align:left">Attributes similar to the <code>Attr</code> chunk, but at the Elixir, instead of Core Erlang level.  Usually they match with the exception that <code>attributes</code> doesn’t contain <code>vsn</code> when <code>Attr</code> contains the <code>MD5</code> version</td>
</tr>
<tr>
<td style="text-align:left"><code>:compile_opts</code></td>
<td style="text-align:left">Compilation options similar to <code>CInf</code> chunk’s <code>options</code> key, but at for Elixir, instead of Core Erlang level.</td>
</tr>
<tr>
<td style="text-align:left"><code>:definitions</code></td>
<td style="text-align:left">The Elixir <code>quoted</code> AST for reach function clause.</td>
</tr>
<tr>
<td style="text-align:left"><code>:file</code></td>
<td style="text-align:left">The name of the file the module was generated from.</td>
</tr>
<tr>
<td style="text-align:left"><code>:line</code></td>
<td style="text-align:left">The line in <code>:file</code> where the module was defined, such as the line <code>defmodule</code> occurred.</td>
</tr>
<tr>
<td style="text-align:left"><code>:module</code></td>
<td style="text-align:left">The name of the module as an <code>atom</code></td>
</tr>
<tr>
<td style="text-align:left"><code>:unreachable</code></td>
<td style="text-align:left">Unreachable functions</td>
</tr>
</tbody>
</table>
</div><h6><a name="p-69079-tab-25" class="anchor" href="#p-69079-tab-25" aria-label="Heading link" rel="nofollow"></a>Tab</h6>
<p>The <code>Dbgi</code> tag show the single value map entries: <code>:file</code>, <code>:line</code>, and <code>:module</code>.</p>
<p><img src="https://forum.elixirforum.com/uploads/default/original/2X/d/d8c676acaa505fe2a5e12bb9cd4fd8c923611f55.png" alt="Singletons" width="536" height="72"></p>
<p>For the multi-value keys: <code>:attributes</code>, <code>:compile_opts</code>, and <code>:definitions</code>, there are individual tabs.</p>
<p><img src="https://forum.elixirforum.com/uploads/default/original/2X/a/a74e30c8d971292c0c11a5e287600a62bac20c1d.png" alt="Multivalue Tabs" width="296" height="30"></p>
<p>####### Attributes</p>
<p>The Attributes tab has the same format as the <code>Attr</code>s chunk.</p>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/2/2164aa649819858dc1d766fb86ddebc5eea0b416.png" data-download-href="https://forum.elixirforum.com/uploads/default/2164aa649819858dc1d766fb86ddebc5eea0b416" title="Dbgi Attributes Table" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/2X/2/2164aa649819858dc1d766fb86ddebc5eea0b416.png" alt="Dbgi Attributes Table" width="295" height="122"><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">Dbgi Attributes Table</span><span class="informations">295×122 5.49 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>####### Compile Options</p>
<p>The Compile Options tab is usually empty, much like the <code>CInf</code> <code>options</code> key for Erlang.</p>
<p><img src="https://forum.elixirforum.com/uploads/default/original/2X/6/6daf95b4d84f93c22faa9384a822869e2f7073ab.png" alt="Table" width="294" height="73"></p>
<p>####### Definitions</p>
<p>The Definitions tab is split between a tree of Module, Function/Arity and clauses.</p>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/a/a86cdb9ec4daa1d8ff2763b296e4d0761181811f.png" data-download-href="https://forum.elixirforum.com/uploads/default/a86cdb9ec4daa1d8ff2763b296e4d0761181811f" title="Tree" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/2X/a/a86cdb9ec4daa1d8ff2763b296e4d0761181811f.png" alt="Tree" width="303" height="428"><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">Tree</span><span class="informations">303×428 15.8 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>Clicking on a clause will show only that clause, but clicking on a higher level in the tree will show all clauses in the function or the entire Module.</p>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/0/0d3911aafbce4eebbdc9df99d667a68816b79eb2.png" data-download-href="https://forum.elixirforum.com/uploads/default/0d3911aafbce4eebbdc9df99d667a68816b79eb2" title="Clause" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/optimized/2X/0/0d3911aafbce4eebbdc9df99d667a68816b79eb2_2_690x72.png" alt="Clause" width="690" height="72" srcset="https://forum.elixirforum.com/uploads/default/optimized/2X/0/0d3911aafbce4eebbdc9df99d667a68816b79eb2_2_690x72.png, https://forum.elixirforum.com/uploads/default/optimized/2X/0/0d3911aafbce4eebbdc9df99d667a68816b79eb2_2_1035x108.png 1.5x, https://forum.elixirforum.com/uploads/default/original/2X/0/0d3911aafbce4eebbdc9df99d667a68816b79eb2.png 2x" data-dominant-color="3A3C41"><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">Clause</span><span class="informations">1322×138 33.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><br>
<div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/a/ad81cdfdc2fe475294ad879d48042ec4607c8ab4.png" data-download-href="https://forum.elixirforum.com/uploads/default/ad81cdfdc2fe475294ad879d48042ec4607c8ab4" title="Function" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/optimized/2X/a/ad81cdfdc2fe475294ad879d48042ec4607c8ab4_2_690x127.png" alt="Function" width="690" height="127" srcset="https://forum.elixirforum.com/uploads/default/optimized/2X/a/ad81cdfdc2fe475294ad879d48042ec4607c8ab4_2_690x127.png, https://forum.elixirforum.com/uploads/default/optimized/2X/a/ad81cdfdc2fe475294ad879d48042ec4607c8ab4_2_1035x190.png 1.5x, https://forum.elixirforum.com/uploads/default/original/2X/a/ad81cdfdc2fe475294ad879d48042ec4607c8ab4.png 2x" data-dominant-color="39393C"><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">Function</span><span class="informations">1360×251 60.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><br>
<div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/a/a91bbce3a955e4774637ffe56e6a225852eedb11.png" data-download-href="https://forum.elixirforum.com/uploads/default/a91bbce3a955e4774637ffe56e6a225852eedb11" title="Module" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/optimized/2X/a/a91bbce3a955e4774637ffe56e6a225852eedb11_2_690x344.png" alt="Module" width="690" height="344" srcset="https://forum.elixirforum.com/uploads/default/optimized/2X/a/a91bbce3a955e4774637ffe56e6a225852eedb11_2_690x344.png, https://forum.elixirforum.com/uploads/default/optimized/2X/a/a91bbce3a955e4774637ffe56e6a225852eedb11_2_1035x516.png 1.5x, https://forum.elixirforum.com/uploads/default/original/2X/a/a91bbce3a955e4774637ffe56e6a225852eedb11.png 2x" data-dominant-color="373738"><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">Module</span><span class="informations">1373×685 154 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>The AST stored in the <code>definitions</code> tab and the process of converting it back to code is not format preserves, so it will not look precisely like the source code as the AST has undergone some macro expansion before its put in the <code>Dbgi</code> chunk.  <em>As common idioms are understood, reversals will be add to the renderer.</em></p>
<h5><a name="p-69079-exdc-26" class="anchor" href="#p-69079-exdc-26" aria-label="Heading link" rel="nofollow"></a><code>ExDc</code></h5>
<p>The <code>ExDc</code> chunk stores ExDoc.  Not the rendered HTML from the <code>ex_doc</code> package, but the the <code>@doc</code>, <code>@moduledoc</code>, and <code>@typedoc</code> attribute values that work even without <code>ex_doc</code> installed.  This chunk is what is consulted when the <code>h</code> helper is used in <code>iex</code>.</p>
<h6><a name="p-69079-format-27" class="anchor" href="#p-69079-format-27" aria-label="Heading link" rel="nofollow"></a>Format</h6>
<p>The <code>ExDc</code> chunk is the encoded with <code>term_to_binary</code>.  The term format is a versioned as <code>{version, versioned_format}</code>.  The current <code>version</code> tag is <code>:elixir_docs_v1</code> and the <code>versioned_format</code> is a <a href="https://hexdocs.pm/elixir/Keyword.html#t:t/0" rel="noopener nofollow ugc">Keyword.t</a> with keys matching the <a href="https://hexdocs.pm/elixir/Code.html#get_docs/2" rel="noopener nofollow ugc"><code>Code.get_docs/2</code></a> tags <code>:callback_docs</code>, <code>:docs</code>, <code>:moduledoc</code>, and <code>:type_docs</code> keys.</p>
<h6><a name="p-69079-tab-28" class="anchor" href="#p-69079-tab-28" aria-label="Heading link" rel="nofollow"></a>Tab</h6>
<p>Like <code>Dbgi</code>, the <code>ExDc</code> tab is split between a tree to navigate and an editor to show the decompiled value.</p>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/1/184551af384953bec19546f8d096ffeea974f09c.png" data-download-href="https://forum.elixirforum.com/uploads/default/184551af384953bec19546f8d096ffeea974f09c" title="ExDc Tree" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/2X/1/184551af384953bec19546f8d096ffeea974f09c.png" alt="ExDc Tree" width="625" height="410"><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">ExDc Tree</span><span class="informations">625×410 27.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><br>
<div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/7/76177a68cd30d94de94cba05dbd2af91da20dc97.png" data-download-href="https://forum.elixirforum.com/uploads/default/76177a68cd30d94de94cba05dbd2af91da20dc97" title="Function selected in ExDc tree" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/optimized/2X/7/76177a68cd30d94de94cba05dbd2af91da20dc97_2_690x323.png" alt="Function selected in ExDc tree" width="690" height="323" srcset="https://forum.elixirforum.com/uploads/default/optimized/2X/7/76177a68cd30d94de94cba05dbd2af91da20dc97_2_690x323.png, https://forum.elixirforum.com/uploads/default/optimized/2X/7/76177a68cd30d94de94cba05dbd2af91da20dc97_2_1035x484.png 1.5x, https://forum.elixirforum.com/uploads/default/optimized/2X/7/76177a68cd30d94de94cba05dbd2af91da20dc97_2_1380x646.png 2x" data-dominant-color="353638"><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">Function selected in ExDc tree</span><span class="informations">1478×693 87.4 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>Click on a node in the tree will show all docs at that level and any descendants.</p>
<div class="md-table">
<table>
<thead>
<tr>
<th style="text-align:left">Node</th>
<th style="text-align:left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><em>Root</em></td>
<td style="text-align:left">All docs</td>
</tr>
<tr>
<td style="text-align:left">Module</td>
<td style="text-align:left"><code>@moduledoc</code></td>
</tr>
<tr>
<td style="text-align:left">Types</td>
<td style="text-align:left">All <code>@typedoc</code>s</td>
</tr>
<tr>
<td style="text-align:left">Types <em>child</em></td>
<td style="text-align:left">A specific <code>@typedoc</code></td>
</tr>
<tr>
<td style="text-align:left">Callbacks</td>
<td style="text-align:left">All <code>@callback</code> <code>@doc</code>s</td>
</tr>
<tr>
<td style="text-align:left">Callbacks <em>child</em></td>
<td style="text-align:left">A specific <code>@callback</code>’s <code>@doc</code></td>
</tr>
<tr>
<td style="text-align:left">Functions/Macros</td>
<td style="text-align:left">All <code>@doc</code>s for functions/macros</td>
</tr>
<tr>
<td style="text-align:left">Functions/Macros <em>child</em></td>
<td style="text-align:left">A specific function/macro’s <code>@doc</code></td>
</tr>
</tbody>
</table>
</div><h5><a name="p-69079-expt-29" class="anchor" href="#p-69079-expt-29" aria-label="Heading link" rel="nofollow"></a><code>ExpT</code></h5>
<p>The <code>ExpT</code> chunk is the Export Table.  The name “Export” derives from the <code>Erlang</code> module attribute <code>-export</code>, which is used to “export” functions from a module.  It is the equivalent of making a function or macro public with <code>def</code> and <code>defmacro</code> as opposed to making it private with <code>defp</code> and <code>defmacrop</code> in Elixir.</p>
<h6><a name="p-69079-format-30" class="anchor" href="#p-69079-format-30" aria-label="Heading link" rel="nofollow"></a>Format</h6>
<p>The BEAM format and the <code>ExpT</code> chunk, being made for Erlang, has no concept of macros. It only understands functions, so Elixir macros, like <code>__using__/1</code> called by <code>use</code> are compiled to plain Erlang functions with <code>MACRO-</code> prefixed to their name and an extra argument (the <code>__CALLER__</code> environment) as the first argument, which increases the arity, yielding a full MFA of <code>MACRO-__using__/2</code> as seen above.</p>
<h6><a name="p-69079-tab-31" class="anchor" href="#p-69079-tab-31" aria-label="Heading link" rel="nofollow"></a>Tab</h6>
<p>The <code>ExpT</code> tab shows a table with the columns</p>
<div class="md-table">
<table>
<thead>
<tr>
<th style="text-align:left">Column</th>
<th style="text-align:left">Description</th>
<th style="text-align:left">Source</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">Atom Index</td>
<td style="text-align:left">Index into the <code>Atom</code> or <code>AtU8</code> chunk for the function’s name</td>
<td style="text-align:left">Raw</td>
</tr>
<tr>
<td style="text-align:left">Name</td>
<td style="text-align:left">The atom referenced by “Atom Index”</td>
<td style="text-align:left">Derived</td>
</tr>
<tr>
<td style="text-align:left">Arity</td>
<td style="text-align:left">The arity (argument count) of the function</td>
<td style="text-align:left">Raw</td>
</tr>
<tr>
<td style="text-align:left">Label</td>
<td style="text-align:left">Label index in the <code>Code</code> chunk where the function is defined. This label is usually immediately after the <code>func_info</code> operation and before the first pattern match or guard operation.</td>
<td style="text-align:left">Raw</td>
</tr>
</tbody>
</table>
</div><p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/1/1dcb1ee9356771d5a9a6465c9547f125a4593dcb.png" data-download-href="https://forum.elixirforum.com/uploads/default/1dcb1ee9356771d5a9a6465c9547f125a4593dcb" title="ExpT Table" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/2X/1/1dcb1ee9356771d5a9a6465c9547f125a4593dcb.png" alt="ExpT Table" width="511" height="195"><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">ExpT Table</span><span class="informations">511×195 11.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>
<h5><a name="p-69079-impt-32" class="anchor" href="#p-69079-impt-32" aria-label="Heading link" rel="nofollow"></a><code>ImpT</code></h5>
<p>The <code>ImpT</code> chunk is the Import Table.  It <strong>DOES NOT</strong> encode just the Erlang <code>-import</code> attributes or Elixir <code>import</code> macro calls: it tracks any external function or macro called from another module.  <code>call_ext_*</code> operations in the <code>Code</code> chunk don’t store the Module and Function (MF) of the function they will call directly in the bytecode, instead, one of the arguments is an index into the <code>ImpT</code> chunk.   This way, all external calls are normalized into the <code>ImpT</code> chunk instead of being denormalized to the call site.  The arity still appears at the call site to help with checking the argument count.</p>
<h6><a name="p-69079-format-33" class="anchor" href="#p-69079-format-33" aria-label="Heading link" rel="nofollow"></a>Format</h6>
<p>You may notice that <code>erlang.byte_size/1</code> is included in the table.  This is because even BIFs are referenced by MFA and not a pre-assigned number as would be the case for system calls in operating systems like Linux.  BEAM is like an Operation System, but not in all ways.</p>
<h6><a name="p-69079-tab-34" class="anchor" href="#p-69079-tab-34" aria-label="Heading link" rel="nofollow"></a>Tab</h6>
<p>The <code>ImpT</code> tab shows a table with the columns</p>
<div class="md-table">
<table>
<thead>
<tr>
<th style="text-align:left">Column</th>
<th style="text-align:left">Description</th>
<th style="text-align:left">Source</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">Index</td>
<td style="text-align:left">0-based index used by references in the <code>Code</code> chunk.</td>
<td style="text-align:left">Derived</td>
</tr>
<tr>
<td style="text-align:left">Module Atom Index</td>
<td style="text-align:left">Index into the <code>Atom</code> or <code>AtU8</code> chunk for the Module’s name</td>
<td style="text-align:left">Raw</td>
</tr>
<tr>
<td style="text-align:left">Module Atom</td>
<td style="text-align:left">The atom referenced by “Module Atom Index”.</td>
<td style="text-align:left">Derived</td>
</tr>
<tr>
<td style="text-align:left">Function Atom Index</td>
<td style="text-align:left">Index into the <code>Atom</code> or <code>AtU8</code> chunk for the functon’s name</td>
<td style="text-align:left">Raw</td>
</tr>
<tr>
<td style="text-align:left">Function Atom</td>
<td style="text-align:left">The atom referened by “Function Atom Index”.</td>
<td style="text-align:left">Derived</td>
</tr>
</tbody>
</table>
</div><p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/1/147eb248ddbb0a631ae8af910fc58db48344cc0c.png" data-download-href="https://forum.elixirforum.com/uploads/default/147eb248ddbb0a631ae8af910fc58db48344cc0c" title="ImpT Table" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/2X/1/147eb248ddbb0a631ae8af910fc58db48344cc0c.png" alt="ImpT Table" width="690" height="391" data-dominant-color="404344"><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">ImpT Table</span><span class="informations">914×518 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>
<h5><a name="p-69079-litt-35" class="anchor" href="#p-69079-litt-35" aria-label="Heading link" rel="nofollow"></a><code>LitT</code></h5>
<p>The <code>LitT</code> chunk contains literals loaded as arguments in <code>Code</code> chunk.</p>
<h6><a name="p-69079-format-36" class="anchor" href="#p-69079-format-36" aria-label="Heading link" rel="nofollow"></a>Format</h6>
<p>Confusingly, in the <code>Code</code> chunk sometimes the <code>literal(N)</code> term is used to encode integer <code>N</code>, an index into another chunk, or an actual <code>index</code> into the <code>LitT</code>.  How <code>literal</code> terms are handled is completely dependent on the specific operation, so without having outside knowledge about the bytecode operation arguments for BEAM, the best way to figure out if <code>literal</code> terms are an integer or an index is to toggle the various controls in the <code>Code</code> tab to see if <code>literal</code> with no inlining turns into a <code>LitT</code> literal, <code>FunT</code> function reference, <code>ImpT</code> function reference, or integer.</p>
<h6><a name="p-69079-tab-37" class="anchor" href="#p-69079-tab-37" aria-label="Heading link" rel="nofollow"></a>Tab</h6>
<p>The <code>LitT</code> tab shows a table with the columns</p>
<div class="md-table">
<table>
<thead>
<tr>
<th style="text-align:left">Column</th>
<th style="text-align:left">Description</th>
<th style="text-align:left">Source</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">#</td>
<td style="text-align:left">0-based index used by references in the <code>Code</code> chunk.</td>
<td style="text-align:left">Derived</td>
</tr>
<tr>
<td style="text-align:left">Term</td>
<td style="text-align:left">The equivalent of `raw</td>
<td style="text-align:left">&gt; binary_to_term()</td>
</tr>
</tbody>
</table>
</div><p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/e/e0121600f33e80cc890e0cd27cff3cae799c3c01.png" data-download-href="https://forum.elixirforum.com/uploads/default/e0121600f33e80cc890e0cd27cff3cae799c3c01" title="LitT Table" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/2X/e/e0121600f33e80cc890e0cd27cff3cae799c3c01.png" alt="LitT Table" width="690" height="80" data-dominant-color="444749"><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">LitT Table</span><span class="informations">1400×164 24.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>
<h5><a name="p-69079-line-38" class="anchor" href="#p-69079-line-38" aria-label="Heading link" rel="nofollow"></a><code>Line</code></h5>
<p>The <code>Line</code> chunk encodes both the file name and line number for each <code>line(literal(n))</code> operation in the <code>Code</code> chunk.  The <code>n</code> in <code>line(literal(n))</code> is an index in to the Line References table in the <code>Line</code> chunk.  This is used in Phoenix view modules to show where code from templates comes from.</p>
<h6><a name="p-69079-format-39" class="anchor" href="#p-69079-format-39" aria-label="Heading link" rel="nofollow"></a>Format</h6>
<p>The <code>Line</code> chunk is composed of 2 subsections: (1) Line References and (2) File Names.  First there is a header setting up the number of each entry to expect.</p>
<table>
  <thead>
    <tr>
      <th>Offset</th>
      <th>+0</th>
      <th>+1</th>
      <th>+2</th>
      <th>+3</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td colspan="4">emulator version (`unsigned-big-integer`)</td>
    </tr>
    <tr>
      <th>4</th>
      <td colspan="4">flags (`unsigned-big-integer`)</td>
    </tr>
    <tr>
      <th>8</th>
      <td colspan="4">Line Instruction Count (`unsigned-big-integer`)</td>
    </tr>
    <tr>
      <th>12</th>
      <td colspan="4">Line Reference Count (`unsigned-big-integer`)</td>
    </tr>
    <tr>
      <th>16</th>
      <td colspan="4">File Name Count (`unsigned-big-integer`)</td>
    </tr>
  </tbody>
</table>
<p>####### Line References</p>
<p>This uses the Compact Term Format used for the <code>Code</code> chunk.  The format ends up producing <code>{file_name_index, line}</code> pairs using the following algorithm:</p>
<div class="md-table">
<table>
<thead>
<tr>
<th style="text-align:left">Term</th>
<th style="text-align:left">Interpretation</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>atom(n)</code></td>
<td style="text-align:left">Change <code>file_name_index</code> to <code>n</code></td>
</tr>
<tr>
<td style="text-align:left"><code>integer(n)</code></td>
<td style="text-align:left">Add <code>{file_name_index, n}</code> to end of Line References</td>
</tr>
</tbody>
</table>
</div><p>####### File Names</p>
<table>
  <thead>
    <tr>
      <th>Offset</th>
      <th>+0</th>
      <th>+1</th>
      <th>+2</th>
      <th>+3</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td colspan="2">Byte Count (`unsigned-big-integer`)</td>
      <td colspan="2">Bytes</td>
    </tr>
  </tbody>
</table>
<h6><a name="p-69079-tab-40" class="anchor" href="#p-69079-tab-40" aria-label="Heading link" rel="nofollow"></a>Tab</h6>
<p>The <code>Line</code> tab has one subtab for each subsection in the tab.  Each subsection has its own table.</p>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/2/229a3564da1f735c5034e58d2115272be087ec1a.png" data-download-href="https://forum.elixirforum.com/uploads/default/229a3564da1f735c5034e58d2115272be087ec1a" title="Line References Table" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/2X/2/229a3564da1f735c5034e58d2115272be087ec1a.png" alt="Line References Table" width="557" height="648"><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">Line References Table</span><span class="informations">557×648 20.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><br>
<div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/8/8af2de1aa4078957b299e09c32502645836d6ce4.png" data-download-href="https://forum.elixirforum.com/uploads/default/8af2de1aa4078957b299e09c32502645836d6ce4" title="File Names TableTable" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/2X/8/8af2de1aa4078957b299e09c32502645836d6ce4.png" alt="File Names TableTable" width="556" height="201"><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">File Names TableTable</span><span class="informations">556×201 11.4 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>
<h5><a name="p-69079-loct-41" class="anchor" href="#p-69079-loct-41" aria-label="Heading link" rel="nofollow"></a><code>LocT</code></h5>
<p>The <code>LocT</code> chunk is the dual to the <code>ExpT</code> chunk: it contains all private functions and macros.</p>
<h6><a name="p-69079-format-42" class="anchor" href="#p-69079-format-42" aria-label="Heading link" rel="nofollow"></a>Format</h6>
<p>You’ll notice entries like <code>-__struct__/1-fun-0-</code>, starts with <code>-</code> and have a <code>/</code> suffix with <code>fun</code> in it. This naming scheme is used for anonymous functions such as those defined with <code>fn</code> or the capture operator (<code>&amp;</code>) in Elixir.  Much like how macros don’t really exist and use a <code>MACRO-</code> suffix, anonymous functions/lambdas don’t exist, and instead use a distinct naming scheme <code>-&lt;PARENT_FUNCTION&gt;/*fun*</code>.  Unlike <code>MACRO-</code>, which is an Elixir invention, anonymous functions/lambdas really being local named functions with derived names is also done in pure Erlang modules.  Erlang’s anonymous functions are defined with <code>fun</code>, which is where the <code>fun</code> part of the naming scheme comes from.</p>
<h6><a name="p-69079-tab-43" class="anchor" href="#p-69079-tab-43" aria-label="Heading link" rel="nofollow"></a>Tab</h6>
<p>The <code>LocT</code> tab shows a table with the columns</p>
<div class="md-table">
<table>
<thead>
<tr>
<th style="text-align:left">Column</th>
<th style="text-align:left">Description</th>
<th style="text-align:left">Source</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">Atom Index</td>
<td style="text-align:left">Index into the <code>Atom</code> or <code>AtU8</code> chunk for the function’s name</td>
<td style="text-align:left">Raw</td>
</tr>
<tr>
<td style="text-align:left">Name</td>
<td style="text-align:left">The atom referenced by “Atom Index”</td>
<td style="text-align:left">Derived</td>
</tr>
<tr>
<td style="text-align:left">Arity</td>
<td style="text-align:left">The arity (argument count) of the function</td>
<td style="text-align:left">Raw</td>
</tr>
<tr>
<td style="text-align:left">Label</td>
<td style="text-align:left">Label index in the <code>Code</code> chunk where the function is defined. This label is usually immediately after the <code>func_info</code> operation and before the first pattern match or guard operation.</td>
<td style="text-align:left">Raw</td>
</tr>
</tbody>
</table>
</div><p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/0/055eb71879303476f968a674a8135ac3cc0ea416.png" data-download-href="https://forum.elixirforum.com/uploads/default/055eb71879303476f968a674a8135ac3cc0ea416" title="LocT Table" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/2X/0/055eb71879303476f968a674a8135ac3cc0ea416.png" alt="LocT Table" width="595" height="433"><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">LocT Table</span><span class="informations">595×433 23.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>
<h5><a name="p-69079-strt-44" class="anchor" href="#p-69079-strt-44" aria-label="Heading link" rel="nofollow"></a><code>StrT</code></h5>
<p>The <code>StrT</code> chunk contains all Erlang strings (that is, Elixir charlists) used in the <code>Code</code> chunk.</p>
<h6><a name="p-69079-format-45" class="anchor" href="#p-69079-format-45" aria-label="Heading link" rel="nofollow"></a>Format</h6>
<p>The <code>StrT</code> chunk contains a single contiguous pool.  These strings are used for byte code operations like <code>bs_put_string</code>.  Not all strings appear in <code>StrT</code>.  Some strings, including most Elixir strings (Erlang binaries) appear in the <code>LitT</code> chunk that holds literals. <em>I’m not sure how the compiler determines whether to use <code>StrT</code> or <code>LitT</code>.  I think it all depends on the byte code operation.</em></p>
<p>Instead of encoding the start and length of each string in the chunk itself, the start and length for any given string is passed as arguments to the byte code operations in the <code>Code</code> chunk. By doing this, shared substrings can be efficiently encoded in <code>StrT</code>.</p>
<h6><a name="p-69079-tab-46" class="anchor" href="#p-69079-tab-46" aria-label="Heading link" rel="nofollow"></a>Tab</h6>
<p><img src="https://forum.elixirforum.com/uploads/default/original/2X/1/1377a17d61190c802df492840c18716106775931.png" alt="StrT Pool" width="609" height="68"></p>
<p><a href="https://github.com/KronicDeth/intellij-elixir/blob/v7.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="69079" 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/48">Post #47</a>
	                </div>
	            </div>
              <div id="likers-container-69079" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="69079"
                     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 #47"></div>
  </section>
</div>
    <div class="postbit" id="69175" data-post-id="69175">
  <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">
								<p>Wow, that’s an amazing post and a fantastic update!!</p>
<p>I really need to see if I can get intellij running well so as to use it, the java-built IDE is just <em>sooooo</em> laggy at times (nothing to do with the plugin at all, it just does that anywhere/everywhere).  <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="69175" data-batch-url="/posts/batch_likers">
                        2
                      </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/49">Post #48</a>
	                </div>
	            </div>
              <div id="likers-container-69175" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="69175"
                     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 #48"></div>
  </section>
</div>
    <div class="postbit" id="70662" data-post-id="70662">
  <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>The default install of IntelliJ launches the JVM with a max of 750 MB.  (Slack and Chrome normally use gigs of memory, so this isn’t a lot really for an IDE)  It won’t ask you to increase this memory limit until its been stuck garbage collecting for tens of minutes, so usually, it ends up appearing laggy where it’s stuck GCing a lot when close to the limit.</p>
<p>You can turn on a memory usage display in the bottom right status bar:</p>
<ol>
<li>Open Preferences &gt; Appearance &amp; Behavior &gt; Appearance.</li>
<li>Scroll down to Window Options</li>
<li>Check Show memory indicator</li>
</ol>
<p>The <a href="https://www.jetbrains.com/help/idea/status-bar.html" rel="noopener nofollow ugc">docs for IntelliJ</a> explain the status bar in more detail.</p>
<p>You can increase the max allowed memory for the JVM with</p>
<ol>
<li>Click Help &gt; Edit Custom VM Options</li>
<li>Change the <code>-Xmx</code> argument to change the max memory.  <code>m</code> means megabytes, <code>g</code> means gigabytes, so a max memory of 1 gigabyte would be <code>-Xmx1g</code>.</li>
<li>Save the file</li>
<li>Click File &gt; Invalidate Cache / Restart …</li>
<li>Click Just Restart in the dialog</li>
</ol>
<p>The status bar indicator should show the new max memory in the “C of DM” for C of D megabytes used.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="70662" 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/50">Post #49</a>
	                </div>
	            </div>
              <div id="likers-container-70662" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="70662"
                     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 #49"></div>
  </section>
</div>
    <div class="postbit" id="70757" data-post-id="70757">
  <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="KronicDeth" data-post="50" 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/kronicdeth/48/33300_2.png" class="avatar"> KronicDeth:</div>
<blockquote>
<p>The default install of IntelliJ launches the JVM with a max of 750 MB.  (Slack and Chrome normally use gigs of memory, so this isn’t a lot really for an IDE)  It won’t ask you to increase this memory limit until its been stuck garbage collecting for tens of minutes, so usually, it ends up appearing laggy where it’s stuck GCing a lot when close to the limit.</p>
</blockquote>
</aside>
<p>I changed the default allocated memory long ago to 2Gigs just because of those issues in the past.  ^.^</p>
<p>A lot of the lag just seems to be in the GUI itself though, like it can take a second to change tabs for one example of many, it’s just lots and lots and lots of little things that combine to make the overall experience feel ‘slow’.  Eclipse has the same problems.  And it’s the same experience on Windows 10 and multiple linux machines thus far.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="70757" 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/51">Post #50</a>
	                </div>
	            </div>
              <div id="likers-container-70757" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="70757"
                     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 #50"></div>
  </section>
</div>
    <div class="postbit" id="73073" data-post-id="73073">
  <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-73073-version-740-1" class="anchor" href="#p-73073-version-740-1" aria-label="Heading link" rel="nofollow"></a>Version 7.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-73073-thanks-2" class="anchor" href="#p-73073-thanks-2" aria-label="Heading link" rel="nofollow"></a>Thanks</h1>
<ul>
<li>For reporting <code>bcrypt</code> killed the debugger
<ul>
<li>Dominik Guzei (<a href="https://github.com/DominikGuzei" rel="noopener nofollow ugc">@DominikGuzei</a>)</li>
<li><a href="https://github.com/SyedWasiHaider" rel="noopener nofollow ugc">@SyedWasiHaider</a></li>
<li>Alastair Surin (<a href="https://github.com/asurin" rel="noopener nofollow ugc">@asurin</a>)</li>
</ul>
</li>
<li>For reporting <code>lz4</code> and <code>re2</code> killed the debugger
<ul>
<li>Samir Sabri (<a href="https://github.com/hopewise" rel="noopener nofollow ugc">@hopewise</a>)</li>
</ul>
</li>
<li>For reporting <code>asdf</code> SDK incompatibilities and correct configuration
<ul>
<li><a href="https://github.com/vheathen" rel="noopener nofollow ugc">@vheathen</a></li>
<li>César Izurieta (<a href="https://github.com/cesarizu" rel="noopener nofollow ugc">@cesarizu</a>)</li>
<li>Marcos Benatti Lauer (<a href="https://github.com/mbenatti" rel="noopener nofollow ugc">@mbenatti</a>)</li>
<li>Tim Gilbert (<a href="https://github.com/timgilbert" rel="noopener nofollow ugc">@timgilbert</a>)</li>
<li>Kevin Kaland (<a href="https://github.com/wizonesolutions" rel="noopener nofollow ugc">@wizonesolutions</a>)</li>
<li>Rodney Folz (<a href="https://github.com/folz" rel="noopener nofollow ugc">@folz</a>)</li>
<li>Tsuharesu (<a href="https://github.com/tsuharesu" rel="noopener nofollow ugc">@tsuharesu</a>)</li>
<li>Jefferson Queiroz Venerando (<a href="https://github.com/shamanime" rel="noopener nofollow ugc">@shamanime</a>)</li>
<li>Nils Ivanson (<a href="https://github.com/nivanson" rel="noopener nofollow ugc">@nivanson</a>)</li>
<li>Percy Grunwald (<a href="https://github.com/pgrunwald" rel="noopener nofollow ugc">@pgrunwald</a>)</li>
</ul>
</li>
<li>For finally forcing me to need to use ASDF for <a href="https://github.com/GregMefford/presentations/blob/master/2018-02-22_less-pain-embedded-systems-with-elixir-and-nerves/README.md" rel="noopener nofollow ugc">his Nerves training</a>, so I had to install and make it as an SDK <img src="https://forum.elixirforum.com/images/emoji/apple/grinning_face.png?v=15" title=":grinning_face:" class="emoji" alt=":grinning_face:" loading="lazy" width="20" height="20">
<ul>
<li>Greg Mefford (<a href="https://github.com/GregMefford" rel="noopener nofollow ugc">@GregMefford</a>)</li>
</ul>
</li>
</ul>
<h1><a name="p-73073-changelog-3" class="anchor" href="#p-73073-changelog-3" aria-label="Heading link" rel="nofollow"></a>Changelog</h1>
<h2><a name="p-73073-v740-4" class="anchor" href="#p-73073-v740-4" aria-label="Heading link" rel="nofollow"></a>v7.4.0</h2>
<h3><a name="p-73073-enhancements-5" class="anchor" href="#p-73073-enhancements-5" aria-label="Heading link" rel="nofollow"></a>Enhancements</h3>
<ul>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/1036" rel="noopener nofollow ugc">#1036</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a>
<ul>
<li>Clean up debugger
<ul>
<li><code>mix format</code> debugger</li>
<li>Restructure debugger.</li>
<li>Convert IDE-side to Kotlin</li>
</ul>
</li>
<li>Allow files to skip interpreting in the debugger to be configured in Preferences &gt; Build, Execution, Deployment &gt; Debugger &gt; Stepping.  It is recommended to customize these settings instead of using <code>INTELLIJ_ELIXIR_DEBUG_BLACKLIST</code> environment variable.  <code>INTELLIJ_ELIXIR_DEBUG_BLACKLIST</code> should be reserved to additional modules that need to not be interpreted only for specific runs.
<ul>
<li>Ship a set of patterns that excludes Elixir standard library by default and most <code>mix phx.new</code> dependencies, so that debugger boots faster for most users.</li>
</ul>
</li>
<li>Support debugging <code>.eex</code> templates
<ul>
<li>Detect MFAs that refer to template functions in Phoenix view modules derived from <code>.eex</code> template files, to allow stepping through Elixir tags in those templates.</li>
<li>Allow setting breakpoints in <code>.eex</code> files when a <code>.beam</code> file using the template’s relative can be found.  <strong>This means that the Phoenix view module <code>.beam</code> file must exist in <code>_build</code> prior to setting a breakpoint.  Run the Run Configuration once, before debugging to complete the build if setting a breakpoint does not work.</strong>
<ul>
<li><code>.beam</code> files are now indexed by their <code>Line</code> chunk <code>filenames</code> subsection to power this feature.</li>
</ul>
</li>
</ul>
</li>
<li>Cache <code>.beam</code> <code>Beam</code> <code>Cache</code> on <code>VirtualFile</code>.  Cache is invalidated and refreshed on modification of the <code>VirtualFile</code>.  Cache is used for both BEAM Chunks read-only editors and <code>Line</code> chunk file name index.</li>
</ul>
</li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/1037" rel="noopener nofollow ugc">#1037</a> - Each package manager uses a different root path and which directory to pick above the ebins varies by package manager, so document package manager install paths. - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a></li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/1041" rel="noopener nofollow ugc">#1041</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a>
<ul>
<li>Restructure JPS code to remove  prefixes and suffixes in class names that redundant with package names.</li>
<li>Show warnings-as-errors checkbox as <a href="https://github.com/elixir-lang/elixir/issues/3116#issuecomment-87316125" rel="noopener nofollow ugc">original blocker</a> has been fixed for awhile and <code>ProcessAdapter</code> turns warning text into errors that IDE understands.</li>
</ul>
</li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/1045" rel="noopener nofollow ugc">#1045</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a>
<ul>
<li>When importing Mix projects, don’t exclude compiler output from indexing because it is needed to resolve Elixir Line Breakpoints in EEx files.
<ul>
<li>For pre-existing Elixir modules, they will be converted to not exclude compiler output.</li>
</ul>
</li>
</ul>
</li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/1047" rel="noopener nofollow ugc">#1047</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a>
<ul>
<li>Exclude known uninterpretable modules
<ul>
<li><code>Bcrypt.Base</code></li>
<li><code>:erocksdb</code></li>
<li><code>:lz4</code></li>
<li><code>:re2</code></li>
</ul>
</li>
</ul>
</li>
</ul>
<h3><a name="p-73073-bug-fixes-6" class="anchor" href="#p-73073-bug-fixes-6" aria-label="Heading link" rel="nofollow"></a>Bug Fixes</h3>
<ul>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/1036" rel="noopener nofollow ugc">#1036</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a>
<ul>
<li>Turn off <code>dbeug</code> flag when starting <code>IntelliJElixir.DebugServer</code>, which removes the <code>*DBG*</code> statements that kept printing in the ExUnit output when using the debugger.</li>
<li>Fix conversion of Elixir module names to Erlang module names for <code>INTELLIJ_ELIXIR_DEBUG_BLACKLIST</code> environment variable.</li>
<li>Cache <code>null</code> SDK <code>Release</code>, so that when Elixir is configured, but the Erlang path is broken (such as after a <code>brew unlink erlang</code>, the <code>Release</code> calculating using <code>elixir</code></li>
<li>Implement <code>Macro.atomToString</code></li>
<li>Properly render improper lists
<ul>
<li>Show improper list with explicit <code>|</code> for presenation</li>
<li>Children of improper lists show <code>head</code> and <code>tail</code> instead of index.</li>
</ul>
</li>
<li>Show Elixir indices (<code>0</code>-based) instead of Erlang indices (<code>1</code>-based`) for lists and tuples.</li>
</ul>
</li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/1037" rel="noopener nofollow ugc">#1037</a> - Loosen check on the path suffix by looking for only <code>lib</code> and not <code>lib/erlang/lib</code>, so that it works for both Homebrew’s <code>ebin</code> paths and ASDF’s <code>ebin</code> paths. - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a></li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/1041" rel="noopener nofollow ugc">#1041</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a>
<ul>
<li>Remove unused <code>MixBuilder</code> because building with <code>mix</code> is just an option in <code>ElixirBuilder</code>.</li>
<li>Harmonize JPS compile server’s invoking of <code>mix</code> to pattern used in Run Configuration runners.
<ul>
<li>Use <code>mix</code> path from SDK</li>
</ul>
</li>
<li>No longer say the build succeeded when there are obvious <code>mix</code> errors
<ul>
<li>Parse <code>mix compile</code> output for compilation errors and warnings
<ul>
<li>When “warnings-as-errors” is enabled in “Elixir compiler” settings, IDE also shows warnings as errors.</li>
<li>IDE will know build failed if there are errors (or warnings treated as errors) and properly allow rebuild.</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/1045" rel="noopener nofollow ugc">#1045</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a>
<ul>
<li>Group alternatives in <code>erlang_module_name_patterns_to_regex</code> before pinning: I always forget that the <code>|</code> swallows the <code>^</code> and <code>$</code> in regexes.</li>
<li>Reject vs filter accumulation got flipped when switching to <code>Enum.reduce</code> to track rejections.</li>
</ul>
</li>
<li><a href="https://github.com/KronicDeth/intellij-elixir/pull/1047" rel="noopener nofollow ugc">#1047</a> - <a href="https://github.com/KronicDeth" rel="noopener nofollow ugc">@KronicDeth</a>
<ul>
<li>Some modules, like NIF modules, can’t be loaded into the debugger. Individual modules not being debuggable shouldn’t kill the debugger task, so rescue the known error and record it for later debugging of the debugger.</li>
<li>Add <code>:</code> to start of Erlang module names for included debugger excludes</li>
</ul>
</li>
</ul>
<h1><a name="p-73073-readme-updates-7" class="anchor" href="#p-73073-readme-updates-7" aria-label="Heading link" rel="nofollow"></a>README updates</h1>
<h3><a name="p-73073-debugger-8" class="anchor" href="#p-73073-debugger-8" aria-label="Heading link" rel="nofollow"></a>Debugger</h3>
<h4><a name="p-73073-basics-9" class="anchor" href="#p-73073-basics-9" aria-label="Heading link" rel="nofollow"></a>Basics</h4>
<h5><a name="p-73073-excluding-modules-10" class="anchor" href="#p-73073-excluding-modules-10" aria-label="Heading link" rel="nofollow"></a>Excluding Modules</h5>
<p>By default, the debugger will scan all the <a href="https://hexdocs.pm/mix/Mix.Project.html#load_paths/1" rel="noopener nofollow ugc">load paths</a> and <a href="https://hexdocs.pm/mix/Mix.Project.html#build_path/1" rel="noopener nofollow ugc">build path</a> for <code>.beam</code> files and the corresponding modules will be <a href="http://erlang.org/doc/man/int.html#ni-1" rel="nofollow">interpreted</a> which causes the Module’s <a href="http://beam-wisdoms.clau.se/en/latest/indepth-beam-file.html#abst-abstract-syntax-tree" rel="noopener nofollow ugc">Erlang abstract code chunk</a> to be interpreted in Erlang instead of the <a href="#code" rel="nofollow">bytecode chunk</a> being executed in the C parts of the BEAM.  This interpretation is <strong>much</strong> slower than execution, so by default all of the Elixir standard library and the common modules installed in Phoenix projects are excluded from being interpreted when the debugger starts.  The modules can be still be stepped into or have breakpoints explicitly set.</p>
<ol>
<li>Preferences &gt; Build, Execution, Deployment &gt; Debugger &gt; Stepping</li>
<li>Scroll to Elixir</li>
</ol>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/b/bfe9c0b77e5d5403aae971367622d30265bfbbbe.png" data-download-href="https://forum.elixirforum.com/uploads/default/bfe9c0b77e5d5403aae971367622d30265bfbbbe" title="Do Not Step Into The Modules" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/2X/b/bfe9c0b77e5d5403aae971367622d30265bfbbbe.png" alt="Do Not Step Into The Modules" width="675" height="302"><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">Do Not Step Into The Modules</span><span class="informations">675×302 24.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>
<p>You can customize these module patterns as an application setting.</p>
<h6><a name="p-73073-disabling-existing-module-patterns-11" class="anchor" href="#p-73073-disabling-existing-module-patterns-11" aria-label="Heading link" rel="nofollow"></a>Disabling Existing Module Patterns</h6>
<ol>
<li>Preferences &gt; Build, Execution, Deployment &gt; Debugger &gt; Stepping</li>
<li>Scroll to Elixir</li>
<li>Click the Checkbox next to the pattern you want to disable</li>
<li>Click Apply to save or OK to save and close Preferences</li>
</ol>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/a/a148653ec5d1d4101a4bd9851464e683cc6581b4.png" data-download-href="https://forum.elixirforum.com/uploads/default/a148653ec5d1d4101a4bd9851464e683cc6581b4" title="Disable" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/2X/a/a148653ec5d1d4101a4bd9851464e683cc6581b4.png" alt="Disable" width="674" height="309"><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">Disable</span><span class="informations">674×309 24.9 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>
<h6><a name="p-73073-editing-existing-module-patterns-12" class="anchor" href="#p-73073-editing-existing-module-patterns-12" aria-label="Heading link" rel="nofollow"></a>Editing Existing Module Patterns</h6>
<ol>
<li>Preferences &gt; Build, Execution, Deployment &gt; Debugger &gt; Stepping</li>
<li>Scroll to Elixir</li>
<li>Click the pattern text box</li>
<li>Click Apply to save or OK to save and close Preferences</li>
</ol>
<p><img src="https://forum.elixirforum.com/uploads/default/original/2X/8/8f305fc3b6c2500d099b275d79f97baac7db7f23.png" alt="Edit" width="143" height="71"></p>
<h6><a name="p-73073-removing-existing-module-patterns-13" class="anchor" href="#p-73073-removing-existing-module-patterns-13" aria-label="Heading link" rel="nofollow"></a>Removing Existing Module Patterns</h6>
<ol>
<li>Preferences &gt; Build, Execution, Deployment &gt; Debugger &gt; Stepping</li>
<li>Scroll to Elixir</li>
<li>Click the row of the pattern you want to remove</li>
<li>Click the “-” Remove button.</li>
<li>Click Apply to save or OK to save and close Preferences</li>
</ol>
<p><img src="https://forum.elixirforum.com/uploads/default/original/2X/a/a0386d3bddb884e2e230f919734d41a072a6a2fe.png" alt="Remove" width="134" height="73"></p>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/f/fe98c4e2ed0df4acb95b990b630d3b60c63d7c9d.png" data-download-href="https://forum.elixirforum.com/uploads/default/fe98c4e2ed0df4acb95b990b630d3b60c63d7c9d" title="Removed" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/2X/f/fe98c4e2ed0df4acb95b990b630d3b60c63d7c9d.png" alt="Removed" width="677" height="301"><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">Removed</span><span class="informations">677×301 24.8 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>
<h6><a name="p-73073-adding-new-module-patterns-14" class="anchor" href="#p-73073-adding-new-module-patterns-14" aria-label="Heading link" rel="nofollow"></a>Adding New Module Patterns</h6>
<ol>
<li>Preferences &gt; Build, Execution, Deployment &gt; Debugger &gt; Stepping</li>
<li>Scroll to Elixir</li>
<li>Click the “+” Add button</li>
<li>Click the default “*” pattern to edit it</li>
<li>Click Apply to save or OK to save and close Preferences</li>
</ol>
<p><img src="https://forum.elixirforum.com/uploads/default/original/2X/3/3a93e0a54c19affd18e779f6d9063a17ff7b6e51.png" alt="Add" width="111" height="66"></p>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/2/2ea99bf9b3ffd58a79e7949469f30be6f9d76614.png" data-download-href="https://forum.elixirforum.com/uploads/default/2ea99bf9b3ffd58a79e7949469f30be6f9d76614" title="Added" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/2X/2/2ea99bf9b3ffd58a79e7949469f30be6f9d76614.png" alt="Added" width="674" height="302"><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">Added</span><span class="informations">674×302 23.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>
<h5><a name="p-73073-environment-variables-15" class="anchor" href="#p-73073-environment-variables-15" aria-label="Heading link" rel="nofollow"></a>Environment Variables</h5>
<p>If you want to customize the modules to ignore on a per-Run-Configuration basis, you can set an environment variable in the Run Configuration.</p>
<div class="md-table">
<table>
<thead>
<tr>
<th>Variable</th>
<th>Example</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>INTELLIJ_ELIXIR_DEBUG_BLACKLIST</td>
<td>iconv,some</td>
<td>Excluding modules from debugger</td>
</tr>
</tbody>
</table>
</div><p><em>Notice: If you want non <code>Elixir.</code> module in blacklist, write it with: <code>:</code>. This rule applies only to module atoms.</em></p>
<h4><a name="p-73073-breakpoints-16" class="anchor" href="#p-73073-breakpoints-16" aria-label="Heading link" rel="nofollow"></a>Breakpoints</h4>
<h5><a name="p-73073-creating-line-breakpoints-17" class="anchor" href="#p-73073-creating-line-breakpoints-17" aria-label="Heading link" rel="nofollow"></a>Creating Line Breakpoints</h5>
<p>A line breakpoint is a breakpoint assigned to a specific line in the source code.</p>
<p>Line breakpoints can be set on executable lines. Comments, declarations and empty lines are not valid locations for the line breakpoints.  Line break points can be set in <code>.ex</code> and <code>.eex</code> files.</p>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/c/ce4c215fd06f691780b5e5c73d41a4c1c0576942.png" data-download-href="https://forum.elixirforum.com/uploads/default/ce4c215fd06f691780b5e5c73d41a4c1c0576942" title="ex" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/2X/c/ce4c215fd06f691780b5e5c73d41a4c1c0576942.png" alt="ex" width="564" height="381"><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">ex</span><span class="informations">564×381 37.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>
<p><code>.eex</code> line breaks will only work on Elixir code that is used in Phoenix view modules.</p>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/3/35617ce277340939e02a8b325b7bcd1e5a98e9d0.png" data-download-href="https://forum.elixirforum.com/uploads/default/35617ce277340939e02a8b325b7bcd1e5a98e9d0" title="eex" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/optimized/2X/3/35617ce277340939e02a8b325b7bcd1e5a98e9d0_2_690x364.png" alt="eex" width="690" height="364" srcset="https://forum.elixirforum.com/uploads/default/optimized/2X/3/35617ce277340939e02a8b325b7bcd1e5a98e9d0_2_690x364.png, https://forum.elixirforum.com/uploads/default/original/2X/3/35617ce277340939e02a8b325b7bcd1e5a98e9d0.png 1.5x, https://forum.elixirforum.com/uploads/default/original/2X/3/35617ce277340939e02a8b325b7bcd1e5a98e9d0.png 2x" data-dominant-color="36383B"><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">eex</span><span class="informations">806×426 49.2 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><code>.eex</code> breakpoints only work if a <code>.beam</code> file using the template’s relative can be found.  <strong>This means that the Phoenix view module <code>.beam</code> file must exist in <code>_build</code> prior to setting a breakpoint.  Run the Run Configuration once, before debugging to complete the build if setting a breakpoint does not work.</strong></p>
<ol>
<li>Place the caret on the desired line of the source code.</li>
<li>Do one of the following:
<ul>
<li>Click the left gutter area at a line where you want to toggle a breakpoint</li>
<li>Run &gt; Toggle Line Breakpoint</li>
<li><code>Cmd+F8</code></li>
</ul>
</li>
</ol>
<h3><a name="p-73073-buildingcompiling-18" class="anchor" href="#p-73073-buildingcompiling-18" aria-label="Heading link" rel="nofollow"></a>Building/Compiling</h3>
<h4><a name="p-73073-settings-19" class="anchor" href="#p-73073-settings-19" aria-label="Heading link" rel="nofollow"></a>Settings</h4>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/7/7c3e7edc195abc88ed099b24c37b6fa522e4eb29.png" data-download-href="https://forum.elixirforum.com/uploads/default/7c3e7edc195abc88ed099b24c37b6fa522e4eb29" title="" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/optimized/2X/7/7c3e7edc195abc88ed099b24c37b6fa522e4eb29_2_690x320.png" alt="" role="presentation" width="690" height="320" srcset="https://forum.elixirforum.com/uploads/default/optimized/2X/7/7c3e7edc195abc88ed099b24c37b6fa522e4eb29_2_690x320.png, https://forum.elixirforum.com/uploads/default/original/2X/7/7c3e7edc195abc88ed099b24c37b6fa522e4eb29.png 1.5x, https://forum.elixirforum.com/uploads/default/original/2X/7/7c3e7edc195abc88ed099b24c37b6fa522e4eb29.png 2x" data-dominant-color="464A4F"><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">859×399 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>
<ul>
<li>Compile project with mix (use <code>mix compile</code> instead of <code>elixirc</code> directly)</li>
<li>Attach docs (don’t use <code>--no-docs</code> <code>elixirc</code> flag)</li>
<li>Attach debug info (don’t use <code>--no-debug-info</code> <code>elixirc</code> flag)</li>
<li>Warnings as errors (use <code>--warnings-as-errors</code> <code>elixirc</code> flag)</li>
<li>Ignore module conflict (use <code>--ignore-module-conflict</code> <code>elixirc</code> flag)</li>
</ul>
<h4><a name="p-73073-build-messages-20" class="anchor" href="#p-73073-build-messages-20" aria-label="Heading link" rel="nofollow"></a>Build Messages</h4>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/5/582810251cb69eeaba3c30ce3347746baa6e9892.png" data-download-href="https://forum.elixirforum.com/uploads/default/582810251cb69eeaba3c30ce3347746baa6e9892" title="Source" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/2X/5/582810251cb69eeaba3c30ce3347746baa6e9892.png" alt="Source" width="537" height="311"><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">Source</span><span class="informations">537×311 18.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>
<p>If a file has errors and warnings, they are group together in Build Messages under that file.</p>
<p><span alt="Errors and Warnings" class="broken-image" title="This image is broken"><svg class="fa d-icon d-icon-link-slash svg-icon" aria-hidden="true"><use href="#link-slash"></use></svg></span></p>
<h5><a name="p-73073-jump-to-source-21" class="anchor" href="#p-73073-jump-to-source-21" aria-label="Heading link" rel="nofollow"></a>Jump To Source</h5>
<p>You can jump to errors and warnings in the Build Messages</p>
<ol>
<li>
<p>Highlight the error or warning you want to jump to source</p>
</li>
<li>
<p>Do one of the following</p>
<ol>
<li>
<p>Right-Click the error or warning</p>
</li>
<li>
<p>Select Jump to Source from the context menu</p>
<p><img src="https://forum.elixirforum.com/uploads/default/original/2X/5/5124d226c3a92f55f0aa12f696b0d1b72de1efbe.png" alt="Jump to Source" width="524" height="60"></p>
</li>
</ol>
<p>OR</p>
<ol>
<li>Click the error or warning</li>
<li>Press Cmd+Down</li>
</ol>
</li>
</ol>
<p>You can also turn on Autoscroll to Source, which will Jump To Source whenever you Click or select an error or warning.</p>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/e/e04e7219d992dcd42d125cdc37c3ab8a1489f311.png" data-download-href="https://forum.elixirforum.com/uploads/default/e04e7219d992dcd42d125cdc37c3ab8a1489f311" title="Autoscroll to Source" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/2X/e/e04e7219d992dcd42d125cdc37c3ab8a1489f311.png" alt="Autoscroll to Source" width="158" height="213"><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">Autoscroll to Source</span><span class="informations">158×213 5.85 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>
<h5><a name="p-73073-warnings-as-errors-22" class="anchor" href="#p-73073-warnings-as-errors-22" aria-label="Heading link" rel="nofollow"></a>Warnings as Errors</h5>
<p><img src="https://forum.elixirforum.com/uploads/default/original/2X/5/52de3c07f77eec008dc2b02fa45434b087ccffa3.png" alt="Setting" width="162" height="26"></p>
<p>If you enable Warnings as Errors in the settings, then the Warnings will be treated as Errors by <code>elixirc</code> and <code>mix</code> and the Build Messages will show the Warnings as Errors.</p>
<p><img src="https://forum.elixirforum.com/uploads/default/original/2X/3/37ced9671f95780950ba2f8da56df12bd209eccb.png" alt="Messages" width="510" height="92"></p>
<p>If only warnings remain in the source.</p>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/2/22da341301380e9447b7971c20593e893d9ef43e.png" data-download-href="https://forum.elixirforum.com/uploads/default/22da341301380e9447b7971c20593e893d9ef43e" title="Source" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/2X/2/22da341301380e9447b7971c20593e893d9ef43e.png" alt="Source" width="530" height="283"><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">Source</span><span class="informations">530×283 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>
<p>With Warnings as Errors On, all the Warnings will appear as Errors and still fail the build</p>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/f/f45d9c6a35420d9825b808b0bf1f47aadff5ffbe.png" data-download-href="https://forum.elixirforum.com/uploads/default/f45d9c6a35420d9825b808b0bf1f47aadff5ffbe" title="Errors" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/2X/f/f45d9c6a35420d9825b808b0bf1f47aadff5ffbe.png" alt="Errors" width="509" height="119"><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">Errors</span><span class="informations">509×119 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>
<p>With Warnings as Errors Off, the Warnings will appear as Warnings and the build will succeed</p>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/2X/8/8cffcc33ca96985ddebb3111cfaee95e79230a0d.png" data-download-href="https://forum.elixirforum.com/uploads/default/8cffcc33ca96985ddebb3111cfaee95e79230a0d" title="Warnings" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/2X/8/8cffcc33ca96985ddebb3111cfaee95e79230a0d.png" alt="Warnings" width="504" height="126"><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">Warnings</span><span class="informations">504×126 12.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>
<h3><a name="p-73073-sdk-23" class="anchor" href="#p-73073-sdk-23" aria-label="Heading link" rel="nofollow"></a>SDK</h3>
<h4><a name="p-73073-package-manager-install-locations-24" class="anchor" href="#p-73073-package-manager-install-locations-24" aria-label="Heading link" rel="nofollow"></a>Package Manager Install Locations</h4>
<p>When configuring an SDK, if you don’t want to use the suggested SDK home path, you’ll need to know where each package manager puts Elixir and Erlang.</p>
<table>
  <thead>
    <tr>
      <th>Package Manager</th>
      <th>SDK Type</th>
      <th>Directory</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td rowspan="3">
        <a href="https://github.com/asdf-vm/asdf" rel="noopener nofollow ugc">ASDF</a>
      </td>
      <td>Elixir SDK</td>
      <td>
        <code>~/.asdf/installs/elixir/VERSION</code>
      </td>
    </tr>
    <tr>
      <td>Erlang SDK</td>
      <td rowspan="2">
        <code>~/.asdf/installs/erlang/VERSION</code>
      </td>
    </tr>
    <tr>
      <td>Erlang for Elixir SDK</td>
    </tr>
    <tr>
      <td rowspan="3">
        <a href="https://brew.sh/" rel="noopener nofollow ugc">Homebrew</a>
      </td>
      <td>Elixir SDK</td>
      <td>
         <code>/usr/local/Cellar/elixir/VERSION</code>
      </td>
    </tr>
    <tr>
      <td>Erlang SDK</td>
      <td rowspan="2">
        <code>/usr/local/Cellar/erlang/VERSION/lib/erlang</code>
      </td>
    </tr>
    <tr>
      <td>Erlang for Elixir SDK</td>
    </tr>
    <tr>
      <td rowspan="3">
        <a href="https://nixos.org/nix/download.html" rel="noopener nofollow ugc">Nix</a>
      </td>
      <td>Elixir SDK</td>
      <td>
         <code>/nix/store/SHA256-elixir-VERSION/lib/elixir</code>
      </td>
    </tr>
    <tr>
      <td>Erlang SDK</td>
      <td rowspan="2">
        <code>/nix/store/SHA256-erlang-VERSION/lib/erlang</code>
      </td>
    </tr>
    <tr>
      <td>Erlang for Elixir SDK</td>
    </tr>
  </tbody>
</table>
<p>If you can can’t see hidden files, such as <code>.asdf</code> in your home directory (<code>~</code>), or system directories, such as <code>/usr</code>, you will need to enable Show Hidden Files in the Home Path dialog.</p>
<p>If your dialog looks like this, click the Show Hidden Files button</p>
<p><img src="https://forum.elixirforum.com/uploads/default/original/2X/a/ac06581916ba0dac675863daf1990f89105c49ee.png" alt="IntelliJ" width="324" height="63"></p>
<p>If you’re using the macOS native File Picker, use the keyboard shortcut ⌘⇧. (Command+Shift+Period).</p>
<p><a href="https://github.com/KronicDeth/intellij-elixir/blob/v7.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="73073" 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/52">Post #51</a>
	                </div>
	            </div>
              <div id="likers-container-73073" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="73073"
                     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 #51"></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=6">Load more posts</a>
</div></template></turbo-stream>