@KronicDeth KronicDeth released this Oct 26, 2018 · 72 commits to master since this release

Assets 3


  • For reporting the new for a runWriteAction when adding new JDKs in Small IDES
  • For reporting that a modular element could become invalid during completion and not have a valid containing file.
  • For reporting that :crypto wasn't in the default module filters even though its NIFs can't be interpreted.
  • For reporting that the redefinition of defmodule in distillery broke the GoTo Symbol contributor.
  • For reporting "Test framework quit unexpectedly" being reported instead of showing the compilation errors during tests, which turned out to be a deprecation in OpenAPI and a change in ExUnit output in Elixir 1.7 I missed.
  • For reporting that Elixir was bigger than Erlang, or at least the icons in IntelliJ 2018.3 EAP :trollface:.
  • For reporting poor error message when removing module filters
  • For reporting that I can't make the fact that there is no use call a cache dependency
  • For reporting that completion with nested modules was broken
  • For reporting that alias __MODULE__, as: Mod did not work for resolving references through Mod.




  • #1272 - @KronicDeth
    • Go To Symbol and completion will only resolve in project source unless non-project sources are turned on.
      • deps are properly marked as Libraries and no longer count as being in the project scope for the Go To tools.
      • In umbrella projects, when in_umbrella is used, the Project Module for each apps/#{APP_NAME} will be marked a dependency,
      • Library and Modules are properly connected as dependencies, so that only declared dependencies will resolve, lessening false completions and declarations when different OTP app share common Module or function names.
    • deps and the _build/#{MIX_ENV}/lib/#{DEP_NAME} will be marked as Excluded, so that Libraries appear in External Libraries at the bottom of the Project Pane.
  • #1275 - @KronicDeth
    • Go To Class action (Cmd+O) to go to modules separately from all functions as would happen with Go To Symbols (Alt+Cmd+O).
      • New ModuleName index keeps track of only the names of modulars:

        • defmodule
        • defimpl
        • defprotocol

        It is used to power gotoClassContributor for Go To Class action.

  • #1280 - Handle commit and override for Mix.Dep. - @KronicDeth
  • #1283 - Add .eex to .ex and .exs for accepted file extensions used to hyperlink files in stacktraces. - @KronicDeth
  • #1285 - @KronicDeth
    • Resolve unaliased name when using alias __MODULE__, as: Mod
    • Resolve usage of Mod in alias __MODULE__, as Mod
      1. Mod
      2. __MODULE__ in alias __MODULE__
      3. defmodule MyModule that is enclosing __MODULE__.
    • Disable ProcessCanceledException for runIde gradle task, to allow for easier manual testing of completion and Go To actions during development.
    • Completion of functions in current module when using Mod. after alias __MODULE__, as: Mod.
    • Show more context for alias calls in presentations, like "Choose Declaration" pop up for Go To Declaration.
      • Show resolved __MODULE__ name (alias MyModule) when using alias __MODULE__.
      • Show full alias MyModule, as: Mod when listing Mod in alias __MODULE__, as Mod.
  • #1293 - @KronicDeth
    • Exclude common directories when importing projects
      • cover for test coverage
      • doc for ex_doc
      • logs for log files
      • assets/node_modules/phoenix for phoenix
      • assets/node_modules/phoenix_html for phoenix_html
    • Setup Libraries and Module dependencies when importing projects from Mix.
  • #1299 - Regression test for #1270. - @KronicDeth
  • #1313 - @KronicDeth
    • Update gradle wrapper to 3.5 to allow for environment variable overrides
    • Setup datetime based pre-release versioning to ensure that correct version of pre-release plugin is used when testing Install Plugin From Disk.
  • #1318 - @KronicDeth

