Skip to content

feat: on the fly engine builds#24

Merged
doorgan merged 2 commits intomainfrom
doorgan/multiple_engine_versions
Aug 28, 2025
Merged

feat: on the fly engine builds#24
doorgan merged 2 commits intomainfrom
doorgan/multiple_engine_versions

Conversation

@doorgan
Copy link
Collaborator

@doorgan doorgan commented Jun 30, 2025

Ideally, the Project node would use an Engine built with the same elixir and otp versions as the project.

This PR adds support for that, looking at the user's data folder(AppData in windows, .local/share in linux, Library/Application Support on macos, etc) for an Engine build matching the project versions, and building an engine matching the user's elixir+otp on the fly if none is found

@doorgan doorgan force-pushed the doorgan/burrito_packaging branch 7 times, most recently from 15ce974 to 3043a23 Compare July 8, 2025 04:38
@doorgan doorgan force-pushed the doorgan/multiple_engine_versions branch from 08a231f to 82cb19c Compare July 16, 2025 18:41
@doorgan doorgan closed this Jul 16, 2025
@doorgan doorgan force-pushed the doorgan/multiple_engine_versions branch from 82cb19c to 78026df Compare July 16, 2025 18:44
@doorgan doorgan reopened this Jul 16, 2025
Base automatically changed from doorgan/burrito_packaging to main July 22, 2025 16:44
@doorgan doorgan force-pushed the doorgan/multiple_engine_versions branch from 92a4772 to 9bc8fbd Compare August 22, 2025 03:01
@doorgan doorgan changed the title feat: use closest available engine version for the project node feat: on the fly engine builds Aug 22, 2025
@doorgan doorgan force-pushed the doorgan/multiple_engine_versions branch from 9bc8fbd to 714ac00 Compare August 22, 2025 03:08
Mix.Task.run("local.hex", ["--force"])
Mix.Task.run("local.rebar", ["--force"])
Mix.Project.in_project(:engine, engine_source_path, [build_path: out_path], fn _module ->
Mix.Task.run("deps.get", [])
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It might be worth downloading the deps at release time and bundling them along with the source code.

I'm mostly thinking about once less network call and mix task that could fail.

Something to consider for the future.

{:ok, quoted} ->
quoted
|> Future.Macro.path(&match?({:__cursor__, _, _}, &1))
|> Forge.Future.Macro.path(&match?({:__cursor__, _, _}, &1))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Were none of these working before? 😅

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

They did but they complicate namespacing!

# I commented print_diagnostic/1, because it is not used in the codebase.
# And I changed string_to_quoted/2 to make it use :future_elixir
defmodule Future.Code do
defmodule Forge.Future.Code do
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh, disregard my other comment.

@mhanberg
Copy link
Member

Sorry, I didn't realize this was a draft.

@doorgan
Copy link
Collaborator Author

doorgan commented Aug 22, 2025

@mhanberg yeah, it's functional but one bit I need to figure out first is how to make it viable for development, otherwise we need to rebuild the engine every single time we launch expert in case the engine source changed

@doorgan doorgan force-pushed the doorgan/multiple_engine_versions branch 5 times, most recently from e17702f to ab7472e Compare August 22, 2025 21:22
@doorgan doorgan marked this pull request as ready for review August 25, 2025 17:23
@doorgan doorgan requested a review from mhanberg August 25, 2025 17:23
@doorgan
Copy link
Collaborator Author

doorgan commented Aug 25, 2025

@mhanberg this is now ready for review, I moved to Mix.install so my previous concern is now resolved, we're still namespacing on every launch but it's not that bad compared to fully recompiling everything every time, and since namespacing isn't incremental I'm not sure if there's a good way to avoid this

Also don't mark engine dependencies as optional, otherwise Mix.install
won't compile them and the Engine will fail to start
@doorgan doorgan force-pushed the doorgan/multiple_engine_versions branch from 60dd30d to 1af4c51 Compare August 26, 2025 20:40
@mhanberg
Copy link
Member

I'll try this out before bed tonight.

@mhanberg
Copy link
Member

Seems to work, tested with a local release on darwin arm (I still can't get the burrito to work on my linux machine, but I think its from a strange zig compiler memory corruption... the people in the zig discord were extremely confused. still digging into it)

One thing is we should send a lsp progress when the engine is compiling. also in general, should be sending more logs through the logMessage notification so that they show up in the output panel/lsp logs inside the editors.

i would merge this now tho

Copy link
Member

@mhanberg mhanberg left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ship it

@doorgan doorgan merged commit 51eb6f1 into main Aug 28, 2025
17 checks passed
@doorgan doorgan deleted the doorgan/multiple_engine_versions branch August 28, 2025 01:38
@doorgan
Copy link
Collaborator Author

doorgan commented Aug 28, 2025

I'll add the lsp progress on a followup pr

mhanberg pushed a commit that referenced this pull request Feb 19, 2026
🤖 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>
katafrakt pushed a commit to katafrakt/expert that referenced this pull request Feb 20, 2026
🤖 I have created a release *beep* *boop*
---

[0.1.0-rc.0](elixir-lang/expert@v0.1.0...v0.1.0-rc.0)
(2026-02-19)

* add CLI flag handling
([elixir-lang#185](elixir-lang#185))

* add CLI flag handling
([elixir-lang#185](elixir-lang#185))
([46713a1](elixir-lang@46713a1))
* add engine subcommands to expert
([elixir-lang#254](elixir-lang#254))
([d7c348c](elixir-lang@d7c348c))
* add missing require code action
([elixir-lang#283](elixir-lang#283))
([a9ee0ec](elixir-lang@a9ee0ec))
* configure Workspace Symbols to return all symbols on empty query
([elixir-lang#293](elixir-lang#293))
([03ec5c6](elixir-lang@03ec5c6))
* create undefined function code action
([elixir-lang#287](elixir-lang#287))
([9624b3a](elixir-lang@9624b3a))
* **engine:** hover for module attributes
([elixir-lang#329](elixir-lang#329))
([1330370](elixir-lang@1330370))
* **engine:** indicate progress when loading checkpoint
([elixir-lang#313](elixir-lang#313))
([fad5a0b](elixir-lang@fad5a0b))
* **engine:** support shorthand notation inside ~H sigil
([elixir-lang#278](elixir-lang#278))
([e1e5666](elixir-lang@e1e5666))
* **engine:** use ElixirSense for hover resolution
([elixir-lang#351](elixir-lang#351))
([0e7896b](elixir-lang@0e7896b))
* epmdless clustering
([elixir-lang#205](elixir-lang#205))
([488d3a9](elixir-lang@488d3a9))
* epmdless deployments
([elixir-lang#167](elixir-lang#167))
([9cfb5cc](elixir-lang@9cfb5cc))
* on the fly engine builds
([elixir-lang#24](elixir-lang#24))
([51eb6f1](elixir-lang@51eb6f1))
* use Spitfire to provide document symbols on documents with syntax
errors ([elixir-lang#288](elixir-lang#288))
([2ed7a81](elixir-lang@2ed7a81))
* windows support
([elixir-lang#219](elixir-lang#219))
([d0927ce](elixir-lang@d0927ce))
* workspace folders
([elixir-lang#18](elixir-lang#18))
([1204313](elixir-lang@1204313)),
closes [elixir-lang#136](elixir-lang#136)

* add lsp logging when failing to find an elixir executable
([elixir-lang#169](elixir-lang#169))
([4dfba22](elixir-lang@4dfba22))
* avoid crashing when calling `ActiveProjects.active?/1`
([elixir-lang#297](elixir-lang#297))
([ae352b9](elixir-lang@ae352b9))
* better handling of native&lt;-&gt;lsp conversions
([elixir-lang#34](elixir-lang#34))
([88dc456](elixir-lang@88dc456))
* bring back completions for things defined in test files
([elixir-lang#32](elixir-lang#32))
([8d7a47a](elixir-lang@8d7a47a))
* clamp start_char for comletion prefix
([elixir-lang#239](elixir-lang#239))
([46d3446](elixir-lang@46d3446))
* **cli:** don't crash when there is no CLI arg provided
([elixir-lang#348](elixir-lang#348))
([9a9140e](elixir-lang@9a9140e))
* **cli:** show per tool version engine builds
([elixir-lang#301](elixir-lang#301))
([399b2a0](elixir-lang@399b2a0))
* correctly order aliases
([elixir-lang#322](elixir-lang#322))
([fb269fa](elixir-lang@fb269fa))
* Crash when typing english
([#742](https://github.com/elixir-lang/expert/issues/742))
([697eac9](elixir-lang@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](elixir-lang@29f1055))
* **deps:** update sourceror to 1.10.1 to fix range calculations
([elixir-lang#362](elixir-lang#362))
([59489c7](elixir-lang@59489c7))
* disable shell sessions when fetching the PATH
([elixir-lang#177](elixir-lang#177))
([78236ef](elixir-lang@78236ef))
* do not clamp character recvd from client
([elixir-lang#123](elixir-lang#123))
([1a3b843](elixir-lang@1a3b843))
* don't convert to_lsp twice in server specific messages
([elixir-lang#190](elixir-lang#190))
([33bb850](elixir-lang@33bb850))
* don't sometimes hang
([5d6bcde](elixir-lang@5d6bcde))
* Edge case for module loading
([#738](https://github.com/elixir-lang/expert/issues/738))
([dbbef2c](elixir-lang@dbbef2c))
* elixir path discovery
([elixir-lang#248](elixir-lang#248))
([f9b119c](elixir-lang@f9b119c))
* **engine_node:** error reason not being shown
([elixir-lang#277](elixir-lang#277))
([c7b7fa8](elixir-lang@c7b7fa8))
* **engine:** avoid duplicate spec annotation when falling back to
ElixirSense ([elixir-lang#410](elixir-lang#410))
([5b4faee](elixir-lang@5b4faee))
* **engine:** code lens exception when mix.exs not found
([elixir-lang#281](elixir-lang#281))
([f9c81da](elixir-lang@f9c81da))
* **engine:** correctly match any-struct references
([elixir-lang#347](elixir-lang#347))
([6a92581](elixir-lang@6a92581))
* **engine:** don't attempt search when ETS checkpoint is loading
([elixir-lang#308](elixir-lang#308))
([438c965](elixir-lang@438c965))
* **engine:** don't crash on hover for piped expression in curly braces
in HEEx ([elixir-lang#350](elixir-lang#350))
([f0044d6](elixir-lang@f0044d6))
* **engine:** don't crash when calling references on an atom
([elixir-lang#396](elixir-lang#396))
([a8badfc](elixir-lang@a8badfc))
* **engine:** don't terminate search store on timeout
([elixir-lang#338](elixir-lang#338))
([d91f6af](elixir-lang@d91f6af)),
closes [elixir-lang#303](elixir-lang#303)
* **engine:** download Hex and Rebar only if missing
([elixir-lang#337](elixir-lang#337))
([bc7f57e](elixir-lang@bc7f57e))
* **engine:** handle failing build script
([elixir-lang#188](elixir-lang#188))
([ce9ac22](elixir-lang@ce9ac22))
* **engine:** handle matches against any struct
([elixir-lang#343](elixir-lang#343))
([86fe8ec](elixir-lang@86fe8ec))
* **engine:** improve entity resolution for HEEx components with curly
braces ([elixir-lang#328](elixir-lang#328))
([eff68bf](elixir-lang@eff68bf))
* **engine:** index functions with default arguments
([elixir-lang#402](elixir-lang#402))
([1aea6c7](elixir-lang@1aea6c7))
* **engine:** resolve correct arity from inside ~H sigil
([elixir-lang#314](elixir-lang#314))
([d2eacc0](elixir-lang@d2eacc0))
* **engine:** stuck on format request
([elixir-lang#378](elixir-lang#378))
([aa5ba2b](elixir-lang@aa5ba2b))
* **engine:** support go to definition when function is called via
__MODULE__ ([elixir-lang#261](elixir-lang#261))
([b1d5e17](elixir-lang@b1d5e17))
* Exclude expert dependencies from completions based on project
dependencies
([3a47058](elixir-lang@3a47058))
* **expert:** always log PATH on start
([elixir-lang#387](elixir-lang#387))
([bfeb8a2](elixir-lang@bfeb8a2))
* **expert:** build engine for elixir version 1.16.1 and below
([elixir-lang#330](elixir-lang#330))
([2a2bdd9](elixir-lang@2a2bdd9))
* **expert:** correctly handle unicode characters sent via port
([elixir-lang#388](elixir-lang#388))
([4fe530b](elixir-lang@4fe530b))
* **expert:** print to stderr when no transport argument provided
([elixir-lang#280](elixir-lang#280))
([fc841e4](elixir-lang@fc841e4))
* **expert:** save new configuration after
`workspace/didChangeConfiguration`
([elixir-lang#282](elixir-lang#282))
([b060d23](elixir-lang@b060d23))
* **expert:** spec completions for functions with guards
([elixir-lang#406](elixir-lang#406))
([d615858](elixir-lang@d615858))
* fallback to packaged or system elixir
([elixir-lang#300](elixir-lang#300))
([10262cf](elixir-lang@10262cf))
* filter out RELEASE_ROOT from PATH instead of running a login shell
([elixir-lang#344](elixir-lang#344))
([375391c](elixir-lang@375391c))
* fix release-all command
([492022f](elixir-lang@492022f))
* fixup namespacing and packaging
([elixir-lang#29](elixir-lang#29))
([69ac8fe](elixir-lang@69ac8fe))
* **forge:** don't crash on analysis of code with incorrect aliases
([elixir-lang#408](elixir-lang#408))
([7c30502](elixir-lang@7c30502))
* **forge:** handle interpolation when it starts with a special token
([elixir-lang#342](elixir-lang#342))
([dd7b027](elixir-lang@dd7b027))
* **forge:** improve log when Spitfire crashes
([elixir-lang#352](elixir-lang#352))
([80900e5](elixir-lang@80900e5))
* formatting format incorrectly when contain special character
([elixir-lang#252](elixir-lang#252))
([b5b001b](elixir-lang@b5b001b))
* Function definition extractor chokes on macro functions
([#682](https://github.com/elixir-lang/expert/issues/682))
([ccf355f](elixir-lang@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](elixir-lang@34ee071))
* handle missing metadata in indexer extractors
([elixir-lang#390](elixir-lang#390))
([71c33f1](elixir-lang@71c33f1))
* handle spitfire crashes
([elixir-lang#319](elixir-lang#319))
([ffe360c](elixir-lang@ffe360c))
* handle string ids in requests
([elixir-lang#120](elixir-lang#120))
([5d6bcde](elixir-lang@5d6bcde))
* include erlang source files when packaging engine
([580ccc8](elixir-lang@580ccc8))
* inherited PATH pollutes project environment
([elixir-lang#298](elixir-lang#298))
([8e1bb3d](elixir-lang@8e1bb3d))
* interpolation_ranges/1 should work for empty interpolations
([elixir-lang#321](elixir-lang#321))
([3ec1810](elixir-lang@3ec1810))
* Invalid reads for requests that contain multi-byte characters
([#661](https://github.com/elixir-lang/expert/issues/661))
([f6ca36f](elixir-lang@f6ca36f))
* let the system figure out the elixir version for the project
([elixir-lang#162](elixir-lang#162))
([5dacce4](elixir-lang@5dacce4))
* log project's erl path
([elixir-lang#367](elixir-lang#367))
([d8c81cd](elixir-lang@d8c81cd))
* make sure asdf shims are in the PATH
([elixir-lang#87](elixir-lang#87))
([7626f90](elixir-lang@7626f90))
* Module suggestion was incorrect for files with multiple periods
([#705](https://github.com/elixir-lang/expert/issues/705))
([824df66](elixir-lang@824df66)),
closes [#703](https://github.com/elixir-lang/expert/issues/703)
* nil.__struct__/0 is undefined when receiving shutdown
([elixir-lang#250](elixir-lang#250))
([849003e](elixir-lang@849003e))
* **nix:** use eval release command
([elixir-lang#199](elixir-lang#199))
([25f80c8](elixir-lang@25f80c8))
* Non-string test names crash exunit indexer
([#676](https://github.com/elixir-lang/expert/issues/676))
([29373d5](elixir-lang@29373d5)),
closes [#675](https://github.com/elixir-lang/expert/issues/675)
* properly log when engine fails to initialize
([elixir-lang#244](elixir-lang#244))
([81e1184](elixir-lang@81e1184))
* properly set the mix env when building expert
([4caf258](elixir-lang@4caf258))
* **release:** don't cd into rel directory before starting app
([elixir-lang#268](elixir-lang#268))
([3b76e97](elixir-lang@3b76e97))
* remove all usages of epmd
([elixir-lang#339](elixir-lang#339))
([cef4adb](elixir-lang@cef4adb))
* remove erts from extra_applications
([elixir-lang#202](elixir-lang#202))
([aa8bd84](elixir-lang@aa8bd84))
* remove escape sequences from PATH in fish
([elixir-lang#237](elixir-lang#237))
([b237fd5](elixir-lang@b237fd5))
* Resolve doesn't recognize zero-arg defs as functions
([#606](https://github.com/elixir-lang/expert/issues/606))
([38a649c](elixir-lang@38a649c)),
closes [#604](https://github.com/elixir-lang/expert/issues/604)
* resolve function delegates on hover docs
([elixir-lang#399](elixir-lang#399))
([a3c629a](elixir-lang@a3c629a))
* revert "feat: epmdless deployments
([elixir-lang#167](elixir-lang#167))"
([elixir-lang#180](elixir-lang#180))
([0f66faa](elixir-lang@0f66faa))
* revert dev server
([elixir-lang#48](elixir-lang#48))
([9345e31](elixir-lang@9345e31))
* sanitize node names
([elixir-lang#323](elixir-lang#323))
([7591304](elixir-lang@7591304))
* start projects after server is initialized
([elixir-lang#294](elixir-lang#294))
([76d6cd5](elixir-lang@76d6cd5))
* stop sending genlsp datastructures to engine
([elixir-lang#31](elixir-lang#31))
([43d406f](elixir-lang@43d406f))
* support Fish shell's space-separated PATH format
([elixir-lang#172](elixir-lang#172))
([9803293](elixir-lang@9803293))
* support mise et al on windows
([elixir-lang#304](elixir-lang#304))
([3cc343f](elixir-lang@3cc343f))
* support Nushell for PATH detection
([elixir-lang#272](elixir-lang#272))
([8a9fd3d](elixir-lang@8a9fd3d))
* trim any quotes wrapping PATH when elixir is managed by mise
([elixir-lang#82](elixir-lang#82))
([d828966](elixir-lang@d828966))
* trim PATH returned by shell
([elixir-lang#213](elixir-lang#213))
([735199d](elixir-lang@735199d))
* update document store on didchange even without the engine running
([elixir-lang#326](elixir-lang#326))
([c80b72d](elixir-lang@c80b72d))
* update gen_lsp to 0.11.3
([elixir-lang#315](elixir-lang#315))
([13cfee6](elixir-lang@13cfee6)),
closes [elixir-lang#245](elixir-lang#245)
* update spitfire to v0.3.4
([elixir-lang#373](elixir-lang#373))
([6f57f16](elixir-lang@6f57f16))
* update spitfire to v0.3.5
([elixir-lang#376](elixir-lang#376))
([85822fe](elixir-lang@85822fe))
* use Calendar.UTCOnlyTimeZoneDatabase instead of project configured tz
database ([elixir-lang#324](elixir-lang#324))
([9e913f6](elixir-lang@9e913f6))
* use correct build directory when namespacing expert
([b6540dd](elixir-lang@b6540dd))
* use dynamic registrations and start project node asynchronously
([elixir-lang#30](elixir-lang#30))
([e1ce165](elixir-lang@e1ce165))
* use minimal PATH on unix instead of fully removing it
([elixir-lang#305](elixir-lang#305))
([74da1a5](elixir-lang@74da1a5))
* use project directory when building engine
([elixir-lang#203](elixir-lang#203))
([c5ac441](elixir-lang@c5ac441))
* utf8_prefix should take into account empty lines
([elixir-lang#164](elixir-lang#164))
([16c21e0](elixir-lang@16c21e0))

* release as 0.1.0
([7625d3c](elixir-lang@7625d3c))
* release as 0.1.0-rc.0
([c98b870](elixir-lang@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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

2 participants