- Fixed references crash on variables used in macro
- Improved document symbols stability on code with unquote fragments
- Fixed DAP crash when obtaining meta PID timeouts
- Fixed crash when rendering markdown docs from edoc
- Local file code intelligence engine provided by
elixir_sense
library has been rewritten from scratch using new elixir 1.17Macro.Env
APIs. The new APIs has been backported to earlier elixir versions 1.13 - 1.16. The new engine expands and traverses elixir AST in a way that mirrors the elixir compiler behavior. As a result, ElixirLS is able to more accurately infer aliases/imports/requires, track variable/attribute definitions and usage, track calls, defined functions, modules and typespecs. It is now also able to expand some macros. All that information is used for completions, navigation to definition, finding references and other LSP operations requiring understanding of elixir code.
Limitations: The new engine does not expand local macros, and support for dynamically defined functions, modules, and typespecs (including those with unquote fragments) is partial.
- vendored dialyxir updated to v1.4.4
- vendored jason updated to v1.4.4
- guard type inference is now smarter and better handle various guard expressions
- fixed crash when analyzing types in guard with map
- elixir 1.12 reached end of life and is no longer supported. ElixirLS will fail to start on versions lower than 1.13. Consider updating to 1.13+ or use v0.23
- Deprecated ez archives release mode is no longer supported. It never worked with elixir 1.16+
- Added support for attaching with the debug adapter to remote nodes
- Debug Adapter protocol
source
request implemented - Added presentation hints to debug scopes
- Breakpoints are now annotated as failed if setting them fails
- Fixed a deadlock in debug adapter when meta process is not alive
- Removed no longer needed workaround for
:gen_statem
callbacks
- Improvements to symbol presentation in document symbols
- ANSI colors enabled in Debug Adapter
- Support for elixir 1.17
- Support for OTP 27
- Related information with inferred type is added on diagnostics origination from elixir 1.17 type system
- Added support for ExDoc autolinking in OTP 27 markdown documentation
- Debug adapter can display OTP 27 process labels
- Dialyzer is more strict with option validation
- Updated vendored dialyxir to 1.4.3
- Added support for vfox package manager yeshan333
- Fixed a crash in metadata builder when recovering from AST parse error
- Reuse incremental dialyzer PLT when suggesting specs
- Avoid starting both incremental and old dialyzer
- Properly clean up incremental dialyzer PLT when a new one is loaded
- Improved validation of dialyzer options. Previously invalid options were allowed leading to dialyzer crashes
- Fixed a crash in incremental dialyzer leading to used memory buildup
- Fixed endless loop when expanding incomplete
use
macro - Fixed crash in incremental dialyzer when dialyze is already in progress
- Fixed crash when rendering metadata to markdown
- OTP incremental dialyzer is now the default dialyzing engine on OTP 26+. While slower than ElixirLS dialyzer it is much better at tracking module dependencies and should resolve issues with transient dialyzer warning that do not disappear on recompile. ElixirLS dialyzer is still available and incremental dialyzer can be disabled by config setting
elixirLS.incrementalDialyzer
- Experimental support for Code actions added. Two code actions are available: Replace unknown remote def, replace an unused variable with an underscore Samuel Heldak
- Added a workaround for ExUnit emitting invalid event in case
setup_all
is killed. This error resulted in invalid test results being presented in Test UI - More apps is now unloaded on recompile. This should improve build consistency
- Underscored variables are now returned in completions and tracked
- All provider code has been moved to ElixirLS repo from elixir_sense. This should make it easier for contributors to navigate in the codebase
- Fixed a crash in on-type formatting
- Fixed a crash on invalid diagnostic severity emitted by compiler
- Fixed a crash in parser related to race conditions
- Fixed a crash in debugger when only 1 frame was returned
- Fixed selection ranges incompatibility with elixir 1.16.2
- Fixed a crash when logging elixir API error AJ Foster
- Fixed a crash in type inference engine related to map keys
- elixir_sense plugin management code has been moved to ElixirLS repo along with all providers. This can potentially affect existing plugins
- Selection ranges provider added. This provider handles expand/shrink selection editor commands in a semantic aware way
- Completions, hover and signature help providers now are able to display
@doc
and other attributes data from the currently edited buffer - Hover provider now returns markdown with working links to hexdocs and erlang documentation. Support for ExDoc autolinking and erlang see tags has been added
- Completions provider renders metadata about returned items. Metadata includes info on
since
,deprecated
,impl
attributes as well as a number of other flags (hidden, optional, opaque, overridable etc.) - Completions provider is now able to suggest callbacks and protocol functions defined in the current buffer
- Completions provider is now able to suggest return values when implementing callbacks and protocol functions defined in the current buffer
- Documentation and signatures is provided on builtin function in more cases
- Avoid race conditions when reading mix project in workspace symbols provider
- Avoid a crash in document symbols provider when unable to determine the end of expression
- Avoid a crash when
locals_without_parens
contains invalid elements - Improved resilience of alias expander
- Hover provider would emit invalid markdown when it contained escaped
#
and links with anchor - Fixed a crash in workspace symbols provider when the directory is no longer a mix project
- Workaround an issue when elixir compiler would emit a diagnostic with invalid Unicode
- Fixed a crash when
Mix.env
cannot be retrieved - Fixed a crash in spec code lens on protocol def with default arguments
- Added a workaround for a crash when reading module exports while it is being compiled
- Fixed a crash when formatting an atom argument
- Fixed a crash when handling an invalid typespec
- Fixed a crash when in complete provider when unable to expand a phoenix controller
- On type parsing and diagnostics for phoenix
.heex
files - Workspace symbols provider has been reimplemented. Previously the workspace symbols index was build from all available symbols. To make it more focused and helpful now only symbols from the project are considered. This change made it much quicker and improved the quality of returned results. Fuzzy matching engine was also improved and made consistent with how complete provider works.
- Parser is now asynchronous. This should limit the number of cases when providers wait on parsing.
- Function location in workspace symbols provider is optimized. Index build speed should now be much quicker
- Added support for
mise
version manager (the formerrtx
is still supported) - Robson Roberto Souza Peixoto - Workspace symbols provider return results on empty query
- Workspace symbols provider no longer returns duplicated results for functions with default arguments
- Workspace symbols provider now returns
containerName
if applicable - Workspace symbols provider now returns deprecated symbol tag
- Workspace symbols provider, completions and other providers return distinct symbol kinds for functions and macros. This makes them visually different in editors (e.g VSCode uses different icons)
- Apps are now reloaded after build so application controller can provide an accurate list of modules. This works around elixir-lang/elixir#13001
- App config is now reset on each build. This works around elixir-lang/elixir#13246
- Suggest contracts calls are now non blocking. Previously a call to dialyzer would block the server.
- Diagnostics without
file
set will now be returned as originating frommix.exs
. Diagnostics without document URI are meaningless in LSP - Document symbols rendering is improved for defs with multiline arguments - Milo Lee
- Debugger now respects
--no-mix-exs
flag in launch configtaskArgs
- Do block indentation level discovery is improved in completions provider. This should improve keyword completions position
- Elixir version checks have been optimized in completions provider. Those turned out to be expensive.
- Completions provider now caches modules. This greatly improves responsiveness when completion is invoked off an empty hint
- Completions provider now returns
@nifs
attribute added in elixir 1.16 - Definitions provider now supports resetting aliases
alias: nil
on phoenix router scope
- Fixed crash when code action is unable to apply spec
- Fixed a crash when loading an old format or unrepairable DETS file
- Operators, functions and macros are now correctly labelled in completions provider. Previously every symbol from
Kernel
was labelled askeyword
and every completion having a snippet was labelled assnippet
. - Fixed a crash in build when printing invalid diagnostics from external compilers
- Fixed a crash in suggest contracts when dialyzer is able to infer concrete types in protocol
- Fixed a crash in completions provider when a completion would be filtered out
- Fixed a crash in document symbols provider when unable to get a line for AST node
- Mix clean custom command will no longer crash when executed in non mix project
- Completions provider returns correct type when a module has functions and macros with the same name. This bug made it return
Application.compile_env
as function instead of macro - Fixed a crash in phoenix router scopes when code fails to parse
- Fixed a crash in definitions provider when cursor over phoenix controller action in router
- Fixed a crash in definitions provider with nested phoenix scopes. The scope combination algorithm was incorrect and produced invalid aliases
- Variables defined in
ex_unit
test
,setup
andsetup_all
context are now returned by completions provider. Navigation to variable definition and references now also works correctly - Suggest spec code lens now emits specs for all arity variants when function has default arguments. Previously only the one with all parameters was emitted
- Missing required OTP
:crypto
module is now detected on startup - Completions provider is now properly returning quoted remote calls. Previously accepting a suggestion would insert invalid code
- Fixed regression and crash on
phoenix-heex
files. This problem was introduced in v0.18.0 and broke completions, definition and hover - Fixed a crash during struct field inspection when the struct cannot be instantiated
- Fixed a crash in implementations provider when behaviour implementation is a delegate or a guard
- Fixed a crash on invalid delegate AST node
- Fixed a crash when incorrect AST resulted in mismatched alias stack pop operations
- Fixed a crash on older elixir versions when compiler diagnostic message is not a binary. This problem was introduced in v0.18.0
- Fixed invalid argument passed to fallback implementation for Apply spec code action
- Workspace symbols provider now correctly navigates to functions with default arguments
- Elixir 1.16 support
- Diagnostics provider now returns related info with code positions. This feature works best with elixir 1.16 allowing for navigation to invalid syntax elements like mismatched brackets
- On type parser has been improved and extended. It now keeps a cache of parsed AST and extracted document metadata. Most of the providers has been updated to reuse this metadata eliminating the need for on demand parsing. This should make completions, hover, etc more snappy. The previous implementation was particularly not efficient for completions provider that would parse the file twice for each request
- Phoenix integration improved. Go To Definition can now navigate to controllers when inside a Phoenix scope. Complete suggestions in Phoenix.Router now return controllers and actions Gustavo Aguiar
- Diagnostic provider returns deprecated and not used tags on certain warnings. This allows editors for visually marking code ranges using deprecated APIs and not used code constructs
- Diagnostics are now stored along with document version. Diagnostic publishing algorithm has been improved to prefer recent parser diagnostics over stale build diagnostics.
- Parser is now able to provide diagnostics in
untitled:
schema files based onlanguageId
document property - On type formatting and Folding ranges providers are now disabled on
eex
documents aseex
was never supported in those providers - OTP 26 compatibility warning on Windows updated to direct users to install 26.2+ version
- Struct field completions now work on functions returning remote type sarah kate
- Type inference from guard expressions added Nguyễn Văn Đức
- Fixed crash in document symbols provider on invalid attribute nodes
- Fixed crash on cases where some compiler generates diagnostics with invalid position
- Fixed test lense provider on code using
Elixir
proxy - Fixed debugger crash when stacktrace frame returns
undefined
instead of arguments list - Improved LSP compatibility on document synchronization. Previously the document version after applying changes was increased. This bug was present since the initial code release but started causing issues with discarded diagnostics in Helix editor since v0.17.0 started publishing diagnostics with document version
- Fixed invalid result returned from build process when handling error during project reload
elixir_ls_debugger
app has been renamed todebug_adapter
to better reflect that it is not a debugger but an adapter implementing Debug Adapter Protocol. Similarly, the launch scripts has been renamed todebug_adapter.sh
anddebug_adapter.bat
respectively. Editor extensions and custom launcher scripts may need an update
- Improved validation of language server configuration
- Improved validation of debugger launch configuration
- Diagnostics with no file are now emitted on
mix.exs
. Previously they were skipped - Debugger emits better error messages when launch configuration is invalid
- Language server made more predictable on critical errors (e.g. project directory no longer existing)
- Fixed crash when callback from docs cannot be matched with callbacks from typespecs
- Fixed invalid expansion of
Enum.fetch
in type inference engine - Handled a few cases of invalid unicode binaries
- Fixed crash in debugger when stacktrace frame cannot be fetched
- Increased timeout on variable evaluation
- Fixed crash in debugger when inspecting an improper list
- Fixed crash in debugger when reloading test modules and
:code.delete/1
fails
- Capitalized map keys are no longes suggested in completions. Such keys result in invalid alias expression
- Completions should be able to infer struct and map keys in more cases when variable is a result of function returning struct or map
- ElixirLS will refuse to start if unable to create its files. This should limit the number of cases when server starts in faulty state
- Fixed crash in completions when attribute expands to atom not being an elixir module
- Fixed crash in completions when map has capitalized atom keys
- Fixed crash on invalid alias expressions
- Fixed crash when suggestion a variable that is known to be a struct
- Removed 5s timeout on writing debugger output. This led to crashes under heavy load
- Fixed language server crash when diagnostic use
IO.chardata
file location
- Added compatibility warning on OTP 26 and Windows
- Raise more filesystem related errors to user. The server will now refuse to start if it cannot create its files in
.elixir_ls
directory
- Fixed crash in completions when local function accidentally fuzzy matches
sigil_
prefix - Workaround for elixir crash when fetching docs and cwd is
nil
- Fixed crash in completions with invalid struct module
- Fixed crash in completions when
__struct__
cannot be evaluated - Fixed crash in hover when inspecting not know metadata
- Fixed crash in test code lense when describe block cannot be found
- Fixed crash in debugger when process exits or continues during async variables retrieval
- Fixed crash when publishing diagnostics and stacktrace entries does not specify file
- Fixed crash in build when the server tries tu purge and recompile project and it is not currently loaded
- Fixed issue in formatter not being able to format files in non mix projects
- Fixed language server crash when unable to suggest contracts
- Fixed language server when handling delete file notification and tracer is not behaving correctly
- Fixed crash in completions when defoverridable refers to delegated function
- Fixed crash in type inference engine related to invalid handling of Map functions arguments
- Fixed crash in completions when overridable function has non trivial parameters
- Added missing clauses handling function call expansion in type inference engine
- Bring back partial support for elixir 1.12. Note that it's best effort and not all features will work
- Directory issues with fish launch script fixed Jamin Thornsberry
- RTX activation in launch script now uses
env -s
instead ofactivate
Walton Hoops - Language server is now more resilient when cwd changes. Workaround added for elixir issue when Path.expand would unnecessarily evaluate File.cwd!
- Tracer should now be able to recover when DETS files are corrupted
- elixir_sense plugin crash is now handled and should not prevent completions
- Fixed crash in debugger when on_load fails during module interpreting
- Fixed crash in completions due to missing regex escapes
- Fixed crash in document symbols on invalid typespec
- Fixed crash in test code lense when test block cannot be found
- Launch script properly uses custom
Mix.install
. This error made it fail on elixir 1.16. Not e that elixir 1.16 is not yet supported - Fixed crash in type inference incorrectly matching on typespec with arguments
- Fixed crash in completions when callbacks from typespecs do not match those from docs
- Invalid environment variables config is now raised as message. Previously it would crash the server
- Compile tracer is more error tolerant. It should now handle invalid DETS files and missing directories
- Dialyzer is more error tolerant - it should now be able to recover from broken beam files on elixir 1.14+
- Fixed crash when mix is unable to load deps. Loading of deps should now emit diagnostics
- Fixed crash in complete when editing a map/struct
- Fixed a crash in parser on
untitled:
schema files - Fixed a crash when emitting diagnostics and cwd is not present
- Dialyzer will now store beams in separate directories for each elixir/OTP combo. This should limit number of errors due to beam errors
- Debugger will now use current directory if
projectDir
is not set. This makes it easier to setup in folderless configuration
- Fixed complete crash with non Unicode characters
- Fixed hover crash with functions with no args
- Fixed complete crash when one of the apps gets unloaded
- Fixed complete crash when struct/map has non atom keys
- Fixed complete crash on non keyword import options
- Fixed crash when type was incorrectly recognized
- Fixed hover crash due to system limit
- Fixed fish shell init script to work with paths containing whitespace Julia
- Document symbols handle some more cases of invalid AST
- Language server is now more careful with current directory. It should make it more stable when project dir cannot be changed into
- Various cases of current directory usage fixed. This should improve stability during build when cwd changes
- All references to
Mix.Project
moved under a build lock or made go through cache. This should improve stability during build when Mix.Project stack changes - Fix error prone usages of
String.starts_with?
as a way of checking if file is in directory - Language server made more stable with
autoBuild
disabled
- Fixed crash when language server tried to respond to cancelled requests. The bug was longstanding but changes from v0.17.2 exposed it
- Fixed crash in hover provider when markdown header cannot be formatted
- Fixed language server crash when reloading due to configuration change. The bug was longstanding but changes from v0.17.2 exposed it
- Fixed a crash when hovering over struct field access
- Fixed a dot call inference crash affecting various providers
- Workaround AST parsing crash affecting various providers
- Better rendering of functions with many arguments in hover
- Document symbols correctly annotate ranges of last element in do-block
- ElixirLS will emit LSP and DAP telemetry events that clients can subscribe to
- Fixed compilation error on modules using
Application.compile_env
. This problem was introduced in v0.17.0 - Fixed a problem when old diagnostics would not be cleared after server restart
- Fixed a crash when emitting a diagnostic during file edit
- Language Server now emit parser errors and warnings on type in .ex, .exs and .eex files
- Language Server provides better completions for elixir reserved words. Thanks Kevin Kalb for initial work
- Debugger now automatically breaks on
Kernel.dbg
macro. This allows inspecting variables, evaluating expressions and stepping through piped function calls. A settingbreakOnDbg
defaulting totrue
can be used to turn off that behaviour - Progress reports and cancel support added in debugger. This can be used to terminate long running evaluate requests.
- Improved rendering of documentation in hover provider
- Improved support for Unicode identifiers and atoms. Elixir supports Unicode identifiers since v1.5 and now all ElixirLS features should work with them
- Added support for fish shell Sergey Kislyakov
- Consistently render parens for basic types in Suggest Contracts Code Lense and markdown
- Debugger should now be better at handling some common crashes
- Debugger now optimistically translates erlang versioned variable names to elixir names
- Debugger emits better warnings when modules cannot be interpreted
- Debugger can be launched with
"noDebug": true
. This allowsRun Without Debugging
in VSCode - Debugger will now emit exit code via
exited
DAP event. This allows tracking mix task result in debug session e.g. when running tests - New setting added to debugger
exitAfterTaskReturns
, defaulting totrue
- controls wether to end debug session when mix task returns - Language server will now reset cwd to project root after interrupted build
- All ElixirLS dependencies are now vendored and should not conflict with client project dependencies
- ElixirLS unloads deps used during startup and compilation
- *nix launch scripts has been refactored and split into dedicated bash, fish, zsh Florian Neumann
- A workaround for elixir formatter accidentally compiling the project has been implemented
- Language fences added in complete/signature/hover provided markdown fragments
- Language server stability should be improved by unloading project's applications. This works around elixir not updating application controller state after recompilation
- Completions provider is now able to suggest keyword params on macros. Previously only functions was supported
- Added
float
to list of bitstring modifiers in completions provider
- Debugger will not allow mix task with a
/
- A bug preventing
do
completion when there's a whitespace after cursor has been fixed - Document symbol provider will not crash when unable to get selection location for AST node
- Signature provider now highlights the correct parameter in calls with default arguments when default arguments are not after required ones
- Completions now work correctly after Unicode characters
- Do not error if client returns
null
toworkspace/configuration
reverse request - Fixed a crash when getting a parameter name from complex parameter type. This bug made completions on
:pg
module fail. - Fixed invalid aliases in scope inference when a submodule
__MODULE__.Some
is used
- Debugger will terminate the debug session and return result code when mix task returns. Previously, debugger would continue running. If the new behavior is not wanted, please set
exitAfterTaskReturns
tofalse
in your launch configuration debugExpressionTimeoutMs
debugger launch configuration setting no longer has any effect. DAPcancel
request can now be used to terminate long running debugger evaluate requests.- Debugger will now auto break on
Kernel.dbg
macro. If this is not intended consider settingbreakOnDbg
tofalse
in your launch configuration
- Added support for rtx version manager.
- Language server now returns diagnostics in config files for current configuration. Previously when there were compilation errors in config files an error with stacktrace would be returned on
mix.exs
instead of the config file. - Configuration management has been refactored and migrated to pull based approach. This addresses recent problem on VSCode when the server would start with default settings after a restart. Pull based
workspace/configuration
request has been added in LSP 3.6 and the pull basedworkspace/didChangeConfiguration
with params is deprecated. - Language server now uses call arity in definition, implementation, references and hover providers. This means that if there are multiple arity variants, the documentation for correct ones will be presented. In case of incomplete code all variants with arity greater or equal to the number of arguments are considered.
- Debugger is now able to set breakpoints in multiple modules in case one line maps to many modules
- Completions provider will now trigger signature help when accepting a completion with 0-arity function when there higher arity versions available.
- Completions provider will now trigger signature help when accepting a completion with a typespec of arity greater than 0.
- Mix project modules pruning is more robust. This should address some rare crashes e.g. when
deps
directory is removed during a build. - Logger interception is more robust. This should address some rare crashes observed on elixir 1.15.
- Install script no longer unnecessarily starts and stops applications. This should improve launch time.
- On Unix systems launch script now uses
SHELL
environment variable to decide if it should prefer bash or zsh. Previously, bash was preferred. - Providers now rely on parser
token_metadata
when determining module and functions scopes. This allows for more accurate suggestions. Previous implementation was not able to provide module attribute completions inside module body when there were defs after the cursor. - Language server now provides documentation for builtin module attributes in hover and completions providers Nguyễn Văn Đức.
- Hover provider returns documentation on reserved words and variables.
- References provider is now able to find references to functions and module in current file. Previously only compiled modules were scanned for references.
- Hover provider returns simple documentation for functions, typespecs and modules from the current file. Previously nothing was returned and a crash was logged.
- Completions provider returns signatures for typespecs defined in current file.
- Improved handling of defs with default params in signature help. Now only head signature is returned.
- Language server is now able to provide signatures from behaviour or protocol in many cases.
- Definition and references provider are now able to return result on variable remote calls when variable is known to be a module.
- References provider is now able to track variable references outside of modules.
- Improved type inference when variable is reassigned.
- Providers consider local macros only after definition. This should improve correctness and reduce number of invalid completions.
- Improved handling of
alias
andrequire
withwarn:
option.
- Fixed crash in debugger when setting a function breakpoint on not existing function
- Setting breakpoints in
Inspect
protocol implementations is now forbidden. This protocol is used internally and hitting a breakpoint resulted in deadlock. - Debugger no longer interprets
JsonV.Encoder
protocol (a vendored version ofJson.Encoder
) used internally. - Fixed a case when completions provider would return only 1 variant of a function with multiple arities.
- Completion and signature providers correctly return multiple
@spec
clauses. Previously only the first one was formatted properly. - Changing settings no longer results in notification about changed mix target.
ELS_ELIXIR_OPTS
environment variable was not correctly word split when passed to elixir command.- Fixed a crash when launching debugger with default mix task (equivalent of running
mix
). - Completions provider suggests aliased structs after
%
Nguyễn Văn Đức - Completions provider no longer returns
@@
. - Fixed a crash in completion provider when type in callback matched local without parens.
- Improved
Mix.Task
module subtype detection. Previously are submodules ofMix.Tasks
were considered. Now only ones exportingrun/1
. This error resulted in unnecessary completions. - Fixed a case when completions provider would suggest additional edit with
alias Elixir
. - Fixed a case when completions provider would suggest
Elixir.Elixir
Nguyễn Văn Đức - Correctly return
alias
subtype in completions provider when suggesting an alias. Previously module was returned even if such module does not exist. - Completions provider suggests alias for all matched module parts. Previously only first match was considered.
- Completions provider no longer suggests alias when the hint has more than one part. This means that additional edits with aliases will not be returned after
Some.Module.
. - Type of pinned variables is now correctly inferred Nguyễn Văn Đức
- Fixed AST parsing of protocol implementations without
for:
. - Fixed a case when definition provider was unable to locate variables inside multiline struct.
- Implementation provider works with macrocallback implementations.
- Fixed endless recursion when expanding
use
macro. This caused definition provider to hang when navigating toKernel
functions/macros. - Fixed rendering of docs for builtin typespecs.
- Fixed a crash with definition provider over
__MODULE__
. - Fixed a case in AST parser when
@spec
or@callback
would get overwritten. Now all definitions are collected. - Fixed rare crashes on elixir 1.15 with cursor over submodule of an attribute or variable.
- Signature provider no longer reveals details of
@opaque
typespecs. - Fixed order of signatures in completions provider.
- Fix signature render of erlang functions with multiple EIP48 documentation entries (e.g.
:erlang.system_info/1
). - Fixed render of callback signatures. Previously they were marked as
@spec
, now@callback
or@macrocallback
. - No parens locals are no longer treated as calls on elixir 1.15+.
- Fixed cases when crash in AST parser would produce invalid metadata.
- Fixed crash in completions with nested dot expression on elixir 1.15.
- Fixed AST parsing when
quote
was used as variable.
- The language server will get configuration
workspace/configuration
if the client supports it. Previously it relied onworkspace/didChangeConfiguration
notification.
- This is the first release supporting OTP 26. Unfortunately due to bugs in OTP only 26.0.2+ is supported. See 886 and 923 for details
- Fixed crash when handling
workspace/didChangeWatchedFiles
whenproject_dir
not yet set - ExUnit test tracer is now under build lock. This should fix crashes due tu race conditions
- Fixed completion of remote calls matching locals without parens (e.g.
Map.drop
whendrop
is local without parens fromecto_sql
) Milo Lee
- This is the first release supporting Elixir 1.15. See 898 for details
- Main distribution mode switched to
Mix.install
script. This allows running ElixirLS built with a correct combination of OTP and elixir. Previously used.ez
releases suffered from numerous problems stemming from version incompatibilities (e.g. 193) - elixir_sense replaced many of its custom source parsing internals with elixir 1.13+ Code.Fragment APIs
require
andimport
are now understood by elixir_sense. This improves accuracy of definition, hover, references and complete providers. For example only imports matchingonly
andexcept
options will now be suggested by complete provider.- When accepting a completion with a not required macro a
require
directive will be now added to module. - Reimplemented
use
macro expansion. This should improve accuracy. - Better handling of typespecs in elixir_sense. This should improve accuracy in modules with defs and types sharing the same name.
- Added ability to pass command line options to elixir and erlang via
ELS_ELIXIR_OPTS
andELS_ERL_OPTS
. This allows for setting a node name and connecting remotely to language server and debugger.
- Fixed a longstanding bug with formatter not respecting
.formatter.exs
when code is compiling (requires elixir 1.15) Thomas Depierre - Fixed invalid alias handling with submodules
- Elixir 1.12 is no longer supported
.ez
archive based distribution is now deprecated
- added option
elixirLS.autoInsertRequiredAlias
controlling if complete provider will auto insert aliases Zeke Dou
- Pin elixir_sense, dialyxir and jason versions to ensure compatibility
- Reduce long file names. This should fix compilation issues on some filesystems
- Fixed crash in dialyzer
- Fixed regression in debugger not respecting
MIX_ENV
andMIX_TARGET
- Silence output from
dialyxir
making client disconnect from the server on elixir < 1.14 - Avoid serializing PID to JSON
- Fixed invalid encoding of messages with unicode strings. This should resolve issues when starting the server in in non-ASCII path
- Fixed compatibility with elixir 1.12 and 1.13 Maciej Szlosarczyk
- Print correct version
- Reorder startup sequence to avert mix crash
- Numerous improvements to variable tracking. This should make navigation to variable definition and references work correctly Samuel Hełdak
- Doctests can now be run via Test UI Carl-Foster
- Fixed completions of records defined in the same file
- Fixed support for
alias __MODULE__
- Silent crashes in dialyzer fixed
- Document symbol provider now does not crash on incomplete typespec
- Debugger now properly tracks running processes. Previously UI was not updated when new processes start or running not monitored processes exit
- Debugger now respects
MIX_TARGET
environment variable - Undefined function diagnostics no longer emitted from
mix.exs
dependencies. Elixirmix
swallows those warnings since 1.10 - Builds now use
--all-warnings
flag onmix compile
. This should result in more predictable diagnostics in umbrella apps. - Completion provider returns typespecs for struct properties in documentation if struct module defines type
t()
- Debugger now returns type of breakpoint in the hit event as required by DAP
- Fixed crash when elixir-ls is run in a directory without
mix.exs
- References provider now can find references to elixir modules. Previously modules were found only when a function or macro from that module was called
- Typespecs from behaviour module are used on callback implementations in completions, hover and specification providers
@after_verify
attribute added in elixir 1.14 is recognized as builtin- Fixed edge cases when private def would overshadow a public one
- Quoted expressions are now skipped when code AST is analyzed. There is low chance anything useful can be extracted from them
- Submodule implicit alias behavior is now correctly implemented. This should improve quality in various providers
- Fixed crash in references provider when reference does not have a line (e.g. in phoenix live views)
- Mix Formatter now properly formats elixir-ls code from the top directory
- Major refactoring of elixir-ls server driven by Steve Cohen is under way. It's not yet complete and can be tested by enabling experimental server. Thanks to others involved (Scott Ming, Samuel Hełdak)
- Language server now runs with consolidated protocols. Consolidation is disabled on each build with
--no-protocol-consolidation
flag onmix compile
. This should make the server faster. The side effect is more protocol consolidation warnings printed to the console on elixir < 1.14.
- This is the last release supporting elixir 1.12
- Completions now return LSP 3.17
labelDetails
. This allows to provide more contextual details to completion items - Protocol implementations are no longer auto aliased
- Completions requiring auto aliasing are deprioretized and visually marked
- Optimization of references tracing. It should make difference especially in macro heavy modules (e.g. Absinthe schemas)
- Improvements to dependency reloading on switching branches.
- Improved compatibility on Windows
- Definitions provider improved handling of multiline variables timgent
- Definitions provider now finds correct arity function timgent
- CI pipeline now runs on Windows and Linux
- Minimum version of Elixir is now 1.12.3
docsh
fallback for erlang documentation removed. EEP 48 is supported on OTP 23+- Code action prefixing unused variables with
_
has been removed due to various problems
Improvements:
- Support for list destructuring and comprehension in
for
andwith
expressions. ElixirLS is able to provide completions for destructured list element - Introduction of compile tracers. ElixirLS now builds a databases basing on compile tracers API available since elixir 1.10. References provider has been rewritten to support tracer database
- Code action prefixing unused variables with
_
Luca Cervello - Complete now proposes not aliased modules and adds required
alias
Ajay - Custom command running mix clean added. Useful when server hits a compilation error
- Custom command returning tests in
.exs
file - Better handling of Phoenix components Aaron Tinio
- Test code lense improvements in umbrella apps 我没有抓狂
- Start script improved when
$XDG_CONFIG_HOME
is not set Sahn Lam - Deprecated symbols are now deprioretized in completions
- Improvements to logging
- Dialyxir is now vendored. This should avert dependency conflicts
- ElixirLS emits more helpful error messages in case of common problems
- Automatic builds can now be disabled Hans
- Better module name suggested for
defprotocol
Milo Lee - Improved LSP position handling
Fixes:
- Several crashes with
untitled:
schema URIs fixed - Longstanding bug in dependencies reloading leading to infamous
** (Mix.Error) Can't continue due to errors on dependencies
fixed - Fixed crash when formatting a file with syntax errors Steve Cohen
- Fixed several crashes in document symbols Steve Cohen
Improvements:
- Elixir 1.14 support
- Document symbols now return non empty selection ranges. This fixes breadcrumbs behavior in vscode
- Fixed dialyzer crash on OTP 25
- Added support for mix formatter plugins (Dalibor Horinek)
- Debugger now returns detailed info about ports, pids and function variables
- Debugger completions now return detail field
- Diagnostic positions now return column position returned by compiler (elixir 1.14+)
- Diagnostic position fixed to never return invalid negative values
- An exact
do
keyword completion is now preselected and more preferred overdefoverridable
- Fixed hexdocs links in hover for aliased modules and imported functions (Milo Lee)
- Better module name suggestions in Phoenix
live
directory (Manos Emmanouilidis)
Deprecations
- Minimum version of Elixir is now 1.11
Improvements to debugger adapter:
- A lot of new features around breakpoints: function breakpoints, conditional breakpoints, hit count and log points #656, #661, #671 (thanks Łukasz Samson)
- Completions in debugger eval console #679 (thanks Łukasz Samson)
- Debugger evaluate results can now be expanded #672 (thanks Łukasz Samson)
- Messages in the queue of debugged process can now be examined #681 (thanks Łukasz Samson)
- Debugger can now handle pause and terminateThread requests #675 (thanks Łukasz Samson)
- Clipboard and hover eval is now supported in debugger #680 (thanks Łukasz Samson)
- Auto interpreting can now be disabled #616 (thanks Jason Axelson)
- Debugger conforms better to DAP 1.51 specification #678 (thanks Łukasz Samson)
Improvements to language server:
- Language server can now be restarted via custom command (e.g. from VSCode) #653 (thanks Łukasz Samson)
- Hover provider adds links to hexdocs.pm #574 (thanks Fenix)
- Numerous cases of invalid UTF8-UTF16 position conversions fixed #677 (thanks Łukasz Samson)
- Improved markdown wrapping #663 (thanks 我没有抓狂)
- Improved MIX_TARGET environment variable handling #670 (thanks Masatoshi Nishiguchi)
- defmodule snippet now suggests a module name #684 (thanks Manos Emmanouilidis)
- Constant recompilation on Nerves projects fixed #686 (thanks Łukasz Samson)
- Invalid negative positions in diagnostics are no longer emitted #695 (thanks Łukasz Samson)
- Improvements to document symbols provider (https://github.com/elixir-lsp/elixir-ls/commit/1e38db4c9dd9277dfffd9563286f652e3d617a5f) (thanks Łukasz Samson)
- Added support for OTP 25 new dialyzer options (https://github.com/elixir-lsp/elixir-ls/commit/0da7623f644f79559699e9f002820ad9219d108d) (thanks Łukasz Samson)
- Improvements to complete (operator, sigil, bitstring) #150, (https://github.com/elixir-lsp/elixir_sense/commit/33df514a1254455f54cb069999454c7e8586eb2d) (thanks Łukasz Samson)
- Improved alias resolution (elixir-lsp/elixir_sense#151) (thanks Łukasz Samson)
- Fixed crash on OTP 24.2 (https://github.com/elixir-lsp/elixir_sense/commit/72f3d4ffee3c11c289d47d14a6c5f6e1a4afacb4) (thanks Łukasz Samson)
- Better function detection when hovering inside string interpolation #152 (thanks Milo Lee)
- Support for external plugins to elixir_sense #141 (thanks Zach Daniel)
VSCode:
- To Pipe and From Pipe code transformation command #182 (thanks Paulo Valente)
- Restart language server command added #218 (thanks Łukasz Samson)
- New settings related to auto interpreting in debugger (https://github.com/elixir-lsp/vscode-elixir-ls/commit/4294f9f0da6819e519aa4278f5f2d553ff054dac) (thanks Jason Axelson)
- New OTP 25 dialyzer settings (https://github.com/elixir-lsp/vscode-elixir-ls/commit/50a8a53fa79c14d2ea4031f872ec3d7cd32155f5) (thanks Łukasz Samson)
- Compile time environment variables can now be set in extension config #213 (thanks vacarsu)
- Additional watched extensions can now be set in extension config #197 (thanks Vanja Bucic)
- Improved unquote_slicing highlighting #221 (thanks Milo Lee)
- Improved string interpolation highlighting #229 (thanks Milo Lee)
- Improved regex with < highlighting #226 (thanks Tiago Moraes)
- Extension updated to use LSP v3.16 #227 (thanks Łukasz Samson)
Housekeeping:
thanks Łukasz Samson, Thanabodee Charoenpiriyakij, Daniils Petrovs, Jason Axelson
Improvements:
- Elixir 1.13 support (thanks Łukasz Samson) #620
- Fix formatting performance problems with .formatter.exs in subdirectories (thanks Jon Leighton) #609
- Allow watching additional extensions via
additionalWatchedExtensions
(thanks Vanja Bucic) #569 - Support for setting additional environment variables (thanks vacarsu) #622
- Allow configuring debugExpressionTimeoutMs (thanks Jason Axelson) #613
Changes:
- Default
fetchDeps
to false (thanks Jason Axelson) #633fetchDeps
causes some bad race conditions, especially with Elixir 1.13
Bug Fixes:
Housekeeping:
- Add initial mkdocs documentation website (thanks Daniils Petrovs) #619
- Update to elixir-lsp fork of mix_task_archive_deps (thanks Jason Axelson) #628
VSCode:
- Change the default of
fetchDeps
to false (thanks Jason Axelson) #189 - Allow configuring the debug expression timeout (thanks Jason Axelson) #210
- Set which pairs of brackets should be colorized (thanks S. Arjun) #207
Improvements:
- Add a "do" autocompletion (thanks Jason Axelson) #593
- Add an "end" autocompletion (thanks Maciej Szlosarczyk) #599
Housekeeping:
- Remove dependency on forms (thanks Awlexus) #596
- CI releases: utilize auto selection of latest patch version (thanks Po Chen) #591
- Change minimum OTP version to 22 in warning message (thanks Thanabodee Charoenpiriyakij) #592
- Fix various typos (thanks Kian Meng Ang) #594
Improvements:
- Basic single-file (e.g.
.exs
) support (thanks Łukasz Samson) #562 (and VSCode #195) - Add commands for piping and unpiping text (thanks Paulo Valente) #515
- Make
test
snippet consistent by including quotes (thanks Mitchell Hanberg) #542 - Smarter spec suggestions in protocols and implementations (thanks Łukasz Samson) #549
- Trigger signature_help on comma (thanks Jared Mackey) #564
- Watch HEEx and Surface files (thanks Marlus Saraiva) #583
- ElixirSense: Add more fuzzy matching (thanks Maciej Szlosarczyk) #131
- ElixirSense: Add inference when using dependency injection with module attributes (Gustavo Aguiar) #133
- ElixirSense: Add support for EEP-48 (updated documentation storage format) (thanks Łukasz Samson) #132
- Watch
.heex
and.sface
templates (thanks Marlus Saraiva) #583
Bug Fixes:
- Fix suggest contracts windows regression (thanks Łukasz Samson) #531
- Support exunit describe and test calls with unevaluated names (thanks Jonathan Arnett) #537
- Improve test runner to use exunit testPaths and testPattern (thanks Étienne Lévesque) #500
- Fix race-condition in suggest contracts (thanks Łukasz Samson) #544
- Fix
@doc false
and@moduledoc false
for folding ranges (thanks Jason Axelson) #580 - Guard against sending -1 line or column locations in LSP messages (thanks Oliver Marriott) #558
- Avoid crashing on manipulatePipes errors (thanks Paulo Valente) #576
- Handle Nova long form paths in rootURI (thanks Raul Chedrese) #579
- Fix invalid glob pattern in watchers registration (thanks Łukasz Samson) #586
- Handle
.
and symlinks as the project dir (thanks Łukasz Samson) #587
Housekeeping:
- Minor iteration/performance improvements (thanks Andrew Summers) #527
VSCode:
- Support optional
~S
sigil at start of doc folding region (thanks thepeoplesbourgeois) #179 - Fix run test command to save document before running tests (thanks Étienne Lévesque) #165
- Support HEEx and Surface files (thanks Marlus Saraiva) #204
Deprecations
- Minimum version of Elixir is now 1.10
- Minimum version of Erlang/OTP is now 22 These are keeping in line with our Version Support Guidelines: https://github.com/elixir-lsp/elixir-ls/blob/master/DEVELOPMENT.md#version-support-guidelines
Improvements:
- Use fuzzy matching for function completion (thanks Po Chen) #491
- For example: "valp" will match
validate_password
and "Enum.chub" will matchEnum.chunk_by/2
- Note: the plan is to extend this fuzzy matching to other types of completion in the future
- For example: "valp" will match
- Support auto-generating folding ranges (textDocument/foldingRange) (thanks billylanchantin) #492
- Snippet variants with n-1 placeholders to use after pipe (thanks Leonardo Donelli) #501
- Make launcher script more robust and support symlinks... more robustly (thanks Joshua Trees) #473
- Add support for Elixir 1.12 (thanks Łukasz Samson) #523
Bug Fixes:
- Make expandMacro a custom command (thanks Łukasz Samson) #498
- Scope expandMacro command to ElixirLS server instance (thanks Tom Crossland) #505
- Suppress setup script stdout output on windows (thanks Po Chen) #497
Housekeeping:
- Improved support for OTP 24 (thanks Tom Crossland) #504
- Note that OTP 24 isn't officially supported since it is not yet released
- Add meta-test to ensure that all commands include the server instance id (thanks Jason Axelson) #507
- Fix test flakiness by ensuring build is complete (thanks Łukasz Samson) #511
VSCode:
- Fix test lens shell escaping on Windows (thanks Étienne Lévesque) #175
- Add hrl to watched files (thanks Łukasz Samson) #177
- Fix CI issues (thanks Łukasz Samson) #178
- Add support for
expandMacro
command (thanks Łukasz Samson) #176
Deprecations
Deprecate non-standard elixirDocument/macroExpansion
command. It is being replaced with the expandMacro
custom command. See #498 for details. It is planned to be fully removed in 0.8
Bug Fixes:
- Skip non file: URI scheme notifications (thanks Łukasz Samson) #475
Housekeeping:
- Fixes tests not compiling after first run (thanks Étienne Lévesque) #463
Bug Fixes:
- Revert "Make wrapper script more robust" (thanks Jason Axelson) #471
Improvements:
- Add support for
textDocument/implementation
("Go to Implementations" and "Peek Implementations") (thanks Łukasz Samson) #415 - More specific
CompletionItemKind
for autocomplete (thanks Jason Axelson) #419 - Support ASDF installed via homebrew on macOS (thanks Fabian Stegemann) #428
- Make launcher script more robust and support symlinks (thanks Joshua Trees) #445
- ElixirSense: Fix autocomplete for many_to_many associations (thanks Damon Janis) elixir_sense #120
- Experimental: Add code lens to run tests (thanks Étienne Lévesque) #389
- Note: This is disabled by default for now
Bug Fixes:
- Fix multiple issues with text synchronization (thanks Łukasz Samson) #411
- Purge consolidated protocols before compilation (thanks Łukasz Samson) #406
- Don't add stream_data to release archive (thanks Tomasz Kowal) #417
- Fixes bug introduced in #411 so it doesn't affect a released version of ElixirLS
- Do not insert
end
afterdo:
(thanks Łukasz Samson) #426 - Fix awaiting_contracts not getting responses (thanks Łukasz Samson) #433
- Fix invalid value set in write_manifest_pid (thanks Łukasz Samson) #430
- Give better warning for incomplete erlang install (thanks Jason Axelson) #434
- Fix some test lenses bugs (thanks Étienne Lévesque) #443
- URI - file system path conversion fixes (thanks Łukasz Samson) #447
- Significantly improve debugger stability (thanks Łukasz Samson) #457
- Fix invalid snippet inserted when completing fun with record argument (thanks Łukasz Samson) #458
- Return correct location for defs with when (thanks Łukasz Samson) #464
Housekeeping:
- Switch from Travis CI to GitHub actions (thanks Jason Axelson) #420
- Add an .editorconfig for the project (thanks Jeff Jewiss) #432
- Add test coverage to packet stream and wire protocol modules (thanks Łukasz Samson) #429
VSCode:
- Fix debugger not starting on windows (thanks Łukasz Samson) #154
- Add fodling markers for @doc, @moduledoc, @typedoc, and #region (thanks Michael Johnston) #157
- README update to reflect editor.acceptSuggestionOnEnter change (thanks Maximilien Mellen) #159
Improvements:
Changes:
- Remove query prefixes from workspace symbol search (the functionality is now longer supported by VSCode) (thanks Łukasz Samson) #396
Bug Fixes:
- Fix formatting on windows (thanks Po Chen) #375
- Improve formatting speed (thanks Matt Baker) #390
- Fix warnings and errors around starting wx (thanks Łukasz Samson) #388
- This fixes an issue when running ElixirLS in VSCode remote dev containers
Housekeeping:
- Add GitHub action to auto-publish releases (thanks Po Chen) #384
- Spec compliance, race condition fixes, and more tests (thanks Łukasz Samson) #399
VSCode:
- Bump deps and switch to newer vscode platform version (thanks Łukasz Samson) #148
- Subscribe Copy Debug Info command for disposal (thanks Tan Jay Jun) #149
- Turn files in stack traces into clickable links (thanks Tan Jay Jun) #152
VSCode:
- Fix broken packaging (issue #145)
Potentially breaking changes:
- Do not format files that are not listed in
inputs
of.formatter.exs
(thanks Tan Jay Jun) #315 - Drop OTP 20 and Elixir 1.7.x support and set some version support guidelines (thanks Jason Axelson) PR #337
Improvements:
- Add Ecto completion plugin from ElixirSense (thanks Marlus Saraiva) #333
- Supports generic completion items and moves doc snippet completions to ElixirSense because there's more context there (more detail available in elixir_sense#104)
- Add eval support in debugger to see values of variables in scope (thanks Dmitry Shpagin) #339
- Use ElixirSense's error tolerant parser for document symbols (thanks Łukasz Samson) #322
- Add more auto-completion trigger characters:
& % ^ : !
(thanks Łukasz Samson) #327 - Disable busy-wait in BEAM to reduce CPU usage (thanks Jason Axelson) #331
- Update HoverProvider to return MarkupContent (thanks Jonathan Arnett) #342
- In debugger, exclude modules with wildcards (thanks Fabian Stegemann) #363
- Support Elixir 1.11 (thanks Łukasz Samson) #360
Bug Fixes:
- Fix issue with formatting and deps handling (thanks Thanabodee Charoenpiriyakij) #345
- This would manifest as
** (Mix.Error) Unknown dependency :ecto_sql given to :import_deps in the formatter configuration.
- This would manifest as
- Fix formatting files in umbrella projects (thanks Drew Olson)#350
- Fix callback suggesions (thanks Łukasz Samson) #359
House keeping:
- Use error tolerant parser for WorkspaceSymbols (thanks Łukasz Samson) #322
- Fix the link in the README to releases (thanks RJ Dellecese) #312
- Update the dialyzer section in the readme (thanks Serenity597) #323
- Add vim-lsp to plugin list (thanks Thanabodee Charoenpiriyakij) #340
- Cleanup test output (thanks Jason Axelson) #347
- Remove the default .tool-versions file (thanks Jason Axelson) #351
- Fix up the test suite (thanks Jason Axelson) #352
- And re-enable dialyzer #354
Note: MIX_TARGET
support was added in 0.5.0 but wasn't added to the changelog until later:
- Support
MIX_TARGET
so the language server can have target specific contexts, like with Nerves (thanks Jon Carstens) #299
VSCode:
- Debugger does not successfully launch on Windows (thanks Craig Tataryn) #115
- Add support to highlight octal numbers correctly (thanks Thanabodee Charoenpiriyakij) #128
- Followup improvement #137
- Add support to highlight binary numbers correctly (thanks Thanabodee Charoenpiriyakij) #133
- Add support to highlight
...
correctly (thanks Thanabodee Charoenpiriyakij) #130 - Highlight atoms as
constant.language.symbol.elixir
instead ofconstant.other.symbol.elixir
(thanks Omri Gabay) #142
Improvements:
- Support completion of callback function definitions (thanks Marlus Saraiva) #265
- Support WorkspaceSymbols (go to symbol in workspace) without dialyzer being enabled (thanks Jason Axelson) #263
- Give more direct warnings when mix.exs cannot be found (thanks Jason Axelson) #297
- Add completions for
@moduledoc false
and@doc false
(thanks Jason Axelson) #288 - Support
MIX_TARGET
so the language server can have target specific contexts, like with Nerves (thanks Jon Carstens) #299
Changes:
- Major improvement/change: Improve autocomplete and signature help (thanks Marlus Saraiva) #273
- Don't insert arguments when completing a function call (almost always had to be deleted)
- Autocomplete triggers signature help
- Don't insert a
()
around the function call if the formatter configuration does not require it - Further autocomplete refinements (thanks Marlus Saraiva) #300
- No longer always return a static list of keywords for completion (thanks Jason Axelson) #259
Bug Fixes:
- Formatting was returning invalid floating point number (thanks Thanabodee Charoenpiriyakij) #250
- Fix detection of empty hover hints (thanks Dmitry Gutov) #279
- Debugger doesn't fail when modules cannot be interpreted (thanks Łukasz Samson) (such as nifs) #283
- Do not advertise
workspaceFolders
support (thanks Jason Axelson) #298 - Do not try to create gitignore when project dir not set (thanks Łukasz Samson) #306
- Only call DocumentSymbols (outline pane) for .ex and .exs files (thanks Marlus Saraiva) #262
House keeping:
- Server runs with a unique id (and uses it to disambiguate commands) (thanks Alessandro Tagliapietra) #278
- Improvements to the reliability of the test suite (thanks Jason Axelson) #270, #271
- Rename debugger app so that it does not conflict with otp debugger app (thanks Łukasz Samson) #280
- Vendor Jason library to prevent conflicts with user's code (thanks Jason Axelson) #253
- Switch to new supervisor format (thanks Jason Axelson) #260
- Display the version of Elixir used to compile ELixirLS (thanks Jason Axelson) #264
VSCode:
- Support workspaces with multiple elixir projects (thanks Alessandro Tagliapietra) #70
- Improved support for phoenix templates (thanks Marlus Saraiva) #93
- Shows errors in
.eex
and.leex
files (instead of associated.ex
file)
- Shows errors in
- Improve syntax highlighting following pipes (thanks Dusty Pomerleau) #81
- Make
%
a dedicated punctuation scope in elixir syntax file (thanks Dusty Pomerleau) #72 - Migrate generated tasks.json to 2.0.0 syntax (thanks Dusty Pomerleau) #71
- Improve development instructions (thanks Tan Jay Jun) #97
- Activate extension whenever workspace contains elixir files (thanks Jason Axelson) #107
- Make heredocs and most sigils auto-close when used with quotes and triple quotes (thanks Jarrod Davis) #101
- Set a default for
elixirLS.projectDir
(thanks Łukasz Samson) #112 - Support setting
elixirLS.mixTarget
to include target specific dependencies, like with Nerves (thanks Jon Carstens) #108
Improvements:
- Add autocompletion of struct fields on a binding when we know for sure what type of struct it is. (thanks Łukasz Samson) #202
- For details see the Code Completion section of the readme
- Normalize compiler warnings and associate them with templates (thanks Marlus Saraiva) #241
- Add all core elixir apps to the Dialyzer PLT. (thanks Eric Entin) #225
- Change "did not receive workspace/didChangeConfiguration" log level from warning to info (thanks Jason Axelson) #222
- Automatically create a
.gitignore
file inside the.elixir-ls
dir so that users do not need to manually add it to their gitignore (thanks Thanabodee Charoenpiriyakij) #232 - Dialyzer provider shouldn't track removed files and modules (thanks Michał Szajbe) #237
- Load all modules after first build (thanks Akash Hiremath) #227
Bug Fixes:
- Dialyzer: Get beam file for preloaded modules. (thanks Łukasz Samson) #218
- Warn when using the debugger on Elixir 1.10.0-1.10.2. (thanks Jason Axelson) #221
- Don't return snippets to clients that don't declare
snippetSupport
for function completions (thanks Jeffrey Xiao) #223
VSCode:
- Add basic support for
.html.leex
files for Phoenix LiveView (thanks oskarkook) #82 - Add filetype and watcher for
.html.leex
files for Phoenix LiveView (thanks Byron Hambly) #83 - Better phoenix templates support (thanks Marlus Saraiva) #93
VSCode potentially breaking changes:
- Change language id to be lowercase kebab-case in accordance with VSCode guidelines. This also fixes an issue displaying the elixir logo for html.eex files. (thanks Matt Furden) #87
- This changes the language id's
EEx
->eex
andHTML (EEx)
->html-eex
- If you have customized your emmet configuration configuration then you need to update it:
- Open VSCode and hit
Ctrl+Shift+P
orCmd+Shift+P
and type"Preference: Open Settings (JSON)"
- Add or edit your
emmet.includedLanguages
to include the new Language Id:
- This changes the language id's
"emmet.includeLanguages": {
"html-eex": "html"
}
If you have eex file associations in your settings.json then remove them:
"files.associations": {
"*.html.eex": "HTML (EEx)", // remove this
"*.html.leex": "HTML (EEx)" // remove this
},
Meta:
- The original repository at JakeBecker/elixir-ls has now been deprecated in favor of elixir-lsp/elixir-ls. Any IDE extensions that use ElixirLS should switch to using this repository. The "ElixirLS Fork" extension on the VS Code marketplace will be deprecated, and updates will continue at the original ElixirLS extension
Improvements:
- Return the type of function/macro in DocumentSymbols provider (e.g.
def
,defp
,defmacro
) (thanks Jason Axelson) #189 - Return
deprecated
flag or completion tag on completion items for clints that declaredeprecatedSupport
ortagSupport
in complete provider (thanks Łukasz Samson) #180
Bug Fixes:
- Fix
textDocument/documentSymbol
on a non-fully initialized server (thanks Jason Axelson) #173 - Don't return snippets to clients that don't declare
snippetSupport
for completions (thanks Jason Axelson) #177 - Handle an exception that was raised in the DocumentSymbols provider (thanks Jason Axelson) #179
- Fix support for environments (such as Docker Alpine linux) that do not have bash (thanks Cees de Groot) #190
- Handle syntax errors without raising an exception (thanks Jason Axelson) #186 #192
- Workspace symbols handle module unloading during compilation without bringing down the server (thanks Jason Axelson) #191
VSCode:
- Change: Upgrade vscode-languageclient to 6.1.3 to support Language Server Protocol 3.15 (thanks Łukasz Samson) #64
Improvements:
- Bump ElixirSense
- Fixes find all references doesn't work with argument defaults #150
- Adds erlang edoc support elixir_sense #86
- Improvements to complete provider (thanks to Łukasz Samson) #159
- Better handling when file fails to parse
- Remove no longer necessary workaround that prevented completing default
@
(such as@doc
or@external_resource
) - Add more keywords
- Trim spaces
- Use lower compression level to speed up dialyzer manifest writing (thanks to hworld) #164
Bug Fixes:
- Fix dialyzer errors not being reported for umbrella projects #149 (thanks hworld)
- Fix dialyzer checking files that have not changed which gives a good speedup #165 (thanks hworld)
VSCode:
- Change: No longer override default value of
editor.acceptSuggestionOnEnter
vscode-elixir-ls #53 - Change: Warn when incompatible extensions are installed vscode-elixir-ls #57
Improvements:
- Do not highlight function calls the same as function definitions vscode-elixir-ls #40 (thanks Jason Axelson)
- Code lens is returned in more situations #122 (thanks Łukasz Samson)
- Properly support requests without params (fixes shutdown in vim-lsc) #139 (thanks Brad Folkens)
Bug Fixes:
- Fix the debugger #143
- textDocumentSync save match spec (fixes error notice in vim-lsp) #144 (thanks N. G. Scheurich)
Major Improvements:
- Add workspaceSymbol support to quickly navigate to modules, functions, callbacks etc (thanks to Łukasz Samson) #110
- Provide completions for protocol functions (thanks to Łukasz Samson) #83
- Upgrade ElixirSense (thanks to Jason Axelson) #82
- Main changes: return results by arity, return all type signatures, typespec and dialyzer fixes
Improvements:
- Update dialyxir to 1.0.0-rc.7
- Improvements to
textDocument/documentSymbol
, nowDocumentSymbol
is returned instead of the more simplisticSymbolInformation
(thanks to Łukasz Samson and kent-medin) #76 - Support asdf-vm in wrapper scripts (thanks to Cees de Groot) #78
- Update startup message (thanks to Ahmed Hamdy) #85
- Add didSave to server capabilities (thanks to Jonáš Trantina) #86
Potentially Breaking Changes:
language_server.sh
anddebugger.sh
run bash instead ofsh
(this is expected to break very few setups, if any) #118
- Fix debugger tasks not continuing to run on Elixir 1.9 (thanks to joshua-andrassy for doing the legwork)
- Improve supervision tree when writing dialyzer manifest files
VSCode:
- Add syntax rules for function calls vscode-elixir-ls #15 (thanks CaiqueMitsuoka)
VSCode:
- Fix missing comma issue in the language configuration #16
- Add some basic configuration for HTML (EEx) files #14 (thanks @J3RN)
- Fix exceptions raised when running on Erlang 20 and 21 #65
- Dialyxir new 1.0-rc formatting support
can_format/2
now case-insensitive (fixes formatting on Mac OS X)defdelegate
snippet is now syntactically correct (was previously missing a comma)workspace/didChangeConfiguration
handlesnull
now (fixes eglot support)- Update elixir_sense
- Watch LiveView .leex files
- Change 'dialyzerFormat' default setting to
"dialyxir_long"
- Fix compatibility with Elixir 1.9
- Fix bug where Mix file is not reloaded on change if it had errors
- Remove unnecessary empty parens from suggested specs
- Add 'dialyzerFormat' setting to select which warning formatter to use. Options are
"dialyzer"
(default),"dialyxir_short"
,"dialyxir_long"
- (VS Code) Support syntax highlighting in Phoenix LiveView (.leex) files, including ~L sigil (Thanks to @rrichardsonv)
- (VS Code) Improved syntax highlighting and other automatic behavior (Thanks to @crbelaus)
- Fix crash when yecc grammar file has conflicts
- Dialyzer robustness improvements
- When autocompleting a function name with cursor immediately prior to a
(
, don't insert additional parens and argument list
- Fix debugger crash in new versions of VS Code (Thanks to @martin-watts)
- Minor improvements to logs and error messages
- Fix crashes caused by the new spec suggestions feature
- Fix showing of @spec suggestions on newly opened files
- Fix crash in Dialyzer when stale-checking beam files takes too long
- Fix documentation and arg names in suggestions for Elixir 1.7
- Formatter response is now incremental instead of replacing the entire document text
- New feature: Autocomplete suggestions for struct field names (Thanks to @msaraiva/elixir_sense)
- New feature: Suggest @spec annotations using Dialyzer's inferred success typings. To turn it off, set
elixirLS.suggestSpecs: false
- Print PATH to developer console if "elixir" command fails
- Fix Dialyzer crash when some modules are undialyzable
- Skipped because I got my versions out of sync :/
- Fix compatibility issues with recent Elixir versions (1.7.0-dev) and Erlang OTP 21
- Go-to-definition now works for variables (thanks to Elixir Sense)
- Better error messages when server crashes or fails to launch
- Fix autocomplete bugs when typing in parentheses
- Copy latest syntax highlighting from fr1zle/vscode-elixir
- Handle
subdirectories
andimport_deps
in.formatter.exs
. Requires the latest Elixir (1.6.5), which you can install via kiex withkiex install master
prior to its release.
- New feature: Automatically fetch deps when compiling. Set
elixirLS.fetchDeps
tofalse
to disable - New feature: Incremental text synchronization
- Minor improvements to autocomplete and automatic block closing
- New feature: Smart automatic insertion of "end" when beginning a block. This replaces the autocomplete-based approach and fixes the very annoying completion of "->" with "end" when not appropriate
- ** ACCEPT AUTOCOMPLETE SUGGESTIONS WITH TAB INSTEAD OF ENTER.** See readme for an explanation of why. You can change it back if you really want.
- Change default settings to automatically trim trailing whitespace and add newline at end of file
- Don't trigger autocomplete on "_" because you're usually just naming an unused variable
- Improve autocomplete and re-enable quickSuggestions by default
- Fix failures to launch in some projects
- New feature: Find references to modules and functions (Thanks to @mattbaker)
- New feature: Find symbols in document (Thanks to @mattbaker)
- Fix failure to launch if project prints anything to stdout in the mixfile
- Fix bug where Dialyzer warnings sometimes remain after being fixed
- Override build directory to ".elixir_ls/build" as recommended by José Valim
- Fix restart button in debugger
- Improve syntax highlighting (Thanks to @TeeSeal)
- Fix builds and related features on Windows
- Fix autocomplete not firing after "."
- Add auto-indentation rules (copied from fr1zle/vscode-elixir)
- Disable
editor.quickSuggestions
by default so autocomplete suggestions are triggered automatically only when after a ".". This is nice because the language server irritatingly tries to auto-complete things like "do" or "else" if they come at the end of a line. - Add configuration option "mixEnv" to set the Mix environment used when compiling. It now defaults to "test" instead of "dev" to aid in TDD and to avoid interfering with the Phoenix dev server.
- Add configuration option "projectDir" for when your Mix project is in a subdirectory instead of the workspace root.
- Add debug launch configuration option "env" to set environment variables
(including
MIX_ENV
) - Add debug launch configuration option "excludeModules" to avoid interpreting modules. This is important if for modules that contain NIFs which can't be debugged.
- Read formatter options from
.formatter.exs
in project root instead of including line length in extension config options
- Don't focus Output pane on errors because request handler errors are common and recoverable
- Improve error output in debugger and fix failures to launch debugger
- Package ElixirLS as .ez archives instead of escripts. This should make
asdf
installs work. - Fix debugger error logging when initialize fails
- Fix timeouts when calling back into the language server with build or dialyzer results
- Fix failing debugger launch
- Fix segfaults in OTP 20 caused by regexes precompiled in OTP 19
- Fix launch on Windows when there are spaces in the path
- Fix bug where deps are recompiled after every change
- Update README
- Update syntax highlighting (merged from fr1zle/vscode-elixir)
- Rewritten build system to make use of Elixir 1.6 compiler diagnostics
- Code formatting in Elixir 1.6
- Automatic dialyzer server in Erlang/OTP 20
- Lots and lots of refactoring
- Revert to building with Erlang OTP 19.2 instead of 20.0. It seems that escripts built with 20.0 won't run on 19.2 runtimes.
- Fix handling of Windows paths with non-default drive letter
- Enable setting breakpoints in Erlang modules
- Fix launching of debugger on OSX (when working directory is not set to the extension directory)
- Fix launching of language server when Elixir is installed with "asdf" tool. (Fix in 0.0.6 didn't actually work)
- Handle Elixir installations that were done via the "asdf" tool
- Windows support
- Updated ElixirLS to package its apps as escripts and updated client to handle
it. This should fix the error
(Mix) Could not start application language_server: could not find application file: language_server.app
. Windows, however, is still broken. - Began a changelog :)