Skip to content

Latest commit

 

History

History
1183 lines (886 loc) · 84.4 KB

CHANGELOG.md

File metadata and controls

1183 lines (886 loc) · 84.4 KB

Unreleased

v0.18.1: 28 December 2023

Improvements

  • Variables defined in ex_unit test, setup and setup_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

Fixes

  • 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

v0.18.0: 22 December 2023

Highlights

  • 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 actionsGustavo Aguiar

Improvements

  • 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 on languageId document property
  • On type formatting and Folding ranges providers are now disabled on eex documents as eex 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

Fixes

  • 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

Potential incompatibilities

  • elixir_ls_debugger app has been renamed to debug_adapter to better reflect that it is not a debugger but an adapter implementing Debug Adapter Protocol. Similarly, the launch scripts has been renamed to debug_adapter.sh and debug_adapter.bat respectively. Editor extensions and custom launcher scripts may need an update

v0.17.10: 19 November 2023

Improvements

  • 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)

Fixes

  • 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

v0.17.9: 13 November 2023

Improvements

  • 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

Fixes

  • 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

v0.17.8: 9 November 2023

Improvements

  • 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

Fixes

  • 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

v0.17.7: 6 November 2023

Fixes

  • 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

v0.17.6: 2 November 2023

Improvements

  • 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 of activate 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

Fixes

  • 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

v0.17.5: 31 October 2023

Improvements

  • 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+

Fixes

  • 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

v0.17.4: 30 October 2023

Improvements

  • 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

Fixes

  • 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

v0.17.3: 24 October 2023

Fixes

  • 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

v0.17.2: 23 October 2023

Improvements

  • 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

Fixes

  • 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

v0.17.1: 13 October 2023

Fixes

  • Fixed a crash when emitting a diagnostic during file edit

v0.17.0: 11 October 2023

Highlights

  • 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 setting breakOnDbg defaulting to true 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

Improvements

  • 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 allows Run 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 to true - 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

Fixes

  • 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 to workspace/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

Potential incompatibilities

  • 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 to false in your launch configuration
  • debugExpressionTimeoutMs debugger launch configuration setting no longer has any effect. DAP cancel 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 setting breakOnDbg to false in your launch configuration

v0.16.0: 19 August 2023

Highlights

  • 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 based workspace/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.

Improvements

  • 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 and require with warn: option.

Fixes

  • 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 of Json.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 of Mix.Tasks were considered. Now only ones exporting run/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 to Kernel 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.

Potential incompatibilities

  • The language server will get configuration workspace/configuration if the client supports it. Previously it relied on workspace/didChangeConfiguration notification.

v0.15.1: 29 June 2023

Improvements

  • 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

Fixes

  • Fixed crash when handling workspace/didChangeWatchedFiles when project_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 when drop is local without parens from ecto_sql) Milo Lee

v0.15.0: 20 June 2023

Improvements

  • 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 and import are now understood by elixir_sense. This improves accuracy of definition, hover, references and complete providers. For example only imports matching only and except 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 and ELS_ERL_OPTS. This allows for setting a node name and connecting remotely to language server and debugger.

Fixes

  • 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

Breaking changes and deprecations

  • Elixir 1.12 is no longer supported
  • .ez archive based distribution is now deprecated

v0.14.6: 6 May 2023

Improvements

  • added option elixirLS.autoInsertRequiredAlias controlling if complete provider will auto insert aliases Zeke Dou

Fixes

  • 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

v0.14.5: 21 April 2023

Fixes

  • Fixed regression in debugger not respecting MIX_ENV and MIX_TARGET
  • Silence output from dialyxir making client disconnect from the server on elixir < 1.14
  • Avoid serializing PID to JSON

v0.14.4: 20 April 2023

Fixes

  • Fixed invalid encoding of messages with unicode strings. This should resolve issues when starting the server in in non-ASCII path

v0.14.3: 17 April 2023

Fixes

v0.14.2: 15 April 2023

Fixes

  • Print correct version

v0.14.1: 14 April 2023

Fixes

  • Reorder startup sequence to avert mix crash

v0.14.0: 14 April 2023

Improvements

  • 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. Elixir mix swallows those warnings since 1.10
  • Builds now use --all-warnings flag on mix 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)

Refactorings

  • 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 on mix compile. This should make the server faster. The side effect is more protocol consolidation warnings printed to the console on elixir < 1.14.

Deprecations

  • This is the last release supporting elixir 1.12

v0.13.0: 8 January 2023

Improvements

  • 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

Refactorings

  • CI pipeline now runs on Windows and Linux

Deprecations

  • 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

v0.12.0: 7 November 2022

Improvements:

  • Support for list destructuring and comprehension in for and with 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

v0.11.0: 14 August 2022

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 over defoverridable
  • 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

v0.10.0: 10 June 2022

Improvements to debugger adapter:

Improvements to language server:

VSCode:

Housekeeping:

thanks Łukasz Samson, Thanabodee Charoenpiriyakij, Daniils Petrovs, Jason Axelson

v0.9.0: 4 December 2021

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) #633
    • fetchDeps causes some bad race conditions, especially with Elixir 1.13

Bug Fixes:

  • Add indentation following "do" completion (thanks AJ Foster) #606

Housekeeping:

VSCode:

v0.8.1: 1 September 2021

Improvements:

Housekeeping:

v0.8.0: 14 August 2021

Improvements:

Bug Fixes:

Housekeeping:

VSCode:

Deprecations

v0.7.0: 06 April 2021

Improvements:

  • Use fuzzy matching for function completion (thanks Po Chen) #491
    • For example: "valp" will match validate_password and "Enum.chub" will match Enum.chunk_by/2
    • Note: the plan is to extend this fuzzy matching to other types of completion in the future
  • 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:

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:

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