Bug Fixes

  • #1277 - Don't include null useCall as __MODULE__ dependency. - @KronicDeth
  • #1279 - @KronicDeth
    • Wrap LibraryTable#removeLibrary in write action.
    • Wrap Library#modifiableModule#commit in write action.
  • #1282 - Check if Mix.Dep has already been seen to prevent recursive loops. - @KronicDeth
  • #1287 - @KronicDeth
    • More closely match ExUnit.CliFormatter output in Test Runner.
      • Don't inspect ExUnit failure reason as ##teamcity message.
      • Add captured logs to failure
      • Colorize test failures - including diff colorization
    • .formatter.exs input globs would not match file paths because it was default that needed lib on top and not version-dependent paths used in resources/exunit.
  • #1291 - @KronicDeth
    • Ignore branch and hex options when finding path of Mix.Dep
    • Map Elixir 1.7 :excluded and :skipped (added in elixir-lang/elixir#7245) to testIgnored teamcity message, thereby restoring ignored test counts and markers from Elixir 1.6.
  • #1293 - @KronicDeth
    • When the entire deps directory has updated sync the children deps directories and then sync all modules instead of syncing them after each dep.
    • For an unknown reason, when sync occurs at initComponent time in DepsWatcher or mix.Watcher, the child directories of the project basedDir aren't shown in the Project Pane until a change is applied in Project Structure.
    • Use invokeAndWait instead of invokeLater to ensure order of syncs.
  • #1299 - When finding a defmodule, check that it is an ancestor of the entrance of the ResolveState, so that nested sibling modules are not scanned for potential call definition clauses, but only the outer module of the entrance. - @KronicDeth
  • #1300 - Improve error message for org.elixir_lang.debugger.settings.stepping.module_filter.editor.table.Model.getValueAt, so we can detect if there is an off-by-1 error. - @KronicDeth
  • #1304 - Remove @2x and @3x SVG icons that render wrong size in 2018.3 EAP. - @KronicDeth
  • #1305 - @KronicDeth
    • Fix unused variables in TeamCityExUnitFormatting
      • reason was completely unused.
      • details should have been used.
  • #1306 - @KronicDeth
    • flushBufferBeforeTerminating was deprecated and in newer IntelliJ the call to processStatuses does not occur unless flushBufferOnProcessTermination is also overridden.
    • Treat == Compilation error in STDOUT as ERROR for ExUnit reporter
    • Convert (CompileError) of a test file to test failure. The "Test framework quit unexpectedly" is converted to a failed run with a single test with the compilation error as the failure message.
  • #1308 - @KronicDeth
    • Don't treat redefinition of defmodule macro as module definition (as occurs in @bitwalker's distillery's Mix.Tasks.Release.Init.MixMock
      • Bump AllName VERSION to re-index and drop bad call definition head from #1301.
  • #1310 - Don't log compilation errors as test failures unless a test has started. Test name being called mix test does not work, so log those compilation errors as normal build messages instead. - @KronicDeth
  • #1311 - Don't interpret :crypto by default: :crypto includes NIFs that can't be reloaded and so kills the debugger. - @KronicDeth
  • #1312 - Protect from null containingFile for modular names during completion. - @KronicDeth
  • #1313 - Wrap syncPublisher(JDK_TABLE_TOPIC) in invokeLater runWriteAction. - @KronicDeth

Incompatible Changes

  • #1272 - @KronicDeth
    • Dependencies are now counted as external to the project, so the Go To tools, like Go To Symbol will no longer include matches for both project sources and dependencies sources together, instead they will follow the more JetBrains native behavior
      • Project sources will be shown by default
      • If there are no project matches, dependencies will be shown instead.
      • If you want to include dependency (non-project) matches, you can check the box or hit Cmd+O.
  • #1293 - Modules and Libraries won't be automatically setup when a project or module is opened, but instead only when apps or deps directories or subdirectories change. - @KronicDeth

README Updates


Canary releases

Builds on master will produce pre-release builds of format NEXT_VERSION-pre+YYYYMMDDHHMMSS.

Inside IDE using JetBrains repository

You will need to add the canary repository once to your IDE:

  1. Preferences
  2. Plugins
  3. Browse Repositories
  4. Manage Repositories
  5. Click +
  6. Enter the IntelliJ Elixir canary URL: https://plugins.jetbrains.com/plugins/list?channel=canary&pluginId=7522
  7. Click OK
  8. Click OK to close the Custom Plugin Repositories dialog.

With the canary repository setup:

  1. Preferences
  2. Plugins
  3. Browse Repositories
  4. Select Elixir
  5. Install plugin
  6. Apply
  7. Restart the IDE

Inside IDE using Github releases

In browser
  1. Go to releases.
  2. Download the latest pre-release zip.
  1. Preferences
  2. Plugins
  3. Install plugin from disk...
  4. Select the downloaded zip.
  5. Apply
  6. Restart the IDE.