Skip to content

Changelog#

Unreleased 9.0.1#

  • Add support for GNAT Project (gpr-mode, gpr-ts-mode).

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: April 27, 2024