Skip to content

Changelog#

Unreleased 9.0.1#

  • Add support for earthlyls
  • Add support for GNAT Project (gpr-mode, gpr-ts-mode).
  • Add SQL support
  • Add support for Meson build system. (meson-mode).
  • Add support for go to definition for external files (.dll) in CSharp projects for OmniSharp server.
  • Added a new optional :action-filter argument when defining LSP clients that allows code action requests to be modified before they are sent to the server. This is used by the Haskell language server client to work around an lsp-mode parsing quirk that incorrectly sends null values instead of false in code action requests.
  • Add support for C# via the Roslyn language server.
  • Add basic support for pull diagnostics requests.
  • Add lsp-flush-delayed-changes-before-next-message customization point to enforce throttling document change notifications.
  • Add lsp-sql-show-tables command.
  • Fix bug in rust-analyzer.check.features configuration via lsp-rust-checkonsave-features Emacs setting: we were defaulting to [], but rust-analyzer defaults to inheriting the value from rust-analyzer.cargo.features. The bug resulted in code hidden behind features not getting type checked when those features were enabled by setting rust-analyzer.cargo.features via the lsp-rust-features Emacs setting.
  • Change ruff-lsp to ruff for python lsp client. All ruff-lsp customizable variable change to ruff. Lsp server command now is ["ruff" "server"] instead of ["ruff-lsp"].
  • Add futhark support
  • Optimize overlay creation by checking window visibility first
  • Replace the per-interface (INTERFACE ...) pcase forms with a single, unified (lsp-interface INTERFACE ...) form. The per-interface forms are no longer generated. This is a breaking change. (See #4430.)
  • If asm-lsp is installed, lsp-asm won't try to download it to cache store
  • Fix lsp-unzip on windows when unzip was found on the PATH
  • Fix zls wrong bin path
  • Add support for buf CLI (beta)
  • Add fennel support
  • Add support for Nextflow
  • Add TypeSpec support

9.0.0#

  • Add language server config for QML (Qt Modeling Language) using qmlls.
  • Add new configuration options for lsp-html. Now able to toggle documentation hovers. Custom data is no longer experimental, and is now a vector.
  • Add support for RPM spec files
  • Add support for installing lsp dependencies via Cargo.
  • Fix tramp support issues (see #4204)
  • Add Cypher support.
  • Add Mojo 🔥 support
  • Add lsp-solidity, using the implementation from NomicFoundation
  • Change rust-analyzer base URL to be github.com/rust-lang/rust-analyzer, rather than rust-analyzer/rust-analyzer.
  • Add support for wgsl using wgsl-analyzer
  • Add jq-lsp
  • Add architecture triples for erlang-language-platform file downloads, to support macos on ARM and X86.
  • Add semantic token support for erlang-language-platform in lsp-erlang client.
  • Update erlang-language-platform download file names to match new upstream names.
  • Add erlang-language-platform support in lsp-erlang client.
  • Add credo-language-server
  • Add support for clojure-ts-mode in clojure-lsp client
  • terraform-ls now supports prefill required fields and the ability to validate on save.
  • Ignore .terraform and .terragrunt-cache directories
  • lsp-bash now supports bash-ts-mode, ebuild-mode and envrc-file-mode
  • lsp-ruby-syntax-tree, lsp-solargraph, lsp-sorbet, lsp-steep, and lsp-typeprof now support ruby-ts-mode
  • Drop support for emacs 26.1 and 26.2
  • Added support for textDocument/linkedEditingRange via lsp-iedit-linked-ranges and lsp-evil-multiedit-ranges (see #3166)
  • Add GraphQL Language Server for autocomplete graphql query
  • Added lsp-auto-touch-files. When it is non-nil it will auto-create the file on the disk before sending textDocument/didOpen.
  • Add lsp-log-io-allowlist-methods for debugging purposes.
  • Enable `lsp-lens-enable` by default.
  • Add TOML support.
  • Add Nginx support.
  • Disable noisy features from lsp-ui: lsp-ui-sideline-show-code-actions and lsp-ui-doc-show-with-cursor.
  • Fix org mode support. #3258
  • Add remark-language-server
  • Deprecate unified-languge-server in favor of remark-language-server
  • Made it possible to disable lsp-response-timeout entirely.
  • Fix csharp-ls startup on emacs@master (and emacs@emacs-28 on macOS) due to a switch posixspawn and not setting proper sigmask on child processes.
  • Fix incorrect lsp-fsharp defcustom types.
  • Add lsp-fsharp-generate-binlog.
  • Update installation mechanism for fsautocomplete (lsp-fsharp) to use dotnet tool install -g.
  • Fix fsautocomplete (lsp-fsharp) startup on emacs@master (and emacs@emacs-28 on macOS) due to a switch posix_spawn and not setting proper sigmask on child processes.
  • Add TypeProf support.
  • Add Ansible support.
  • Disable lsp-steep-use-bundler by default.
  • Add idris2-lsp
  • Add emmet-ls
  • Support all initializationOptions in typescript-language-server
  • Update rust-analyzer's inlay hint protocol support.
  • Add support for \~typescript-language-server\~’s inlay hints.
  • Add support for workspace/willRenameFiles and workspace/didRenameFiles.
  • Improve project root import to read specific keys instead of any events.
  • Support labelDetails of LSP Specification 3.17
  • Add Gleam support
  • Drop deprecated rust-analyzer variable lsp-rust-analyzer-import-merge-behaviour
  • Added run and debug code lenses to lsp-kotlin
  • Add setting UPDATEEXPECT=1 when running `expect!` tests lsp-rust
  • Add lsp-use-workspace-root-for-server-default-directory.
  • Add marksman support.
  • lsp-find-references to include declaration by default (configurable with lsp-references-exclude-definition)
  • Add syntaxtree support for Ruby code.
  • lsp-organize-imports no longer prompts for an action, even if lsp-auto-execute-action is nil.
  • Add mint-lang support.
  • Add lsp-sorbet-as-add-on variable to allow running the Sorbet server as an add-on alongside Solargraph or others
  • Add dot-language-server (a.k.a. Graphviz) support.
  • Add PLS support (additional sever for Perl).
  • Fix lsp-avy-lens when avy-style is 'de-bruijn or 'words #3554
  • Fix lsp-avy-lens when lsp-lens-place-position position is end-of-line
  • Add lsp-clojure-trace-enable variable.
  • Add some support for rust-analyzer semantic token modifiers. Highlights mutable and reference variables.
  • Update version for lsp-xml to 0.21.0, adding custom variables for new formatting options.
  • Changes variable lsp-xml-validation-schema to be an alist rather than a boolean.
  • Adds lsp-xml-preferences-quote-style as a replacement for obsolete lsp-xml-format-quotes.
  • Add nil support (additional server for Nix)
  • Add Volar 1.0 support, refactor vue-language-server initializationOptions, and remove multi server that is no longer needed.
  • Ensure that incomplete completions only trigger when retriggering from the same completion session #3028
  • lsp-kotlin now supports kotlin-ts-mode
  • lsp-elixir now supports elixir-ts-mode and heex-ts-mode
  • Update Magik
  • Add lsp-clients-typescript-prefer-use-project-ts-server custom variable to try to use the project's tsserver.js instead of the one installed by lsp-mode.
  • Add ruff-lsp support (additional server for Python).
  • Update documentation of Vue3 install server
  • Add GLSL support.
  • Move inlay hint support in core from lsp-rust and lsp-javascript. Use lsp-inlay-hint-enable instead of lsp-rust-analyzer-server-display-inlay-hints and lsp-javascript-server-display-inlay-hints
  • Add ShaderLab support.
  • Remove custom variable lsp-inlay-hint-enum-format since LSP Specification 3.17 only has type and parameter hint kinds.
  • Add Semgrep support
  • Add AWK language server support.
  • Add support for scala-ts-mode.
  • Drop support for emacs 26.3
  • Add [https://github.com/rubocop/rubocop][RuboCop built-in language server]] for linting and formatting Ruby code.
  • Add Move language server support.
  • Add mdx support using mdx-language-server
  • Add golangci-lint add-on client using golangci-lint-langserver
  • Add buf/protobuf support via bufls
  • Add Assembly Language support.
  • Add Autotools support
  • Add Jsonnet support
  • Add support for ada-ts-mode.
  • Allow customizing Ada semantic token and token modifier faces.
  • Add Hylang support.
  • Add support for clojure-ts derived modes.
  • Add support for installing Ada Language Server.
  • Add Nushell support
  • Add Trunk support
  • Add Cucumber support.
  • Add COBOL support.
  • Add Common Lisp support.
  • Add YANG support using TypeFox/yang-lsp Server.

Release 8.0.0#

  • Add lsp-clients-angular-node-get-prefix-command to get the Angular server from another location which is still has /lib/node_modules in it.
  • Set lsp-clients-angular-language-server-command after the first connection to speed up subsequent connections.
  • Add lsp-sql-execute-paragraph to execute the current paragraph (like sql-send-paragraph).
  • Breaking change: bindings for commands under s (like lsp-workspace-shutdown) were moved under w for better compatibility with Spacemacs
  • removed lsp-print-performance
  • Add support for insert/replace when performing completion. When using company pressing C-u RET will perform the alternative action (the default is replace, but can be changed).
  • Add lsp-after-apply-edits-hook that run after every workspace edit is applied.
  • Safe renamed lsp-diagnose to lsp-doctor.
  • Add lsp-modeline-code-actions-segments for a better customization.
  • Add Lua Language Server, Lua-LSP and improve EmmyLua.
  • Add configuration settings for elixir-ls.
  • Add Nix support.
  • Add Racket support.
  • Provided automatic installers for `lsp-clojure` (`clojure-lsp`).
  • Provided automatic installers for clangd.
  • Added lsp-modeline-workspace-status-mode and option to disable it via lsp-modeline-workspace-status-enable.
  • Automatically download XML language server Lemminx
  • Add Vala support.
  • Add Sorbet Language Server for typechecking Ruby code.
  • Add Elixir test lenses support.
  • Enable headerline breadcrumb by default
  • Add Steep Language Server for typechecking Ruby code.
  • Rename semantic highlighting -> semantic tokens.
  • Add Phpactor Language server
  • Add lsp-headerline-breadcrumb-icons-enable to disable breadcrumb icons.
  • Add ActionScript support.
  • Add iedit integration (documentHighlights)
  • Add an interactive lsp-clangd-find-other-file method that uses the clangd extension to return the corresponding header/cpp file from cpp/header file respectively.
  • Add support for Deno language server.
  • Add lsp-dired-mode - integration between dired and lsp-mode
  • Add Grammarly support.
  • Add D support.
  • Add Zig support.
  • Add an interactive lsp-rust-analyzer-reload-workspace function that reloads the Rust-Analyzer workspace from Cargo.toml
  • Rename lsp-rust-analyzer-cargo-load-out-dirs-from-check to lsp-rust-analyzer-cargo-run-build-scripts to align with upstream.
  • Allow customization of lsp-file-watch-ignored-directories and lsp-file-watch-ignored-files at the root of an lsp workspace.
  • Add client for markdown language server (called unified-language-server)
  • Add client for SystemVerilog language server (called https://github.com/imc-trading/svlangserver)
  • Add client for python-lsp-server, pylsp (https://github.com/python-lsp/python-lsp-server)
  • Deprecate the Palantir Python language server, pyls.
  • Add 2 rust-analyzer LSP extension function lsp-rust-analyzer-related-tests and lsp-rust-analyzer-open-cargo-toml
  • Work around bug in NPM versions 7.0.0 through 7.4.1 that prevented lsp-install-server from working for NPM-based language servers.
  • Add lsp-lens-place-position with option to place code lens at end of line as default.
  • Add LanguageTool support.
  • Add Beancount support.
  • Add Nix language server support.
  • Update the ESLint server to 2.1.23
  • Add lsp-eslint-warn-on-ignored-files and lsp-eslint-rules-customizations options to the ESLint client
  • Change interface for configuring ESLint code actions - see documentation of lsp-eslint-code-action-disable-rule-comment and lsp-eslint-code-action-show-documentation for details
  • Add interactive lsp-rust-analyzer-move-item-up and lsp-rust-analyzer-move-item-down functions to move Rust items / statements
  • Fix memory leak when handling server response. #3062
  • Improve support for SemanticTokens adding support for delta and range semantic tokens.
  • Allow override specific semantic tokens faces per client.
  • Mention new lsp-mode integration package consult-lsp.
  • Reorganized lsp-mode code moving features and clients to separated files. #2067
  • Add support for signatureHelp using posframe. #1999
  • Add iedit integration. #2478
  • Add client for Verible SystemVerilog language Server (https://github.com/chipsalliance/verible)

Release 7.0.1#

  • Introduced lsp-diagnostics-mode.
  • Safe renamed lsp-flycheck-default-level -> lsp-diagnostics-flycheck-default-level
  • Safe renamed lsp-diagnostic-package -> lsp-diagnostics-provider
  • Dropped support for company-lsp, the suggested provider is company-capf.
  • Moved completion features to lsp-completion.el
  • Safe renamed lsp-prefer-capf -> lsp-completion-provider
  • Safe renamed lsp-enable-completion-at-point -> lsp-completion-enable

Release 7.0#

  • Support for new language server - Shttps://github.com/lighttiger2505/sqls (thanks to @v2okimochi)
  • Provided automatic installers for elp/css/bash/purescript(thanks to @kiennq)
  • Configurable Rust Analyzer inlay face via lsp-rust-analyzer-inlay-face.
  • Add lsp-headerline-breadcrumb-mode which shows a breadcrumb with the document symbols on headerline when enabled.
  • Add lsp-modeline-code-actions-mode which shows code actions on modeline when enabled.
  • Support for Theia-based semantic highlighting has been removed in favor of the semanticTokens protocol specified by LSP 3.16. To enable it, set lsp-enable-semantic-highlighting to t.
  • lsp-metals moved into a separate repo https://github.com/emacs-lsp/lsp-metals
  • Breaking change: use alist instead of hast-tables for lsp-gopls-env and lsp-yaml-schemas.
  • Add lsp-gopls-codelens defcustom to configure codelenses used for golang.
  • Added lsp-diagnose to help users verify their performance related settings
  • Created new website https://emacs-lsp.github.io/lsp-mode/ (thanks to @ericdallo)
  • Implemented special handling of Clangd echo area.
  • Added setting to disable additional text edits (lsp-completion-enable-additional-text-edit).
  • Added setting to disable text detail (lsplsp-completion-show-detail).
  • Add serenata language server support (thanks to @Sasanidas)
  • Various capf improments - better handling of partial results, support for try-completions, improved responsibility, optimized filtering/sorting, etc.
  • Remove Elixir JakeBecker support (no longer supported)
  • Support semantic tokens protocol (thanks to @sebastiansturm)
  • Improved flycheck integration for better performance.
  • Implemented client side bindings for the protocol.
  • Fixup Ignore timeouts from willSaveWaitUntil
  • Implemented org-mode support (see https://github.com/emacs-lsp/lsp-mode/blob/master/docs/page/lsp-org.md)
  • Removed support for Theia semantic highlighting protocol
  • Performed several fixes to make sure lsp-mode is working fine with Emacs 28 native compilation.
  • Add modeline code actions support (thanks to @ericdallo). Enabled by default, use lsp-modeline-code-actions-enable to disable it.
  • Migrated to github actions from travis.
  • Add breadcrumb on headerline (thanks to @ericdallo). Disabled by default, can be enabled via lsp-headerline-breadcrumb-enable
  • Migrated lsp-mode to use plists(thanks to @yyoncho, @kiennq and @ericdallo).
  • lsp-diagnostics-modeline: perf improvement (thanks to @kiennq)

Release 6.3#

  • Implemented company-capf integration. company-lsp is no longer supported.
  • Dropped support for dart language server in favour of dart SDK(breaking)
  • Added verilog support for LSP using hdl-checker
  • Implemented call hierarchy support (available in lsp-treemacs)
  • Implemented support for ESLint language server.
  • ocmalmerlin-lsp moved to ocaml-lsp-server(breaking)
  • Added New VHDL language server https://github.com/kraigher/rust_hdl#configuration
  • Add Nim language server integration
  • Implement automatic downloading facilities and implemented auto-download for typescript-language-server, javascript-typescript-stdio and json-language-server.
  • Implement metals decoration protocol
  • Send metals/didFocusTextDocument notification on buffer change
  • Add default keybindings and which-key integration
  • Add support for Dhall language server
  • Implemented debug adapter protocol support for metals
  • Add CMake language server integration
  • Add rust-analyzer runnables support
  • Implemented rust-analyzer inlay hints
  • Support pyenv for pyls
  • Add clang-tidy specific Flycheck error explainer for the lsp checker
  • Improve lsp-mode completion performance by suppressing non completion related features when completion is active.
  • lsp-json: Enable formatter provider
  • Accommodate the new :end-column and :end-column from flycheck
  • Implement status bar for diagnostics lsp-diagnostics-modeline-mode
  • Auto install of the html-language-server
  • Flycheck support for diagnostic tags (3.15 spec).
  • Adding support for GDScript language server
  • used view mode for metals doctor buffer
  • add texlab as tex LSP server
  • Started new set of integration tests without using ecukes
  • Support "only" param when requesting code actions
  • Add Perl-LanguageServer support
  • add support robot-framework language server.
  • Implement deferred semantic highlighting
  • Change default transport for erlangls to stdio
  • dart language server moved into separate repo https://github.com/emacs-lsp/lsp-dart
  • Activate flow language server if there is flow tag in file or .flowconfig in project
  • Add purescript-language-server (#1596)
  • Process the $/progress messages from LSP 3.15
  • Display the first line of MarkupContent in eldoc (#1607)
  • Perform willSaveWaitUntil synchronously and with shorter timeout
  • Display images when rendering markdown(useful for latex language servers).
  • Increase lsp-idle-delay to 0.5
  • Support bash language server glob pattern option (#1594)
  • Use pagebreaks for lsp-describe-thing-at-point
  • lsp-mode: Eliminate quadratic-time index-building for imenu. (#1616)

Release 6.2#

  • Support dynamic rename registration
  • Add basic support for style semantic highlighting
  • Added Haxe language server integration
  • Add C#-support via Roslyn.
  • Add emmy lua support
  • Enable plugins in typescript language server.
  • 1079 Provide support for Ada Language server
  • Implement right click support in lsp-mode buffers.
  • Added built-in support for Rust Analyzer.
  • Added support for HDL Checker server to lsp-vhdl
  • Added support for Terraform language server.
  • Added support for R language server (#1182)
  • Added support for passing environment variables to language servers (#1184)
  • Speedup lsp-mode's JSONRPC processing (\~2 times)
  • Add cancel-token to lsp-request-async
  • Implement unified way to handle recurring lsp features
  • Added support for powershell language server.
  • Implemented inlay hints for Rust Analyzer (thanks to brotzeit).
  • Implemented automatic installation for C# language server.
  • Reimplemented textDocument/signatureHelp - now the signature is displayed in lv buffer.
  • Cancel sync requests when presssing C-g during the request.
  • Use c-basic-offset when in cc-mode.
  • Add support for Crystal via scry (#1218).
  • Implement textDocument/documentColor support.

Release 6.1#

Support for new languages/language servers:#

New logging options#

  • lsp-mode now logs to buffer *lsp-log*, instead of *Messages*. This can be controlled with the variable lsp-log-max (Thanks to Thomas Fini Hansen).
  • If lsp-print-performance is non-nil, lsp-mode will log a corresponding performance trace to *lsp-log* for every message to and from the server.
  • The variable lsp-print-io, when non-nil will cause lsp-mode to log all messages to and from the server to a unique *lsp-io* buffer for every project root. These logs can be saved to a file and viewed using the LSP Inspector.

LSP Methods#

  • Add support for textDocument/prepareRename. If supported by the language server, all renaming operations will be tested for validity.
  • Add support for file watches.
  • Add support for CodeAction literals.
  • Add API level support for folding ranges. Folding support for origami.el support is implemented by package lsp-origami.
  • Support document links. This can be controlled using the variable lsp-enable-links.
  • Support resource operations (edits sent from the language server can now create/modify/remove files and directories).
  • Add support for workspace/configuration.
  • Add new function lsp-disconnect.
  • Added lsp-find-definition-mouse and bound to C-<down-mouse-1>
  • Added lsp-extend-selection as a frontend of new LSP method textDocument/extendSelection

Other changes#

  • Add project logo (thanks to Jon Carr).
  • Created an integration test suite for lsp-mode (See directory features).
  • If available, using the native JSON API introduced in Emacs 27.1.
  • Tramp implementation now uses TRAMP process instead of TCP sockets (Thanks to Karsten Patzwaldt).
  • LSP autoconfiguration adds company-lsp to the list of company backends instead of overriding it.
  • Add lsp-mode-map.
  • Add menu bar entries for lsp-mode.
  • Perform before save operations (textDocument/willSaveWaitUntil) asynchronously.
  • imenu support is now handled asynchronously (Thanks to Dario Gjorgjevski).
  • Added option :none for lsp-prefer-flymake, which disabled both Flymake and Flycheck support.
  • Changed flymake to report the errors immediately after they arrive instead of waiting flymake to call lsp-mode.
  • Add debounce when server does not support incremental updates.
  • Add hook lsp-after-uninitialized-hook, which stores the list of functions called after a language server has been uninitialized.
  • Add variable lsp-symbol-highlighting-skip-current, which lets the user skip the current symbol when a given symbol is being highlighted.
  • Add variable lsp-enabled-clients, which lets users set which defined clients are allowed to be used.
  • Support multiple signatures while displaying eldoc text. Add variable lsp-signature-render-all, which when non-nil forces lsp-mode to only show the current active signature.
  • Expose configuration settings for various language servers.
  • Language servers can now be disabled with the variable lsp-disabled-clients.
  • Improved applying changes speed.
  • Fixed xref support for emacs 27+
  • Implemented automatic installation for F# language server.
  • Added Emacs 26.x to CI
  • Fixed handling of stderr when running over TRAMP.
  • Implemented support for running the language server in Docker container over local files.

Release 6.0#

  • lsp-mode now have single entry point lsp for all language and based on the major mode starts the corresponding language servers.
  • Added flymake integration.
  • lsp automatically enables and configures company-lsp, lsp-ui, yasnippet, or flymake if they are present so no additional configuration is needed except installing the packages. That behavior could be disabled by setting lsp-auto-configure to nil.
  • lsp-mode ships with several predefined servers located in lsp-clients.el which does not require additional package. For the more complex Language Servers like Eclipse JDT, ccls, cquery and haskell we still require separate package due to relatively high code base.
  • lsp-mode handles automatically server failures by asking the user whether he/she wants to restart the server.
  • introduced new command lsp-describe-session which replaces the existing one lsp-capabilities. The command lists the folders that are part of the workspace and the servers that are associated with the corresponding folder.
  • lsp-mode displays information about the running server and it's status in the modeline.
  • lsp-define-stdio-client and lsp-define-tcp-client are replaced with lsp-register-client
  • lsp rely on projectile or project.el now only for suggesting project root. Once you open new file in a project and start lsp it will provide several options(import project, blocklist project, select other directory root). Once you select a root it will be persisted and used for the next sessions.
  • support for multiple language servers per single file and workspace.
  • changed lsp-mode settings to more sensible defaults.
  • Removed all synchronous calls from the server startup.
  • Improved multi-folder support.
  • added backends for: Bash, C++, CSS, Dart, Elixir, Fortran, Go, Groovy, HTML, Javascript/Typescript, Javascript/Typescript, Ocaml, PHP, Python, Ruby, Rust, Vue, Flow

Last update: December 20, 2024