|
1 | 1 | -- nvim-lspconfig allows convenient configuration of LSP clients |
2 | | -return { |
3 | | - { |
| 2 | + |
| 3 | +-- nvim 0.11 changed the way lspconfig works, so we split the config based on |
| 4 | +-- version (hence the duplication) |
| 5 | +local post_v011 = vim.version().minor >= 11 |
| 6 | + |
| 7 | +if post_v011 then |
| 8 | + return { |
4 | 9 | "neovim/nvim-lspconfig", |
5 | | - cmd = "LspStart", |
| 10 | + version = "v2.5", |
| 11 | + config = function() |
| 12 | + -- Python language server |
| 13 | + vim.lsp.config.pyright = { |
| 14 | + cmd = { "pyright-langserver", "--stdio" }, |
| 15 | + filetypes = { "python" }, |
| 16 | + root_markers = { |
| 17 | + "pyproject.toml", |
| 18 | + "setup.py", |
| 19 | + "setup.cfg", |
| 20 | + "requirements.txt", |
| 21 | + "Pipfile", |
| 22 | + "pyrightconfig.json", |
| 23 | + ".git", |
| 24 | + }, |
| 25 | + } |
| 26 | + |
| 27 | + -- Bash language server |
| 28 | + vim.lsp.config.bashls = { |
| 29 | + cmd = { "bash-language-server", "start" }, |
| 30 | + filetypes = { "sh", "bash" }, |
| 31 | + root_markers = { ".git" }, |
| 32 | + } |
| 33 | + |
| 34 | + -- R language server |
| 35 | + vim.lsp.config.r_language_server = { |
| 36 | + cmd = { "R", "--slave", "-e", "languageserver::run()" }, |
| 37 | + filetypes = { "r", "rmd" }, |
| 38 | + root_markers = { ".git", "DESCRIPTION" }, |
| 39 | + } |
| 40 | + |
| 41 | + -- Lua language server |
| 42 | + vim.lsp.config.lua_ls = { |
| 43 | + cmd = { "lua-language-server" }, |
| 44 | + filetypes = { "lua" }, |
| 45 | + root_markers = { ".luarc.json", ".luarc.jsonc", ".git" }, |
| 46 | + settings = { |
| 47 | + Lua = { |
| 48 | + runtime = { version = "LuaJIT" }, |
| 49 | + workspace = { |
| 50 | + library = { vim.env.VIMRUNTIME }, |
| 51 | + }, |
| 52 | + }, |
| 53 | + }, |
| 54 | + } |
| 55 | + vim.diagnostic.config({ virtual_text = true }) |
| 56 | + |
| 57 | + -- LSP keymaps |
| 58 | + vim.api.nvim_create_autocmd("LspAttach", { |
| 59 | + group = vim.api.nvim_create_augroup("UserLspConfig", {}), |
| 60 | + callback = function(ev) |
| 61 | + vim.keymap.set("n", "<leader>cgd", vim.lsp.buf.definition, { buffer = ev.buf, desc = "Goto definition" }) |
| 62 | + vim.keymap.set("n", "<leader>cK", vim.lsp.buf.hover, { buffer = ev.buf, desc = "Hover help" }) |
| 63 | + vim.keymap.set("n", "<leader>crn", vim.lsp.buf.rename, { buffer = ev.buf, desc = "Rename" }) |
| 64 | + vim.keymap.set("n", "<leader>cgr", vim.lsp.buf.references, { buffer = ev.buf, desc = "Goto references" }) |
| 65 | + vim.keymap.set("n", "<leader>ca", vim.lsp.buf.code_action, { buffer = ev.buf, desc = "Code action" }) |
| 66 | + end, |
| 67 | + }) |
| 68 | + end, |
| 69 | + keys = { |
| 70 | + { "<leader>cl", "<cmd>LspStart<cr>", desc = "Start LSP" }, |
| 71 | + { "<leader>ce", vim.diagnostic.open_float, desc = "Open diagnostics/errors" }, |
| 72 | + }, |
| 73 | + } |
| 74 | +else |
| 75 | + return { |
| 76 | + "neovim/nvim-lspconfig", |
| 77 | + version = "v2.5", |
6 | 78 | init = function() |
7 | 79 | local lspconfig = require("lspconfig") |
8 | 80 |
|
9 | | - -- Below, autostart = false means that you need to explicity call :LspStart (<leader>cl) |
| 81 | + -- below, autostart = false means that you need to explicity call :lspstart (<leader>cl) |
10 | 82 | -- |
11 | 83 | -- ---------------------------------------------------------------------- |
12 | | - -- CONFIGURE ADDITIONAL LANGUAGE SERVERS HERE |
| 84 | + -- configure additional language servers here |
13 | 85 | -- |
14 | | - -- pyright is the language server for Python |
| 86 | + -- pyright is the language server for python |
15 | 87 | lspconfig.pyright.setup({ autostart = false }) |
16 | 88 |
|
17 | 89 | lspconfig.bashls.setup({ autostart = false }) |
18 | 90 |
|
19 | | - -- language server for R |
| 91 | + -- language server for r |
20 | 92 | lspconfig.r_language_server.setup({ autostart = false }) |
21 | 93 |
|
22 | | - -- Language server for Lua. These are the recommended options |
23 | | - -- when mainly using Lua for Neovim |
| 94 | + -- language server for lua. these are the recommended options |
| 95 | + -- when mainly using lua for neovim |
24 | 96 | lspconfig.lua_ls.setup({ |
25 | | - autostart = false, |
26 | | - on_init = function(client) |
27 | | - local path = client.workspace_folders[1].name |
28 | | - if not vim.loop.fs_stat(path .. "/.luarc.json") and not vim.loop.fs_stat(path .. "/.luarc.jsonc") then |
29 | | - client.config.settings = vim.tbl_deep_extend("force", client.config.settings, { |
30 | | - Lua = { |
31 | | - runtime = { version = "LuaJIT" }, |
32 | | - workspace = { |
33 | | - checkThirdParty = false, |
34 | | - library = { |
35 | | - vim.env.VIMRUNTIME, |
36 | | - }, |
37 | | - }, |
38 | | - }, |
39 | | - }) |
40 | | - |
41 | | - client.notify("workspace/didChangeConfiguration", { settings = client.config.settings }) |
42 | | - end |
43 | | - end, |
| 97 | + settings = { |
| 98 | + Lua = { |
| 99 | + runtime = { |
| 100 | + version = "LuaJIT", |
| 101 | + }, |
| 102 | + workspace = { |
| 103 | + library = { vim.env.VIMRUNTIME }, |
| 104 | + }, |
| 105 | + }, |
| 106 | + }, |
44 | 107 | }) |
45 | 108 |
|
46 | | - -- Use LspAttach autocommand to only map the following keys after |
| 109 | + -- use lspattach autocommand to only map the following keys after |
47 | 110 | -- the language server attaches to the current buffer |
48 | | - vim.api.nvim_create_autocmd("LspAttach", { |
49 | | - group = vim.api.nvim_create_augroup("UserLspConfig", {}), |
| 111 | + vim.api.nvim_create_autocmd("lspattach", { |
| 112 | + group = vim.api.nvim_create_augroup("userlspconfig", {}), |
50 | 113 | callback = function(ev) |
51 | | - vim.keymap.set("n", "<leader>cgd", vim.lsp.buf.definition, { buffer = ev.buf, desc = "Goto definition" }) |
52 | | - vim.keymap.set("n", "<leader>cK", vim.lsp.buf.hover, { buffer = ev.buf, desc = "Hover help" }) |
| 114 | + vim.keymap.set("n", "<leader>cgd", vim.lsp.buf.definition, { buffer = ev.buf, desc = "Goto Definition" }) |
| 115 | + vim.keymap.set("n", "<leader>ck", vim.lsp.buf.hover, { buffer = ev.buf, desc = "Hover help" }) |
53 | 116 | vim.keymap.set("n", "<leader>crn", vim.lsp.buf.rename, { buffer = ev.buf, desc = "Rename" }) |
54 | | - vim.keymap.set("n", "<leader>cgr", vim.lsp.buf.references, { buffer = ev.buf, desc = "Goto references" }) |
55 | | - vim.keymap.set("n", "<leader>ca", vim.lsp.buf.code_action, { buffer = ev.buf, desc = "Code action" }) |
| 117 | + vim.keymap.set("n", "<leader>cgr", vim.lsp.buf.references, { buffer = ev.buf, desc = "Goto References" }) |
| 118 | + vim.keymap.set("n", "<leader>ca", vim.lsp.buf.code_action, { buffer = ev.buf, desc = "Code Action" }) |
56 | 119 | end, |
57 | 120 | }) |
58 | 121 | end, |
59 | 122 | keys = { |
60 | | - -- Because autostart=false above, need to manually start the language server. |
61 | | - { "<leader>cl", "<cmd>LspStart<CR>", desc = "Start LSP" }, |
| 123 | + -- because autostart=false above, need to manually start the language server. |
| 124 | + { "<leader>cl", "<cmd>LspStart<cr>", desc = "Start LSP" }, |
62 | 125 | { "<leader>ce", vim.diagnostic.open_float, desc = "Open diagnostics/errors" }, |
63 | 126 | { "]d", vim.diagnostic.goto_next, desc = "Next diagnostic/error" }, |
64 | 127 | { "[d", vim.diagnostic.goto_prev, desc = "Prev diagnostic/error" }, |
65 | 128 | }, |
66 | | - }, |
67 | | -} |
| 129 | + } |
| 130 | +end |
0 commit comments