• Stars
    star
    1,974
  • Rank 22,482 (Top 0.5 %)
  • Language
    Lua
  • License
    Apache License 2.0
  • Created almost 2 years ago
  • Updated 3 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

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

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

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

Packer

use {
    "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
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
Azure Pipelines azure_pipelines_ls
Bash bashls
Beancount beancount
Bicep bicep
BrighterScript bright_script
Buf bufls
C clangd
C# csharp_ls
C# (docs) omnisharp_mono
C# (docs) omnisharp
C++ clangd
CMake cmake
CMake neocmake
CSS cssls
CSS cssmodules_ls
CSS unocss
Clarity clarity_lsp
Clojure clojure_lsp
CodeQL codeqlls
Crystal crystalline
Cucumber cucumber_language_server
Custom Elements Language Server custom_elements_ls
Cue dagger
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
EFM (general purpose server) efm
ESLint eslint
Elixir elixirls
Elm elmls
Ember ember
Emmet emmet_ls
Erg erg_language_server
Erlang erlangls
F# fsautocomplete
Fennel fennel_language_server
Flux flux_lsp
Foam (OpenFOAM) foam_ls
Fortran fortls
Gleam gleam
Glint glint
Go golangci_lint_ls
Go gopls
Gradle gradle_ls
Grammarly grammarly
GraphQL graphql
Groovy groovyls
HTML html
Haskell hls
Haxe haxe_language_server
Helm helm_ls
Hoon hoon_ls
JSON jsonls
Java jdtls
Java java_language_server
JavaScript quick_lint_js
JavaScript tsserver
JavaScript vtsls
Jsonnet jsonnet_ls
Julia (docs) julials
Kotlin kotlin_language_server
LaTeX ltex
LaTeX texlab
Lelwel lelwel_ls
Lua lua_ls
Luau luau_lsp
Markdown marksman
Markdown prosemd_lsp
Markdown remark_ls
Markdown zk
Metamath Zero mm0_ls
Move move_analyzer
Nickel nickel_ls
Nim nimls
Nix nil_ls
Nix rnix
OCaml ocamllsp
Odin ols
OneScript, 1C:Enterprise bsl_ls
OpenAPI spectral
OpenCL opencl_ls
OpenSCAD openscad_lsp
PHP intelephense
PHP phpactor
PHP psalm
Perl perlnavigator
Pest pest_ls
Powershell powershell_es
Prisma prismals
Puppet puppet
PureScript purescriptls
Python jedi_language_server
Python pyre
Python pyright
Python pylyzer
Python sourcery
Python (docs) pylsp
Python ruff_lsp
R r_language_server
Raku raku_navigator
ReScript rescriptls
Reason reason_ls
Robot Framework robotframework_ls
Rome rome
Ruby ruby_ls
Ruby solargraph
Ruby sorbet
Ruby standardrb
Rust rust_analyzer
SQL sqlls
SQL sqls
Salt salt_ls
Shopify Theme Check theme_check
Slint slint_lsp
Smithy smithy_ls
Solidity solang
Solidity solc
Solidity solidity
Solidity solidity_ls_nomicfoundation
Sphinx esbonio
Stylelint stylelint_lsp
Svelte svelte
SystemVerilog svlangserver
SystemVerilog svls
SystemVerilog verible
TOML taplo
Tailwind CSS tailwindcss
Teal teal_ls
Terraform terraformls
Terraform (docs) tflint
TypeScript tsserver
TypeScript vtsls
Typst typst_lsp
V vls
Vala vala_ls
Veryl veryl_ls
VimL vimls
Visualforce visualforce_ls
Vue volar
Vue vuels
WGSL wgsl_analyzer
XML lemminx
YAML yamlls
Zig zls

More Repositories

1

mason.nvim

Portable package manager for Neovim that runs everywhere Neovim runs. Easily install and manage LSP servers, DAP servers, linters, and formatters.
Lua
6,257
star
2

nvim-lsp-installer

Further development has moved to https://github.com/williamboman/mason.nvim!
Lua
2,011
star
3

nvim-config

My neovim config files
Lua
78
star
4

react-input-hints

Get more out of your placeholders. Animates input placeholders to make it look like they are being typed in realtime - https://npmjs.com/react-input-hints
JavaScript
54
star
5

warden.nvim

Enhanced diagnostics UI for Neovim. 🚧 Highly WIP. Publicly available to make it easier for me to clone.
Lua
23
star
6

react-typewriting

React component for creating customizable typewriting visualizations
TypeScript
9
star
7

angular-input-hints

[Angular 1.x] Animates input placeholders to make it look like they are being typed in realtime
JavaScript
7
star
8

ng2-input-hints

Animates input placeholders to make it look like they are being typed in realtime
JavaScript
6
star
9

graphql-spqr-kotlin

This library aims to make it possible to use graphql-spqr together with Kotlin.
Kotlin
5
star
10

angular-clock

[Angular 1.x] Useful clock directives & services for Angular
JavaScript
3
star
11

botman

Source code for @williambotman[bot]. Always a WIP.
Rust
3
star
12

eureka

Personal micro-blog where I write about new interesting things that I learn about (and which I bother writing down)
HTML
3
star
13

thelounge-docker-from-source

Build The Lounge docker images directly from source with a customizable build configuration.
Dockerfile
1
star
14

angular-route-wizard

Angular module that makes it easier to work with ngRoute.
JavaScript
1
star
15

gh-analyzer

This (very simple) tool uses GitHub's API to fetch and persist insights data, allowing you to better understand long-term usage patterns and trends of your repositories - blazingly fast.
Rust
1
star