Skip to content

Extension to mason.nvim that makes it easier to use lspconfig with mason.nvim.

License

Notifications You must be signed in to change notification settings

williamboman/mason-lspconfig.nvim

Repository files navigation

Linux macOS Windows GitHub CI Sponsors

mason-lspconfig.nvim

mason-lspconfig bridges mason.nvim with the lspconfig plugin - making it easier to use both plugins together.

:help mason-lspconfig.nvim

Latest version: v1.29.0

Table of Contents

Introduction

:h mason-lspconfig-introduction

mason-lspconfig.nvim closes some gaps that exist between mason.nvim and lspconfig. Its main responsibilities are to:

  • register a setup hook with lspconfig that ensures servers installed with mason.nvim are set up with the necessary configuration
  • provide extra convenience APIs such as the :LspInstall command
  • allow you to (i) automatically install, and (ii) automatically set up a predefined list of servers
  • translate between lspconfig server names and mason.nvim package names (e.g. lua_ls <-> lua-language-server)

It is recommended to use this extension if you use mason.nvim and lspconfig (it's strongly recommended for Windows users).

Note: this plugin uses the lspconfig server names in the APIs it exposes - not mason.nvim package names. See this table for a complete mapping.

Requirements

:h mason-lspconfig-requirements

  • neovim >= 0.7.0
  • mason.nvim
  • lspconfig

Installation

use {
    "williamboman/mason.nvim",
    "williamboman/mason-lspconfig.nvim",
    "neovim/nvim-lspconfig",
}
{
    "williamboman/mason.nvim",
    "williamboman/mason-lspconfig.nvim",
    "neovim/nvim-lspconfig",
}

vim-plug

Plug 'williamboman/mason.nvim'
Plug 'williamboman/mason-lspconfig.nvim'
Plug 'neovim/nvim-lspconfig'

Setup

:h mason-lspconfig-quickstart

It's important that you set up the plugins in the following order:

  1. mason.nvim
  2. mason-lspconfig.nvim
  3. Setup servers via lspconfig

Pay extra attention to this if you lazy-load plugins, or somehow "chain" the loading of plugins via your plugin manager.

require("mason").setup()
require("mason-lspconfig").setup()

-- After setting up mason-lspconfig you may set up servers via lspconfig
-- require("lspconfig").lua_ls.setup {}
-- require("lspconfig").rust_analyzer.setup {}
-- ...

Refer to the Configuration section for information about which settings are available.

Automatic server setup (advanced feature)

:h mason-lspconfig-automatic-server-setup

mason-lspconfig provides extra, opt-in, functionality that allows you to automatically set up LSP servers installed via mason.nvim without having to manually add each server setup to your Neovim configuration. Refer to :h mason-lspconfig-automatic-server-setup for more details.

Commands

:h mason-lspconfig-commands

  • :LspInstall [<server>...] - installs the provided servers
  • :LspUninstall <server> ... - uninstalls the provided servers

Configuration

:h mason-lspconfig-settings

You may optionally configure certain behavior of mason-lspconfig.nvim when calling the .setup() function. Refer to the default configuration for a list of all available settings.

Example:

require("mason-lspconfig").setup {
    ensure_installed = { "lua_ls", "rust_analyzer" },
}

Default configuration

local DEFAULT_SETTINGS = {
    -- A list of servers to automatically install if they're not already installed. Example: { "rust_analyzer@nightly", "lua_ls" }
    -- This setting has no relation with the `automatic_installation` setting.
    ---@type string[]
    ensure_installed = {},

    -- Whether servers that are set up (via lspconfig) should be automatically installed if they're not already installed.
    -- This setting has no relation with the `ensure_installed` setting.
    -- Can either be:
    --   - false: Servers are not automatically installed.
    --   - true: All servers set up via lspconfig are automatically installed.
    --   - { exclude: string[] }: All servers set up via lspconfig, except the ones provided in the list, are automatically installed.
    --       Example: automatic_installation = { exclude = { "rust_analyzer", "solargraph" } }
    ---@type boolean
    automatic_installation = false,

    -- See `:h mason-lspconfig.setup_handlers()`
    ---@type table<string, fun(server_name: string)>?
    handlers = nil,
}

Available LSP servers

Language Server name
All snyk_ls
All typos_lsp
ast-grep ast_grep
Autoconf autotools_ls
AWK awk_ls
Ada als
Angular angularls
Ansible ansiblels
Antlers antlersls
Apex apex_ls
Arduino arduino_language_server
Assembly (GAS/NASM, GO) asm_lsp
Astro astro
Automake autotools_ls
Azure Pipelines azure_pipelines_ls
Bash bashls
Bash pkgbuild_language_server
Beancount beancount
Bicep bicep
BrighterScript bright_script
Buf bufls
C clangd
C# csharp_ls
C# (docs) omnisharp_mono
C# (docs) omnisharp
C++ clangd
Cairo cairo_ls
CMake cmake
CMake neocmake
COBOL cobol_ls
CSS cssls
CSS cssmodules_ls
CSS css_variables
CSS unocss
Clarity clarity_lsp
Clojure clojure_lsp
CodeQL codeqlls
Coq coq_lsp
Crystal crystalline
Cucumber cucumber_language_server
Custom Elements Language Server custom_elements_ls
Cue dagger
Cypher cypher_ls
Deno denols
Dhall dhall_lsp_server
Diagnostic (general purpose server) diagnosticls
Dlang serve_d
Docker dockerls
Docker Compose docker_compose_language_service
Dot dotls
Drools drools_lsp
Earthly earthlyls
EFM (general purpose server) efm
ESLint eslint
Elixir elixirls
Elixir lexical
dprint dprint
Elm elmls
Ember ember
Emmet emmet_language_server
Emmet emmet_ls
Erg erg_language_server
Erlang elp
Erlang erlangls
F# fsautocomplete
Facility Service Definition facility_language_server
Fennel fennel_language_server
Fennel fennel_ls
Flux flux_lsp
Foam (OpenFOAM) foam_ls
Fortran fortls
Glint glint
GLSL glsl_analyzer
GLSL glslls
Go golangci_lint_ls
Go gopls
Gradle gradle_ls
Grammarly grammarly
GraphQL graphql
Groovy groovyls
HDL hdl_checker
HTML html
HTMX htmx
Harper harper_ls
Haskell hls
Haxe haxe_language_server
Helm helm_ls
Hoon hoon_ls
JSON jsonls
JSON biome
Java jdtls
Java java_language_server
JavaScript quick_lint_js
JavaScript tsserver
JavaScript vtsls
JavaScript biome
Jinja jinja_lsp
Jsonnet jsonnet_ls
Julia (docs) julials
jq jqls
Kotlin kotlin_language_server
LaTeX ltex
LaTeX texlab
Lelwel lelwel_ls
Lua lua_ls
Luau luau_lsp
LWC lwc_ls
Make autotools_ls
Markdown markdown_oxide
Markdown marksman
Markdown prosemd_lsp
Markdown remark_ls
Markdown vale_ls
Markdown zk
Matlab matlab_ls
MDX mdx_analyzer
Meson mesonlsp
Meson (deprecated) swift_mesonls
Metamath Zero mm0_ls
Move move_analyzer
Mutt mutt_ls
Nickel nickel_ls
Nim nim_langserver
Nim nimls
Nix nil_ls
Nix rnix
OCaml ocamllsp
Odin ols
OneScript, 1C:Enterprise bsl_ls
OpenAPI spectral
OpenAPI vacuum
OpenCL opencl_ls
OpenSCAD openscad_lsp
PHP intelephense
PHP phpactor
PHP psalm
Perl perlnavigator
Pest pest_ls
Pico8 pico8_ls
Powershell powershell_es
Prisma prismals
Puppet puppet
PureScript purescriptls
Python basedpyright
Python jedi_language_server
Python pyre
Python pyright
Python pylyzer
Python sourcery
Python (docs) pylsp
Python ruff
Python ruff_lsp
R r_language_server
Raku raku_navigator
ReScript rescriptls
Reason reason_ls
Rego regols
Robot Framework robotframework_ls
Rome rome
Ruby ruby_lsp
Ruby solargraph
Ruby sorbet
Ruby standardrb
Ruby rubocop
Rust rust_analyzer
SQL sqlls
SQL sqls
Salt salt_ls
Sass somesass_ls
Shopify Theme Check theme_check
Slint slint_lsp
Smithy smithy_ls
Solidity solang
Solidity solc
Solidity solidity
Solidity solidity_ls
Solidity solidity_ls_nomicfoundation
Sphinx esbonio
Standard ML millet
Starlark bzl
Starlark starlark_rust
Stylelint stylelint_lsp
Svelte svelte
Stimulus stimulus_ls
SystemVerilog svlangserver
SystemVerilog svls
SystemVerilog verible
TOML taplo
Tailwind CSS tailwindcss
Teal teal_ls
Templ templ
Terraform terraformls
Terraform tflint
Thrift thriftls
Twiggy twiggy_language_server
TypeScript biome
TypeScript tsserver
TypeScript vtsls
Typst tinymist
Typst typst_lsp
V v_analyzer
V vls
Vala vala_ls
Veryl veryl_ls
VimL vimls
Visualforce visualforce_ls
Vue volar
Vue vuels
WGSL wgsl_analyzer
XML lemminx
YAML gitlab_ci_ls
YAML hydra_lsp
YAML yamlls
Zig zls