v0.6.5: 9 February 2021

Bug Fixes:

Housekeeping:

v0.6.4: 2 February 2021

Bug Fixes:

v0.6.3: 30 January 2021

Improvements:

Bug Fixes:

Housekeeping:

VSCode:

v0.6.2: 15 November 2020

Improvements:

  • Add setup.bat support for windows (thanks E14) #374
  • Add a message when done fetching deps #380

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:

v0.6.1: 4 October 2020

VSCode:

  • Fix broken packaging (issue #145)

v0.6.0: 3 October 2020

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:

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.
  • Fix formatting files in umbrella projects (thanks Drew Olson)#350
  • Fix callback suggesions (thanks Łukasz Samson) #359

House keeping:

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:

v0.5.0: 28 June 2020

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:

House keeping:

VSCode:

  • Support workspaces with multiple elixir projects (thanks Alessandro Tagliapietra) #70
    • Support per-folder configuration for many settings (makes the multi-workspace support more powerful) (thanks AJ Foster) #110
  • Improved support for phoenix templates (thanks Marlus Saraiva) #93
    • Shows errors in .eex and .leex files (instead of associated .ex file)
  • 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

v0.4.0: 16 May 2020

Improvements:

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 and HTML (EEx)->html-eex
    • If you have customized your emmet configuration configuration then you need to update it:
    • Open VSCode and hit Ctrl+Shift+P or Cmd+Shift+P and type "Preference: Open Settings (JSON)"
    • Add or edit your emmet.includedLanguages to include the new Language Id:
"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
},

v0.3.3: 15 Apr 2020

Meta:

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 declare deprecatedSupport or tagSupport 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

v0.3.2: 28 Mar 2020

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:

v0.3.1: 3 Mar 2020

Improvements:

Bug Fixes:

  • Fix the debugger #143
  • textDocumentSync save match spec (fixes error notice in vim-lsp) #144 (thanks N. G. Scheurich)

v0.3.0: 14 Feb 2020

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, now DocumentSymbol is returned instead of the more simplistic SymbolInformation (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 and debugger.sh run bash instead of sh (this is expected to break very few setups, if any) #118

v0.2.28: 16 Nov 2019

VSCode:

v0.2.27: 14 Nov 2019

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

v0.2.26: 4 Sept 2019

  • 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 handles null now (fixes eglot support)
  • Update elixir_sense
  • Watch LiveView .leex files
  • Change 'dialyzerFormat' default setting to "dialyxir_long"

v0.2.25: 23 May 2019

  • 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

v0.2.24: 15 Oct 2018

  • Fix debugger crash in new versions of VS Code (Thanks to @martin-watts)
  • Minor improvements to logs and error messages

v0.2.23: 05 Aug 2018

  • Fix crashes caused by the new spec suggestions feature
  • Fix showing of @spec suggestions on newly opened files

v0.2.22: 03 Aug 2018

  • 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

v0.2.21: 13 Jul 2018

  • Print PATH to developer console if "elixir" command fails
  • Fix Dialyzer crash when some modules are undialyzable

v0.2.20: 13 Jul 2018

  • Skipped because I got my versions out of sync :/

v0.2.19: 06 Jul 2018

  • 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

v0.2.18: 19 Mar 2018

  • Fix autocomplete bugs when typing in parentheses
  • Copy latest syntax highlighting from fr1zle/vscode-elixir
  • Handle subdirectories and import_deps in .formatter.exs. Requires the latest Elixir (1.6.5), which you can install via kiex with kiex install master prior to its release.

v0.2.17: 9 Mar 2018

  • New feature: Automatically fetch deps when compiling. Set elixirLS.fetchDeps to false to disable
  • New feature: Incremental text synchronization
  • Minor improvements to autocomplete and automatic block closing

v0.2.16: 7 Mar 2018

  • 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

v0.2.15: 6 Mar 2018

  • Improve autocomplete and re-enable quickSuggestions by default

v0.2.14: 3 Mar 2018

  • Fix failures to launch in some projects

v0.2.13: 2 Mar 2018

  • 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

v0.2.12: 22 Feb 2018

  • 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

v0.2.11: 31 Jan 2018

  • Improve syntax highlighting (Thanks to @TeeSeal)

v0.2.10: 24 Jan 2018

  • Fix builds and related features on Windows

v0.2.9: 29 Nov 2017

  • Fix autocomplete not firing after "."

v0.2.8: 29 Nov 2017

  • 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.

v0.2.7: 9 Nov 2017

  • Read formatter options from .formatter.exs in project root instead of including line length in extension config options

v0.2.6: 3 Nov 2017

  • Don't focus Output pane on errors because request handler errors are common and recoverable

v0.2.5: 3 Nov 2017

  • Improve error output in debugger and fix failures to launch debugger

v0.2.4: 25 Oct 2017

  • 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

v0.2.3: 24 Oct 2017

  • Fix failing debugger launch
  • Fix segfaults in OTP 20 caused by regexes precompiled in OTP 19

v0.2.2: 19 Oct 2017

  • Fix launch on Windows when there are spaces in the path

v0.2.1: 19 Oct 2017

  • Fix bug where deps are recompiled after every change
  • Update README
  • Update syntax highlighting (merged from fr1zle/vscode-elixir)

v0.2.0: 17 Oct 2017

  • 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

v0.0.9: 23 Jun 2017

  • 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

v0.0.8: 23 Jun 2017

  • Enable setting breakpoints in Erlang modules

v0.0.7: 12 Jun 2017

  • 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)

v0.0.6: 12 Jun 2017

  • Handle Elixir installations that were done via the "asdf" tool

v0.0.5: 11 Jun 2017

  • Windows support

v0.0.4: 10 Jun 2017

  • 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 :)