Conversation
fccf784 to
4bffe9b
Compare
| ## Enable deployment without epmd | ||
| ## (requires changing both vm.args and remote.vm.args) | ||
| -epmd_module Elixir.XPForge.EPMD | ||
| -start_epmd false -dist_listen false |
There was a problem hiding this comment.
I don't think we need the -dist_listen false anymore
There was a problem hiding this comment.
Yeah, this is a leftover of me splitting hairs
Are you seeing this in tests or when you actually put it up? |
|
@mhanberg both in tests and when building a release, I'm getting this error: |
What stands out to me is that the module name is not namespaced. |
| require Logger | ||
|
|
||
| def init(%Project{} = project, document_store_entropy, app_configs) do | ||
| Application.put_env(:kernel, :epmd_module, Forge.EPMD, persistent: true) |
There was a problem hiding this comment.
Do you know why this is necessary?
There was a problem hiding this comment.
I't not or it should not be, I'm trying out things from the Livebook codebase
It seems like the vm tries to find the EPMD module before loading the code paths provided via -pa
Here in particular I was trying to not specify the epmd module with erl flags and instead try to change the epmd module after the engine node starts. This line wasn't reached because the rpc command to bootstrap didn't get through, but this in the -e flag doesn't help either
Ah, that log is from running tests, where namespacing doesn't run |
4bffe9b to
bb5c93b
Compare
|
I can reproduce the same issues on a barebones mix project: https://github.com/doorgan/epmdless It does partially work if I follow @josevalim's example and run |
|
I haven't researched further to validate and find a solution, but I believe the reason this is happening in the engine but not in expert is because expert is started as a release, which i believe by default loads all modules before the app starts. Normal Relevant section from the release docs at https://hexdocs.pm/elixir/releases.html#operating-system-scripts |
|
I can take a look later but in Livebook we don't start the node in the release, we explicitly call |
a4d4585 to
d3db3c4
Compare
d3db3c4 to
ab64607
Compare
|
@josevalim thanks for all the help! This PR is now ready for testing and review |
| (cd "apps/$proj" && elixir --erl "-start_epmd false -epmd_module Elixir.Forge.EPMD" -S mix {{args}}) | ||
| ;; | ||
| engine) | ||
| (cd "apps/$proj" && elixir --erl "-start_epmd false -epmd_module Elixir.Forge.EPMD" -S mix {{args}}) |
There was a problem hiding this comment.
I think it's still useful to keep them separate even if they're the same right now but I don't feel strongly about it
| you must set the environment variable ELIXIR_ERL_OPTIONS="-epmd_module #{Forge.EPMD}" | ||
| """) | ||
| end | ||
| end |
There was a problem hiding this comment.
Should we do this when expert boots rather than when we try to start a child node?
|
|
||
| ## Enable deployment without epmd | ||
| ## (requires changing both vm.args and remote.vm.args) | ||
| -epmd_module Elixir.XPForge.EPMD |
There was a problem hiding this comment.
Please double check this is indeed necessary. You may be fine using epmd for remote debugging (or maybe remote debugging is pointless).
josevalim
left a comment
There was a problem hiding this comment.
Looks good to me! I have added some comments but none of them are stoppers (and they might be wrong :D)
mhanberg
left a comment
There was a problem hiding this comment.
Works on my corporate macbook and on my personal linux desktop
![]()
4a6b4d7 to
c705958
Compare
🤖 I have created a release *beep* *boop* --- ## [0.1.0-rc.0](v0.1.0...v0.1.0-rc.0) (2026-02-19) ### ⚠ BREAKING CHANGES * add CLI flag handling ([#185](#185)) ### Features * add CLI flag handling ([#185](#185)) ([46713a1](46713a1)) * add engine subcommands to expert ([#254](#254)) ([d7c348c](d7c348c)) * add missing require code action ([#283](#283)) ([a9ee0ec](a9ee0ec)) * configure Workspace Symbols to return all symbols on empty query ([#293](#293)) ([03ec5c6](03ec5c6)) * create undefined function code action ([#287](#287)) ([9624b3a](9624b3a)) * **engine:** hover for module attributes ([#329](#329)) ([1330370](1330370)) * **engine:** indicate progress when loading checkpoint ([#313](#313)) ([fad5a0b](fad5a0b)) * **engine:** support shorthand notation inside ~H sigil ([#278](#278)) ([e1e5666](e1e5666)) * **engine:** use ElixirSense for hover resolution ([#351](#351)) ([0e7896b](0e7896b)) * epmdless clustering ([#205](#205)) ([488d3a9](488d3a9)) * epmdless deployments ([#167](#167)) ([9cfb5cc](9cfb5cc)) * on the fly engine builds ([#24](#24)) ([51eb6f1](51eb6f1)) * use Spitfire to provide document symbols on documents with syntax errors ([#288](#288)) ([2ed7a81](2ed7a81)) * windows support ([#219](#219)) ([d0927ce](d0927ce)) * workspace folders ([#18](#18)) ([1204313](1204313)), closes [#136](#136) ### Bug Fixes * add lsp logging when failing to find an elixir executable ([#169](#169)) ([4dfba22](4dfba22)) * avoid crashing when calling `ActiveProjects.active?/1` ([#297](#297)) ([ae352b9](ae352b9)) * better handling of native<->lsp conversions ([#34](#34)) ([88dc456](88dc456)) * bring back completions for things defined in test files ([#32](#32)) ([8d7a47a](8d7a47a)) * clamp start_char for comletion prefix ([#239](#239)) ([46d3446](46d3446)) * **cli:** don't crash when there is no CLI arg provided ([#348](#348)) ([9a9140e](9a9140e)) * **cli:** show per tool version engine builds ([#301](#301)) ([399b2a0](399b2a0)) * correctly order aliases ([#322](#322)) ([fb269fa](fb269fa)) * Crash when typing english ([#742](https://github.com/elixir-lang/expert/issues/742)) ([697eac9](697eac9)), closes [#741](https://github.com/elixir-lang/expert/issues/741) * Current module not identified in defimpl ([#665](https://github.com/elixir-lang/expert/issues/665)) ([29f1055](29f1055)) * **deps:** update sourceror to 1.10.1 to fix range calculations ([#362](#362)) ([59489c7](59489c7)) * disable shell sessions when fetching the PATH ([#177](#177)) ([78236ef](78236ef)) * do not clamp character recvd from client ([#123](#123)) ([1a3b843](1a3b843)) * don't convert to_lsp twice in server specific messages ([#190](#190)) ([33bb850](33bb850)) * don't sometimes hang ([5d6bcde](5d6bcde)) * Edge case for module loading ([#738](https://github.com/elixir-lang/expert/issues/738)) ([dbbef2c](dbbef2c)) * elixir path discovery ([#248](#248)) ([f9b119c](f9b119c)) * **engine_node:** error reason not being shown ([#277](#277)) ([c7b7fa8](c7b7fa8)) * **engine:** avoid duplicate spec annotation when falling back to ElixirSense ([#410](#410)) ([5b4faee](5b4faee)) * **engine:** code lens exception when mix.exs not found ([#281](#281)) ([f9c81da](f9c81da)) * **engine:** correctly match any-struct references ([#347](#347)) ([6a92581](6a92581)) * **engine:** don't attempt search when ETS checkpoint is loading ([#308](#308)) ([438c965](438c965)) * **engine:** don't crash on hover for piped expression in curly braces in HEEx ([#350](#350)) ([f0044d6](f0044d6)) * **engine:** don't crash when calling references on an atom ([#396](#396)) ([a8badfc](a8badfc)) * **engine:** don't terminate search store on timeout ([#338](#338)) ([d91f6af](d91f6af)), closes [#303](#303) * **engine:** download Hex and Rebar only if missing ([#337](#337)) ([bc7f57e](bc7f57e)) * **engine:** handle failing build script ([#188](#188)) ([ce9ac22](ce9ac22)) * **engine:** handle matches against any struct ([#343](#343)) ([86fe8ec](86fe8ec)) * **engine:** improve entity resolution for HEEx components with curly braces ([#328](#328)) ([eff68bf](eff68bf)) * **engine:** index functions with default arguments ([#402](#402)) ([1aea6c7](1aea6c7)) * **engine:** resolve correct arity from inside ~H sigil ([#314](#314)) ([d2eacc0](d2eacc0)) * **engine:** stuck on format request ([#378](#378)) ([aa5ba2b](aa5ba2b)) * **engine:** support go to definition when function is called via __MODULE__ ([#261](#261)) ([b1d5e17](b1d5e17)) * Exclude expert dependencies from completions based on project dependencies ([3a47058](3a47058)) * **expert:** always log PATH on start ([#387](#387)) ([bfeb8a2](bfeb8a2)) * **expert:** build engine for elixir version 1.16.1 and below ([#330](#330)) ([2a2bdd9](2a2bdd9)) * **expert:** correctly handle unicode characters sent via port ([#388](#388)) ([4fe530b](4fe530b)) * **expert:** print to stderr when no transport argument provided ([#280](#280)) ([fc841e4](fc841e4)) * **expert:** save new configuration after `workspace/didChangeConfiguration` ([#282](#282)) ([b060d23](b060d23)) * **expert:** spec completions for functions with guards ([#406](#406)) ([d615858](d615858)) * fallback to packaged or system elixir ([#300](#300)) ([10262cf](10262cf)) * filter out RELEASE_ROOT from PATH instead of running a login shell ([#344](#344)) ([375391c](375391c)) * fix release-all command ([492022f](492022f)) * fixup namespacing and packaging ([#29](#29)) ([69ac8fe](69ac8fe)) * **forge:** don't crash on analysis of code with incorrect aliases ([#408](#408)) ([7c30502](7c30502)) * **forge:** handle interpolation when it starts with a special token ([#342](#342)) ([dd7b027](dd7b027)) * **forge:** improve log when Spitfire crashes ([#352](#352)) ([80900e5](80900e5)) * formatting format incorrectly when contain special character ([#252](#252)) ([b5b001b](b5b001b)) * Function definition extractor chokes on macro functions ([#682](https://github.com/elixir-lang/expert/issues/682)) ([ccf355f](ccf355f)), closes [#680](https://github.com/elixir-lang/expert/issues/680) * give proper argument to `TaskQueue.add/2` in Server.handle_message ([#791](https://github.com/elixir-lang/expert/issues/791)) ([34ee071](34ee071)) * handle missing metadata in indexer extractors ([#390](#390)) ([71c33f1](71c33f1)) * handle spitfire crashes ([#319](#319)) ([ffe360c](ffe360c)) * handle string ids in requests ([#120](#120)) ([5d6bcde](5d6bcde)) * include erlang source files when packaging engine ([580ccc8](580ccc8)) * inherited PATH pollutes project environment ([#298](#298)) ([8e1bb3d](8e1bb3d)) * interpolation_ranges/1 should work for empty interpolations ([#321](#321)) ([3ec1810](3ec1810)) * Invalid reads for requests that contain multi-byte characters ([#661](https://github.com/elixir-lang/expert/issues/661)) ([f6ca36f](f6ca36f)) * let the system figure out the elixir version for the project ([#162](#162)) ([5dacce4](5dacce4)) * log project's erl path ([#367](#367)) ([d8c81cd](d8c81cd)) * make sure asdf shims are in the PATH ([#87](#87)) ([7626f90](7626f90)) * Module suggestion was incorrect for files with multiple periods ([#705](https://github.com/elixir-lang/expert/issues/705)) ([824df66](824df66)), closes [#703](https://github.com/elixir-lang/expert/issues/703) * nil.__struct__/0 is undefined when receiving shutdown ([#250](#250)) ([849003e](849003e)) * **nix:** use eval release command ([#199](#199)) ([25f80c8](25f80c8)) * Non-string test names crash exunit indexer ([#676](https://github.com/elixir-lang/expert/issues/676)) ([29373d5](29373d5)), closes [#675](https://github.com/elixir-lang/expert/issues/675) * properly log when engine fails to initialize ([#244](#244)) ([81e1184](81e1184)) * properly set the mix env when building expert ([4caf258](4caf258)) * **release:** don't cd into rel directory before starting app ([#268](#268)) ([3b76e97](3b76e97)) * remove all usages of epmd ([#339](#339)) ([cef4adb](cef4adb)) * remove erts from extra_applications ([#202](#202)) ([aa8bd84](aa8bd84)) * remove escape sequences from PATH in fish ([#237](#237)) ([b237fd5](b237fd5)) * Resolve doesn't recognize zero-arg defs as functions ([#606](https://github.com/elixir-lang/expert/issues/606)) ([38a649c](38a649c)), closes [#604](https://github.com/elixir-lang/expert/issues/604) * resolve function delegates on hover docs ([#399](#399)) ([a3c629a](a3c629a)) * revert "feat: epmdless deployments ([#167](#167))" ([#180](#180)) ([0f66faa](0f66faa)) * revert dev server ([#48](#48)) ([9345e31](9345e31)) * sanitize node names ([#323](#323)) ([7591304](7591304)) * start projects after server is initialized ([#294](#294)) ([76d6cd5](76d6cd5)) * stop sending genlsp datastructures to engine ([#31](#31)) ([43d406f](43d406f)) * support Fish shell's space-separated PATH format ([#172](#172)) ([9803293](9803293)) * support mise et al on windows ([#304](#304)) ([3cc343f](3cc343f)) * support Nushell for PATH detection ([#272](#272)) ([8a9fd3d](8a9fd3d)) * trim any quotes wrapping PATH when elixir is managed by mise ([#82](#82)) ([d828966](d828966)) * trim PATH returned by shell ([#213](#213)) ([735199d](735199d)) * update document store on didchange even without the engine running ([#326](#326)) ([c80b72d](c80b72d)) * update gen_lsp to 0.11.3 ([#315](#315)) ([13cfee6](13cfee6)), closes [#245](#245) * update spitfire to v0.3.4 ([#373](#373)) ([6f57f16](6f57f16)) * update spitfire to v0.3.5 ([#376](#376)) ([85822fe](85822fe)) * use Calendar.UTCOnlyTimeZoneDatabase instead of project configured tz database ([#324](#324)) ([9e913f6](9e913f6)) * use correct build directory when namespacing expert ([b6540dd](b6540dd)) * use dynamic registrations and start project node asynchronously ([#30](#30)) ([e1ce165](e1ce165)) * use minimal PATH on unix instead of fully removing it ([#305](#305)) ([74da1a5](74da1a5)) * use project directory when building engine ([#203](#203)) ([c5ac441](c5ac441)) * utf8_prefix should take into account empty lines ([#164](#164)) ([16c21e0](16c21e0)) ### Miscellaneous Chores * release as 0.1.0 ([7625d3c](7625d3c)) * release as 0.1.0-rc.0 ([c98b870](c98b870)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
🤖 I have created a release *beep* *boop* --- [0.1.0-rc.0](expert-lsp/expert@v0.1.0...v0.1.0-rc.0) (2026-02-19) * add CLI flag handling ([expert-lsp#185](expert-lsp#185)) * add CLI flag handling ([expert-lsp#185](expert-lsp#185)) ([46713a1](expert-lsp@46713a1)) * add engine subcommands to expert ([expert-lsp#254](expert-lsp#254)) ([d7c348c](expert-lsp@d7c348c)) * add missing require code action ([expert-lsp#283](expert-lsp#283)) ([a9ee0ec](expert-lsp@a9ee0ec)) * configure Workspace Symbols to return all symbols on empty query ([expert-lsp#293](expert-lsp#293)) ([03ec5c6](expert-lsp@03ec5c6)) * create undefined function code action ([expert-lsp#287](expert-lsp#287)) ([9624b3a](expert-lsp@9624b3a)) * **engine:** hover for module attributes ([expert-lsp#329](expert-lsp#329)) ([1330370](expert-lsp@1330370)) * **engine:** indicate progress when loading checkpoint ([expert-lsp#313](expert-lsp#313)) ([fad5a0b](expert-lsp@fad5a0b)) * **engine:** support shorthand notation inside ~H sigil ([expert-lsp#278](expert-lsp#278)) ([e1e5666](expert-lsp@e1e5666)) * **engine:** use ElixirSense for hover resolution ([expert-lsp#351](expert-lsp#351)) ([0e7896b](expert-lsp@0e7896b)) * epmdless clustering ([expert-lsp#205](expert-lsp#205)) ([488d3a9](expert-lsp@488d3a9)) * epmdless deployments ([expert-lsp#167](expert-lsp#167)) ([9cfb5cc](expert-lsp@9cfb5cc)) * on the fly engine builds ([expert-lsp#24](expert-lsp#24)) ([51eb6f1](expert-lsp@51eb6f1)) * use Spitfire to provide document symbols on documents with syntax errors ([expert-lsp#288](expert-lsp#288)) ([2ed7a81](expert-lsp@2ed7a81)) * windows support ([expert-lsp#219](expert-lsp#219)) ([d0927ce](expert-lsp@d0927ce)) * workspace folders ([expert-lsp#18](expert-lsp#18)) ([1204313](expert-lsp@1204313)), closes [expert-lsp#136](expert-lsp#136) * add lsp logging when failing to find an elixir executable ([expert-lsp#169](expert-lsp#169)) ([4dfba22](expert-lsp@4dfba22)) * avoid crashing when calling `ActiveProjects.active?/1` ([expert-lsp#297](expert-lsp#297)) ([ae352b9](expert-lsp@ae352b9)) * better handling of native<->lsp conversions ([expert-lsp#34](expert-lsp#34)) ([88dc456](expert-lsp@88dc456)) * bring back completions for things defined in test files ([expert-lsp#32](expert-lsp#32)) ([8d7a47a](expert-lsp@8d7a47a)) * clamp start_char for comletion prefix ([expert-lsp#239](expert-lsp#239)) ([46d3446](expert-lsp@46d3446)) * **cli:** don't crash when there is no CLI arg provided ([expert-lsp#348](expert-lsp#348)) ([9a9140e](expert-lsp@9a9140e)) * **cli:** show per tool version engine builds ([expert-lsp#301](expert-lsp#301)) ([399b2a0](expert-lsp@399b2a0)) * correctly order aliases ([expert-lsp#322](expert-lsp#322)) ([fb269fa](expert-lsp@fb269fa)) * Crash when typing english ([#742](https://github.com/elixir-lang/expert/issues/742)) ([697eac9](expert-lsp@697eac9)), closes [#741](https://github.com/elixir-lang/expert/issues/741) * Current module not identified in defimpl ([#665](https://github.com/elixir-lang/expert/issues/665)) ([29f1055](expert-lsp@29f1055)) * **deps:** update sourceror to 1.10.1 to fix range calculations ([expert-lsp#362](expert-lsp#362)) ([59489c7](expert-lsp@59489c7)) * disable shell sessions when fetching the PATH ([expert-lsp#177](expert-lsp#177)) ([78236ef](expert-lsp@78236ef)) * do not clamp character recvd from client ([expert-lsp#123](expert-lsp#123)) ([1a3b843](expert-lsp@1a3b843)) * don't convert to_lsp twice in server specific messages ([expert-lsp#190](expert-lsp#190)) ([33bb850](expert-lsp@33bb850)) * don't sometimes hang ([5d6bcde](expert-lsp@5d6bcde)) * Edge case for module loading ([#738](https://github.com/elixir-lang/expert/issues/738)) ([dbbef2c](expert-lsp@dbbef2c)) * elixir path discovery ([expert-lsp#248](expert-lsp#248)) ([f9b119c](expert-lsp@f9b119c)) * **engine_node:** error reason not being shown ([expert-lsp#277](expert-lsp#277)) ([c7b7fa8](expert-lsp@c7b7fa8)) * **engine:** avoid duplicate spec annotation when falling back to ElixirSense ([expert-lsp#410](expert-lsp#410)) ([5b4faee](expert-lsp@5b4faee)) * **engine:** code lens exception when mix.exs not found ([expert-lsp#281](expert-lsp#281)) ([f9c81da](expert-lsp@f9c81da)) * **engine:** correctly match any-struct references ([expert-lsp#347](expert-lsp#347)) ([6a92581](expert-lsp@6a92581)) * **engine:** don't attempt search when ETS checkpoint is loading ([expert-lsp#308](expert-lsp#308)) ([438c965](expert-lsp@438c965)) * **engine:** don't crash on hover for piped expression in curly braces in HEEx ([expert-lsp#350](expert-lsp#350)) ([f0044d6](expert-lsp@f0044d6)) * **engine:** don't crash when calling references on an atom ([expert-lsp#396](expert-lsp#396)) ([a8badfc](expert-lsp@a8badfc)) * **engine:** don't terminate search store on timeout ([expert-lsp#338](expert-lsp#338)) ([d91f6af](expert-lsp@d91f6af)), closes [expert-lsp#303](expert-lsp#303) * **engine:** download Hex and Rebar only if missing ([expert-lsp#337](expert-lsp#337)) ([bc7f57e](expert-lsp@bc7f57e)) * **engine:** handle failing build script ([expert-lsp#188](expert-lsp#188)) ([ce9ac22](expert-lsp@ce9ac22)) * **engine:** handle matches against any struct ([expert-lsp#343](expert-lsp#343)) ([86fe8ec](expert-lsp@86fe8ec)) * **engine:** improve entity resolution for HEEx components with curly braces ([expert-lsp#328](expert-lsp#328)) ([eff68bf](expert-lsp@eff68bf)) * **engine:** index functions with default arguments ([expert-lsp#402](expert-lsp#402)) ([1aea6c7](expert-lsp@1aea6c7)) * **engine:** resolve correct arity from inside ~H sigil ([expert-lsp#314](expert-lsp#314)) ([d2eacc0](expert-lsp@d2eacc0)) * **engine:** stuck on format request ([expert-lsp#378](expert-lsp#378)) ([aa5ba2b](expert-lsp@aa5ba2b)) * **engine:** support go to definition when function is called via __MODULE__ ([expert-lsp#261](expert-lsp#261)) ([b1d5e17](expert-lsp@b1d5e17)) * Exclude expert dependencies from completions based on project dependencies ([3a47058](expert-lsp@3a47058)) * **expert:** always log PATH on start ([expert-lsp#387](expert-lsp#387)) ([bfeb8a2](expert-lsp@bfeb8a2)) * **expert:** build engine for elixir version 1.16.1 and below ([expert-lsp#330](expert-lsp#330)) ([2a2bdd9](expert-lsp@2a2bdd9)) * **expert:** correctly handle unicode characters sent via port ([expert-lsp#388](expert-lsp#388)) ([4fe530b](expert-lsp@4fe530b)) * **expert:** print to stderr when no transport argument provided ([expert-lsp#280](expert-lsp#280)) ([fc841e4](expert-lsp@fc841e4)) * **expert:** save new configuration after `workspace/didChangeConfiguration` ([expert-lsp#282](expert-lsp#282)) ([b060d23](expert-lsp@b060d23)) * **expert:** spec completions for functions with guards ([expert-lsp#406](expert-lsp#406)) ([d615858](expert-lsp@d615858)) * fallback to packaged or system elixir ([expert-lsp#300](expert-lsp#300)) ([10262cf](expert-lsp@10262cf)) * filter out RELEASE_ROOT from PATH instead of running a login shell ([expert-lsp#344](expert-lsp#344)) ([375391c](expert-lsp@375391c)) * fix release-all command ([492022f](expert-lsp@492022f)) * fixup namespacing and packaging ([expert-lsp#29](expert-lsp#29)) ([69ac8fe](expert-lsp@69ac8fe)) * **forge:** don't crash on analysis of code with incorrect aliases ([expert-lsp#408](expert-lsp#408)) ([7c30502](expert-lsp@7c30502)) * **forge:** handle interpolation when it starts with a special token ([expert-lsp#342](expert-lsp#342)) ([dd7b027](expert-lsp@dd7b027)) * **forge:** improve log when Spitfire crashes ([expert-lsp#352](expert-lsp#352)) ([80900e5](expert-lsp@80900e5)) * formatting format incorrectly when contain special character ([expert-lsp#252](expert-lsp#252)) ([b5b001b](expert-lsp@b5b001b)) * Function definition extractor chokes on macro functions ([#682](https://github.com/elixir-lang/expert/issues/682)) ([ccf355f](expert-lsp@ccf355f)), closes [#680](https://github.com/elixir-lang/expert/issues/680) * give proper argument to `TaskQueue.add/2` in Server.handle_message ([#791](https://github.com/elixir-lang/expert/issues/791)) ([34ee071](expert-lsp@34ee071)) * handle missing metadata in indexer extractors ([expert-lsp#390](expert-lsp#390)) ([71c33f1](expert-lsp@71c33f1)) * handle spitfire crashes ([expert-lsp#319](expert-lsp#319)) ([ffe360c](expert-lsp@ffe360c)) * handle string ids in requests ([expert-lsp#120](expert-lsp#120)) ([5d6bcde](expert-lsp@5d6bcde)) * include erlang source files when packaging engine ([580ccc8](expert-lsp@580ccc8)) * inherited PATH pollutes project environment ([expert-lsp#298](expert-lsp#298)) ([8e1bb3d](expert-lsp@8e1bb3d)) * interpolation_ranges/1 should work for empty interpolations ([expert-lsp#321](expert-lsp#321)) ([3ec1810](expert-lsp@3ec1810)) * Invalid reads for requests that contain multi-byte characters ([#661](https://github.com/elixir-lang/expert/issues/661)) ([f6ca36f](expert-lsp@f6ca36f)) * let the system figure out the elixir version for the project ([expert-lsp#162](expert-lsp#162)) ([5dacce4](expert-lsp@5dacce4)) * log project's erl path ([expert-lsp#367](expert-lsp#367)) ([d8c81cd](expert-lsp@d8c81cd)) * make sure asdf shims are in the PATH ([expert-lsp#87](expert-lsp#87)) ([7626f90](expert-lsp@7626f90)) * Module suggestion was incorrect for files with multiple periods ([#705](https://github.com/elixir-lang/expert/issues/705)) ([824df66](expert-lsp@824df66)), closes [#703](https://github.com/elixir-lang/expert/issues/703) * nil.__struct__/0 is undefined when receiving shutdown ([expert-lsp#250](expert-lsp#250)) ([849003e](expert-lsp@849003e)) * **nix:** use eval release command ([expert-lsp#199](expert-lsp#199)) ([25f80c8](expert-lsp@25f80c8)) * Non-string test names crash exunit indexer ([#676](https://github.com/elixir-lang/expert/issues/676)) ([29373d5](expert-lsp@29373d5)), closes [#675](https://github.com/elixir-lang/expert/issues/675) * properly log when engine fails to initialize ([expert-lsp#244](expert-lsp#244)) ([81e1184](expert-lsp@81e1184)) * properly set the mix env when building expert ([4caf258](expert-lsp@4caf258)) * **release:** don't cd into rel directory before starting app ([expert-lsp#268](expert-lsp#268)) ([3b76e97](expert-lsp@3b76e97)) * remove all usages of epmd ([expert-lsp#339](expert-lsp#339)) ([cef4adb](expert-lsp@cef4adb)) * remove erts from extra_applications ([expert-lsp#202](expert-lsp#202)) ([aa8bd84](expert-lsp@aa8bd84)) * remove escape sequences from PATH in fish ([expert-lsp#237](expert-lsp#237)) ([b237fd5](expert-lsp@b237fd5)) * Resolve doesn't recognize zero-arg defs as functions ([#606](https://github.com/elixir-lang/expert/issues/606)) ([38a649c](expert-lsp@38a649c)), closes [#604](https://github.com/elixir-lang/expert/issues/604) * resolve function delegates on hover docs ([expert-lsp#399](expert-lsp#399)) ([a3c629a](expert-lsp@a3c629a)) * revert "feat: epmdless deployments ([expert-lsp#167](expert-lsp#167))" ([expert-lsp#180](expert-lsp#180)) ([0f66faa](expert-lsp@0f66faa)) * revert dev server ([expert-lsp#48](expert-lsp#48)) ([9345e31](expert-lsp@9345e31)) * sanitize node names ([expert-lsp#323](expert-lsp#323)) ([7591304](expert-lsp@7591304)) * start projects after server is initialized ([expert-lsp#294](expert-lsp#294)) ([76d6cd5](expert-lsp@76d6cd5)) * stop sending genlsp datastructures to engine ([expert-lsp#31](expert-lsp#31)) ([43d406f](expert-lsp@43d406f)) * support Fish shell's space-separated PATH format ([expert-lsp#172](expert-lsp#172)) ([9803293](expert-lsp@9803293)) * support mise et al on windows ([expert-lsp#304](expert-lsp#304)) ([3cc343f](expert-lsp@3cc343f)) * support Nushell for PATH detection ([expert-lsp#272](expert-lsp#272)) ([8a9fd3d](expert-lsp@8a9fd3d)) * trim any quotes wrapping PATH when elixir is managed by mise ([expert-lsp#82](expert-lsp#82)) ([d828966](expert-lsp@d828966)) * trim PATH returned by shell ([expert-lsp#213](expert-lsp#213)) ([735199d](expert-lsp@735199d)) * update document store on didchange even without the engine running ([expert-lsp#326](expert-lsp#326)) ([c80b72d](expert-lsp@c80b72d)) * update gen_lsp to 0.11.3 ([expert-lsp#315](expert-lsp#315)) ([13cfee6](expert-lsp@13cfee6)), closes [expert-lsp#245](expert-lsp#245) * update spitfire to v0.3.4 ([expert-lsp#373](expert-lsp#373)) ([6f57f16](expert-lsp@6f57f16)) * update spitfire to v0.3.5 ([expert-lsp#376](expert-lsp#376)) ([85822fe](expert-lsp@85822fe)) * use Calendar.UTCOnlyTimeZoneDatabase instead of project configured tz database ([expert-lsp#324](expert-lsp#324)) ([9e913f6](expert-lsp@9e913f6)) * use correct build directory when namespacing expert ([b6540dd](expert-lsp@b6540dd)) * use dynamic registrations and start project node asynchronously ([expert-lsp#30](expert-lsp#30)) ([e1ce165](expert-lsp@e1ce165)) * use minimal PATH on unix instead of fully removing it ([expert-lsp#305](expert-lsp#305)) ([74da1a5](expert-lsp@74da1a5)) * use project directory when building engine ([expert-lsp#203](expert-lsp#203)) ([c5ac441](expert-lsp@c5ac441)) * utf8_prefix should take into account empty lines ([expert-lsp#164](expert-lsp#164)) ([16c21e0](expert-lsp@16c21e0)) * release as 0.1.0 ([7625d3c](expert-lsp@7625d3c)) * release as 0.1.0-rc.0 ([c98b870](expert-lsp@c98b870)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Alternative to #191 without introducing dependencies.
TODO:
Forge.EPMDdoes not exist.