Skip to content

Commit ffc1ed0

Browse files
authored
Merge pull request #3768 from joshuataylor/feature/v23_changelog
Release 23.0.0 (WIP, DO NOT MERGE)
2 parents 6cdc1c3 + 9720eeb commit ffc1ed0

File tree

4 files changed

+261
-1
lines changed

4 files changed

+261
-1
lines changed

CHANGELOG.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,31 @@
11
# Changelog
22

3+
## v23.0.0
4+
5+
### Enhancements
6+
* WSL Support - [@sh41](https://github.com/sh41) - see [release announcement](https://github.com/KronicDeth/intellij-elixir/releases/tag/v23.0.0) for full details!
7+
* Windows Subsystem for Linux support enabling Elixir development in WSL from Windows JetBrains IDEs. Originally submitted as [#3749](https://github.com/KronicDeth/intellij-elixir/pull/3749), broken into 7 stacked PRs for review. Resolves [#1384](https://github.com/KronicDeth/intellij-elixir/issues/1384), [#1911](https://github.com/KronicDeth/intellij-elixir/issues/1911), [#2499](https://github.com/KronicDeth/intellij-elixir/issues/2499), [#3470](https://github.com/KronicDeth/intellij-elixir/issues/3470), [#3674](https://github.com/KronicDeth/intellij-elixir/issues/3674), [#3746](https://github.com/KronicDeth/intellij-elixir/issues/3746). May also help with [#3659](https://github.com/KronicDeth/intellij-elixir/issues/3659), [#3716](https://github.com/KronicDeth/intellij-elixir/issues/3716), [#3715](https://github.com/KronicDeth/intellij-elixir/issues/3715). See the [README WSL section](https://github.com/KronicDeth/intellij-elixir?tab=readme-ov-file#windows-subsystem-for-linux-wsl-support) for setup instructions.
8+
* SDK discovery for Elixir and Erlang inside WSL distributions (asdf, mise, kerl, kiex, Homebrew, Nix).
9+
* WSL path conversion supporting both `\\wsl$\` and `\\wsl.localhost\` UNC path formats.
10+
* All run configurations work with WSL: Mix tasks, IEx, ExUnit, ESpec, Distillery, external tools.
11+
* WSL-safe process handling with graceful BEAM termination across the WSL boundary.
12+
* WSL-aware SDK naming in UI and status bar widget.
13+
* SDK settings improvements for small-IDE compatibility (RubyMine, WebStorm, etc.).
14+
* [#3753](https://github.com/KronicDeth/intellij-elixir/pull/3753) - [@sh41](https://github.com/sh41)
15+
* Windows development infrastructure: platform-aware build services, Gradle tasks, CI caching (~4.5 GB fork-safe cache), and updated CONTRIBUTING.md.
16+
* [#3757](https://github.com/KronicDeth/intellij-elixir/pull/3757) - [@sh41](https://github.com/sh41)
17+
* Mix dependency health checks on project open with install action and notifications via shared MixTaskRunner.
18+
* Faster and more robust Mix project import with pre-scan of OTP apps off EDT.
19+
* [#3759](https://github.com/KronicDeth/intellij-elixir/pull/3759) - [@sh41](https://github.com/sh41)
20+
* IntelliJ IDE Starter-based UI test infrastructure for automated IDE testing.
21+
22+
### Bug Fixes
23+
* [#3761](https://github.com/KronicDeth/intellij-elixir/pull/3761) - [@sh41](https://github.com/sh41)
24+
* Fix deadlock when `/deps` directory is deleted while the deps watcher is active.
25+
* Fix JPS Builder module name handling (broken since September 2024).
26+
* [#3765](https://github.com/KronicDeth/intellij-elixir/pull/3765) - [@sh41](https://github.com/sh41)
27+
* Fix false inspection warnings in `~r` regex sigils containing interpolated variables.
28+
329
## v22.0.0
430

531
### Breaking changes

RELEASE_v23.0.0.md

Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
# v23.0.0
2+
3+
v23.0.0 brings a commonly requested feature for those using Windows -- WSL support (!!!).
4+
5+
Windows users can now develop Elixir projects hosted inside WSL directly from their JetBrains IDE. This closes issues dating back to 2018!
6+
7+
Also, "funnily" enough, 2025.3 broke quite a few features with WSL when @sh41 was working on it, and was fixed in [2025.3.1.1](https://youtrack.jetbrains.com/articles/IDEA-A-2100662602/IntelliJ-IDEA-2025.3.1.1-253.29346.240-build-Release-Notes).
8+
9+
This release also includes fixes for a bunch of other various issues, such as a deps watcher deadlock, broken JPS Builder module names, and false warnings in regex sigils with interpolation.
10+
11+
## v23.0.0 , thanks to @sh41!
12+
13+
This release is entirely the work of one person:
14+
15+
- [sh41 (Steve Hall)](https://github.com/sh41) -- @sh41 submitted the original [WSL support PR (#3749)](https://github.com/KronicDeth/intellij-elixir/pull/3749) as a 63-commit "let's fix WSL" proof of concept, then patiently broke it into 7 PRs for review.
16+
17+
Beyond WSL itself, @sh41 fixed a deps watcher deadlock, a JPS Builder regression, added Mix dependency health checks, built out Windows dev infrastructure, added UI test infrastructure, updated documentation, and fixed regex sigil inspection warnings.
18+
19+
Thank you, @sh41 for the incredible work!
20+
21+
## WSL Support
22+
23+
The headline feature of this release.
24+
25+
If you're developing Elixir on Windows using WSL, the plugin should hopefully be a bit better for you - if you find anything weird, please [submit an issue](https://github.com/KronicDeth/intellij-elixir/issues/new/choose).
26+
27+
The work was split from [#3749] into these PRs:
28+
29+
- [#3753](https://github.com/KronicDeth/intellij-elixir/pull/3753)
30+
- [#3754](https://github.com/KronicDeth/intellij-elixir/pull/3754)
31+
- [#3755](https://github.com/KronicDeth/intellij-elixir/pull/3755)
32+
- [#3756](https://github.com/KronicDeth/intellij-elixir/pull/3756)
33+
- [#3757](https://github.com/KronicDeth/intellij-elixir/pull/3757)
34+
- [#3758](https://github.com/KronicDeth/intellij-elixir/pull/3758)
35+
- [#3759](https://github.com/KronicDeth/intellij-elixir/pull/3759)
36+
37+
This resolves the following issues:
38+
39+
- [#1384](https://github.com/KronicDeth/intellij-elixir/issues/1384) - No WSL support (2018)
40+
- [#1911](https://github.com/KronicDeth/intellij-elixir/issues/1911) - Cannot add Erlang/Elixir SDK using Windows WSL
41+
- [#2499](https://github.com/KronicDeth/intellij-elixir/issues/2499) - WSL: "Selected directory is not a valid home for SDK"
42+
- [#3470](https://github.com/KronicDeth/intellij-elixir/issues/3470) - Cannot set SDK for Erlang and Elixir from WSL
43+
- [#3674](https://github.com/KronicDeth/intellij-elixir/issues/3674) - Cannot set Elixir SDK when opening project from WSL2 folder
44+
- [#3746](https://github.com/KronicDeth/intellij-elixir/issues/3746) - MIX_HOME points to wrong directory with asdf/mise
45+
46+
This may also help with:
47+
48+
- [#3659](https://github.com/KronicDeth/intellij-elixir/issues/3659) - SDK setup issues (improved SDK validation)
49+
- [#3716](https://github.com/KronicDeth/intellij-elixir/issues/3716) - SDK not being applied (improved persistence)
50+
- [#3715](https://github.com/KronicDeth/intellij-elixir/issues/3715) - Can't add Erlang SDK (better error handling)
51+
52+
> It should be noted that @sh41 works on Windows, and I (Josh) use Linux/Mac.
53+
54+
### What works
55+
56+
> Please see the [Windows Subsystem for Linux (WSL) Support in the README](https://github.com/KronicDeth/intellij-elixir?tab=readme-ov-file#windows-subsystem-for-linux-wsl-support).
57+
58+
- SDK detection and configuration for Elixir/Erlang in WSL (asdf, mise, kerl, kiex)
59+
- All run configurations (Mix, ExUnit, ESpec, Elixir, IEx)
60+
- External tools (Credo, Dialyzer, Mix Format)
61+
- Project creation wizard with WSL SDKs
62+
- Path conversion (Windows UNC paths <-> WSL POSIX paths)
63+
- Graceful BEAM process termination (double SIGINT)
64+
- Auto-assignment of project SDK when the first Elixir SDK is created
65+
- Proper `MIX_HOME` detection for mise/asdf version managers
66+
67+
### Known Limitations
68+
69+
> [!WARNING]
70+
> - JPS Builder does not support WSL -- use Mix run configurations to compile instead.
71+
> - SDK setup tip: Click "OK" directly after configuring SDKs. Avoid clicking "Apply" then "OK", as this can cause persistence issues.
72+
> - Performance: WSL is slower than native Linux. This is a WSL limitation, not a plugin issue.
73+
74+
### Tested Environment
75+
76+
Tested on Windows 11 with Ubuntu 24.04 on WSL2, with Elixir/Erlang installed via both asdf and mise. There are many possible combinations of Windows versions, WSL distributions, and version managers -- we'd appreciate community testing and bug reports for configurations we haven't covered.
77+
78+
### SDK Discovery
79+
80+
The plugin can now discover Elixir and Erlang SDKs installed inside your WSL distributions. All the version managers you'd expect are supported:
81+
82+
- asdf - `~/.asdf/installs/`
83+
- mise - mise install directories
84+
- kerl - Erlang installations via kerl
85+
- kiex - Elixir installations via kiex
86+
- Homebrew (Linuxbrew) - SDKs installed via Homebrew on Linux
87+
- Nix - SDKs in Nix store paths
88+
89+
SDK discovery has been consolidated into a single `SdkHomeScan` component that works across both native and WSL environments, so the same scanning logic applies everywhere.
90+
91+
During SDK setup, you can choose which WSL distribution to scan. Once an SDK is created, the plugin auto-assigns it as the project SDK if it's the first Elixir SDK configured. SDK persistence has been fixed to resolve workspace model mismatches that previously caused SDKs to "disappear" after restarting the IDE.
92+
93+
### Path Conversion
94+
95+
Transparent path conversion between Windows UNC paths and WSL Linux paths. Both `\\wsl$\` and `\\wsl.localhost\` formats are handled. You can open a project from a WSL network share and everything just works -- file paths are correctly resolved when communicating with WSL-hosted tooling.
96+
97+
### Run Configurations
98+
99+
All run configurations work with WSL-hosted SDKs and projects:
100+
101+
- Mix tasks (`mix compile`, `mix format`, custom tasks)
102+
- IEx sessions
103+
- ExUnit tests (with clickable file/line links back to the IDE)
104+
- ESpec tests
105+
- Distillery releases
106+
- External tools (Credo, Dialyzer, Mix Format)
107+
- Project creation wizard with WSL SDKs
108+
109+
All run configurations have been migrated to extend a new `WslSafeCommandLineState` base class. Test frameworks share a common `TestRunnerCommandLineState`. New WSL-aware command line classes (`WslAwareCommandLine`, `WslAwarePtyCommandLine`) handle path translation in command arguments, environment variables, and working directories behind the scenes. `ColoredProcessHandler` has been replaced with a custom `ElixirProcessHandler` across all configurations.
110+
111+
### Process Handling
112+
113+
Processes running inside WSL cannot be signaled directly from Windows, so dedicated handling was needed. The BEAM VM requires a double SIGINT to terminate gracefully (rather than SIGKILL), and this doesn't work across the WSL boundary with standard IntelliJ process handling.
114+
115+
- DoubleSignalTerminator - Sends SIGINT twice to gracefully shut down the BEAM VM, working correctly across the WSL boundary
116+
- ElixirProcessHandler - WSL-safe process handler with proper state tracking, replacing `ColoredProcessHandler`
117+
- CommandLineLogging - Diagnostic logging for command-line construction to aid troubleshooting when things go wrong
118+
119+
### WSL-aware SDK UI
120+
121+
SDKs from WSL distributions are clearly labeled in the UI and status bar widget, so you can tell at a glance whether you're looking at a native Windows SDK or a WSL one. The SDK selection flow is WSL-aware and works in small IDEs (RubyMine, WebStorm, etc.) that don't have the full "Project Structure" dialog.
122+
123+
## Mix Dependency Health Checks
124+
125+
When you open a project, the plugin now checks whether Mix dependencies are installed. If they're missing or stale, you'll get a notification with an action to run `mix deps.get`. This works for both native and WSL-hosted projects via a shared `MixTaskRunner`.
126+
127+
The Mix project import flow is also faster and more robust -- OTP apps are pre-scanned off the EDT, and results are reused in the import wizard.
128+
129+
## Bug Fixes
130+
131+
### Deps Watcher Deadlock ([#3761](https://github.com/KronicDeth/intellij-elixir/pull/3761))
132+
133+
Fixed a deadlock that occurred when the `/deps` directory was deleted while the deps watcher was active. This also fixes JPS Builder module name handling that had been broken since September 2025.
134+
135+
### Regex Sigil Interpolation ([#3765](https://github.com/KronicDeth/intellij-elixir/pull/3765))
136+
137+
Fixed false inspection warnings in `~r` regex sigils containing interpolated variables (e.g., `~r/#{var}/`). When the `~H` sigil injection feature is enabled, the regex inspection engine was seeing the interpolation syntax and complaining. Interpolations are now stripped before passing the regex to the IDE's inspection engine.
138+
139+
## Infrastructure
140+
141+
Some behind the scenes features, which is really nice!
142+
143+
- Windows development - Platform-aware build services, Gradle tasks, and run configurations for developing the plugin on Windows. Updated `CONTRIBUTING.md` with Windows setup instructions.
144+
- CI improvements - Fork-safe Gradle caching (~4.5 GB cache) to reduce Maven dependency downloads, Maven Central access diagnostics.
145+
- Experimental UI test infrastructure - IntelliJ IDE Starter-based UI tests under `testUI/` for automated IDE testing, including Ultimate-only tests for license activation and project import flows.
146+
- Documentation - README updated with WSL setup instructions, configuration steps, and troubleshooting guidance.
147+
148+
## Installation steps
149+
150+
Download the `Elixir-23.0.0.zip` file from below, under `Assets`.
151+
152+
> [!TIP]
153+
> Please refer to the [Install plugin from disk](https://www.jetbrains.com/help/idea/managing-plugins.html#install_plugin_from_disk) JetBrains documentation for how to install plugins manually.
154+
155+
1. Ensure your IDE is 2025.3 or above.
156+
2. Open `Settings` -> `Plugins`.
157+
3. Click the cog icon and select `Install Plugin from Disk`.
158+
4. Select where the plugin `.zip` was downloaded and install it.
159+
5. Ensure the plugin is version 23.0.0.
160+
6. Click `OK` to close the plugin window and reload the IDE.

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
# --- Plugin Metadata ---
77
pluginGroup=org.elixir_lang
88
pluginName=Elixir
9-
pluginVersion=22.0.1
9+
pluginVersion=23.0.0
1010
pluginRepositoryUrl=https://github.com/KronicDeth/intellij-elixir/
1111
vendorName=Elle Imhoff
1212
vendorEmail=Kronic.Deth@gmail.com

resources/META-INF/changelog.html

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,80 @@
11
<html>
22
<body>
33

4+
<h1>v23.0.0</h1>
5+
<ul>
6+
<li>
7+
<p>Enhancements</p>
8+
<ul>
9+
<li>
10+
WSL Support - <a href="https://github.com/sh41">@sh41</a> - See <a href="https://github.com/KronicDeth/intellij-elixir/releases/tag/v23.0.0">release announcement</a> for full details!
11+
12+
<ul>
13+
<li>
14+
Windows Subsystem for Linux support enabling Elixir development in WSL from Windows JetBrains IDEs.
15+
Originally submitted as <a href="https://github.com/KronicDeth/intellij-elixir/pull/3749">#3749</a>, broken into 7 stacked PRs for review.
16+
Resolves
17+
<a href="https://github.com/KronicDeth/intellij-elixir/issues/1384">#1384</a>,
18+
<a href="https://github.com/KronicDeth/intellij-elixir/issues/1911">#1911</a>,
19+
<a href="https://github.com/KronicDeth/intellij-elixir/issues/2499">#2499</a>,
20+
<a href="https://github.com/KronicDeth/intellij-elixir/issues/3470">#3470</a>,
21+
<a href="https://github.com/KronicDeth/intellij-elixir/issues/3674">#3674</a>,
22+
<a href="https://github.com/KronicDeth/intellij-elixir/issues/3746">#3746</a>.
23+
May also help with
24+
<a href="https://github.com/KronicDeth/intellij-elixir/issues/3659">#3659</a>,
25+
<a href="https://github.com/KronicDeth/intellij-elixir/issues/3716">#3716</a>,
26+
<a href="https://github.com/KronicDeth/intellij-elixir/issues/3715">#3715</a>.
27+
See the <a href="https://github.com/KronicDeth/intellij-elixir?tab=readme-ov-file#windows-subsystem-for-linux-wsl-support">README WSL section</a> for setup instructions.
28+
</li>
29+
<li>SDK discovery for Elixir and Erlang inside WSL distributions (asdf, mise, kerl, kiex, Homebrew, Nix).</li>
30+
<li>WSL path conversion supporting both <code>\\wsl$\</code> and <code>\\wsl.localhost\</code> UNC path formats.</li>
31+
<li>All run configurations work with WSL: Mix tasks, IEx, ExUnit, ESpec, Distillery, external tools.</li>
32+
<li>WSL-safe process handling with graceful BEAM termination across the WSL boundary.</li>
33+
<li>WSL-aware SDK naming in UI and status bar widget.</li>
34+
<li>SDK settings improvements for small-IDE compatibility (RubyMine, WebStorm, etc.).</li>
35+
</ul>
36+
</li>
37+
<li>
38+
<a href="https://github.com/KronicDeth/intellij-elixir/pull/3753">#3753</a> - <a href="https://github.com/sh41">@sh41</a>
39+
<ul>
40+
<li>Windows development infrastructure: platform-aware build services, Gradle tasks, CI caching (~4.5 GB fork-safe cache), and updated CONTRIBUTING.md.</li>
41+
</ul>
42+
</li>
43+
<li>
44+
<a href="https://github.com/KronicDeth/intellij-elixir/pull/3757">#3757</a> - <a href="https://github.com/sh41">@sh41</a>
45+
<ul>
46+
<li>Mix dependency health checks on project open with install action and notifications via shared MixTaskRunner.</li>
47+
<li>Faster and more robust Mix project import with pre-scan of OTP apps off EDT.</li>
48+
</ul>
49+
</li>
50+
<li>
51+
<a href="https://github.com/KronicDeth/intellij-elixir/pull/3759">#3759</a> - <a href="https://github.com/sh41">@sh41</a>
52+
<ul>
53+
<li>IntelliJ IDE Starter-based UI test infrastructure for automated IDE testing.</li>
54+
</ul>
55+
</li>
56+
</ul>
57+
</li>
58+
<li>
59+
<p>Bug Fixes</p>
60+
<ul>
61+
<li>
62+
<a href="https://github.com/KronicDeth/intellij-elixir/pull/3761">#3761</a> - <a href="https://github.com/sh41">@sh41</a>
63+
<ul>
64+
<li>Fix deadlock when <code>/deps</code> directory is deleted while the deps watcher is active.</li>
65+
<li>Fix JPS Builder module name handling (broken since September 2024).</li>
66+
</ul>
67+
</li>
68+
<li>
69+
<a href="https://github.com/KronicDeth/intellij-elixir/pull/3765">#3765</a> - <a href="https://github.com/sh41">@sh41</a>
70+
<ul>
71+
<li>Fix false inspection warnings in <code>~r</code> regex sigils containing interpolated variables.</li>
72+
</ul>
73+
</li>
74+
</ul>
75+
</li>
76+
</ul>
77+
478
<h1>v22.0.0</h1>
579
<ul>
680
<li>

0 commit comments

Comments
 (0)