aboutsummaryrefslogtreecommitdiff
path: root/lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua')
-rw-r--r--lua/plugins/lsp.lua178
1 files changed, 93 insertions, 85 deletions
diff --git a/lua/plugins/lsp.lua b/lua/plugins/lsp.lua
index b081cb4..286e0d2 100644
--- a/lua/plugins/lsp.lua
+++ b/lua/plugins/lsp.lua
@@ -1,30 +1,32 @@
-local lspconfig = require('lspconfig')
-local mason_lspconfig = require('mason-lspconfig')
-local null_ls = require('null-ls')
+local lspconfig = require("lspconfig")
+local mason_lspconfig = require("mason-lspconfig")
+local null_ls = require("null-ls")
-- local lsp_lines = require('lsp_lines')
-require('mason').setup()
-require('mason-null-ls').setup({ handlers = {}, ensure_installed = nil, automatic_installation = true, automatic_setup = true })
+require("mason").setup()
+require("mason-null-ls").setup({ handlers = {}, ensure_installed = nil, automatic_installation = true,
+ automatic_setup = true })
local keymap = vim.keymap
local cmd = vim.cmd
-local border = { { '┌', 'FloatBorder' }, { '─', 'FloatBorder' }, { '┐', 'FloatBorder' }, { '│', 'FloatBorder' }, { '┘', 'FloatBorder' }, { '─', 'FloatBorder' }, { '└', 'FloatBorder' }, { '│', 'FloatBorder' } }
+local border = { { "┌", "FloatBorder" }, { "─", "FloatBorder" }, { "┐", "FloatBorder" }, { "│", "FloatBorder" },
+ { "┘", "FloatBorder" }, { "─", "FloatBorder" }, { "└", "FloatBorder" }, { "│", "FloatBorder" } }
-- Set up LSP servers if not done before
if not vim.g.lsp_setup_done then
-- Clear existing LSP clients
for _, bufnr in ipairs(vim.api.nvim_list_bufs()) do
- local clients = require('user.mods').get_lsp_clients(bufnr)
+ local clients = require("user.mods").get_lsp_clients(bufnr)
for _, client in ipairs(clients) do
client.stop()
end
end
- local signs = { Error = ' ', Warn = '▲', Info = '􀅳', Hint = '⚑' }
+ local signs = { Error = " ", Warn = "▲", Info = "􀅳", Hint = "⚑" }
-- 
for type, icon in pairs(signs) do
- local hl = 'DiagnosticSign' .. type
+ local hl = "DiagnosticSign" .. type
vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = hl })
end
@@ -47,7 +49,7 @@ if not vim.g.lsp_setup_done then
virtual_lines = false,
float = {
show_header = true,
- source = 'if_many', -- border = 'rounded',
+ source = "if_many", -- border = 'rounded',
border = border,
focusable = true,
},
@@ -55,15 +57,16 @@ if not vim.g.lsp_setup_done then
severity_sort = true, -- default to false
})
- vim.lsp.handlers['textDocument/publishDiagnostics'] = vim.lsp.with(vim.lsp.diagnostic.on_publish_diagnostics, { underline = false, virtual_text = false, signs = true, update_in_insert = false })
+ vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(vim.lsp.diagnostic.on_publish_diagnostics,
+ { underline = false, virtual_text = false, signs = true, update_in_insert = false })
- vim.lsp.handlers['textDocument/hover'] = vim.lsp.with(vim.lsp.handlers.hover, { border = 'rounded' })
- vim.lsp.handlers['textDocument/signatureHelp'] = vim.lsp.with(vim.lsp.handlers.signature_help, { border = 'rounded' })
+ vim.lsp.handlers["textDocument/hover"] = vim.lsp.with(vim.lsp.handlers.hover, { border = "rounded" })
+ vim.lsp.handlers["textDocument/signatureHelp"] = vim.lsp.with(vim.lsp.handlers.signature_help, { border = "rounded" })
-- Use an on_attach function to only map the following keys after the language server attaches to the current buffer
local on_attach = function(client, bufnr)
-- Enable completion triggered by <c-x><c-o>
- vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc')
+ vim.api.nvim_buf_set_option(bufnr, "omnifunc", "v:lua.vim.lsp.omnifunc")
local map = function(mode, l, r, opts)
opts = opts or {}
opts.silent = true
@@ -72,40 +75,41 @@ if not vim.g.lsp_setup_done then
keymap.set(mode, l, r, opts)
end
-- Mappings
- map('n', 'K', '<Cmd>lua vim.lsp.buf.hover()<CR>')
+ map("n", "K", "<Cmd>lua vim.lsp.buf.hover()<CR>")
-- map("n", "gd", "<Cmd>lua vim.lsp.buf.definition()<CR>")
- map('n', 'gd', "<cmd>lua require('goto-preview').goto_preview_definition()<CR>")
+ map("n", "gd", "<cmd>lua require('goto-preview').goto_preview_definition()<CR>")
-- map("n", "gi", "<Cmd>lua vim.lsp.buf.implementation()<CR>")
- map('n', 'gi', "<cmd>lua require('goto-preview').goto_preview_implementation()<CR>")
+ map("n", "gi", "<cmd>lua require('goto-preview').goto_preview_implementation()<CR>")
-- map("n", "gr", "<Cmd>lua vim.lsp.buf.references()<CR>")
- map('n', 'gr', "<cmd>lua require('goto-preview').goto_preview_references()<CR>")
- map('n', 'gD', '<Cmd>lua vim.lsp.buf.declaration()<CR>') -- most lsp servers don't implement textDocument/Declaration, so gD is useless for now.
- map('n', '<leader>k', '<Cmd>lua vim.lsp.buf.signature_help()<CR>')
+ map("n", "gr", "<cmd>lua require('goto-preview').goto_preview_references()<CR>")
+ map("n", "gD", "<Cmd>lua vim.lsp.buf.declaration()<CR>") -- most lsp servers don't implement textDocument/Declaration, so gD is useless for now.
+ map("n", "<leader>k", "<Cmd>lua vim.lsp.buf.signature_help()<CR>")
-- map("n", "gt", "<Cmd>lua vim.lsp.buf.type_definition()<CR>")
- map('n', 'gt', "<cmd>lua require('goto-preview').goto_preview_type_definition()<CR>")
- map('n', 'gn', '<Cmd>lua vim.lsp.buf.rename()<CR>')
- map('n', 'ga', '<Cmd>lua vim.lsp.buf.code_action()<CR>')
- map('n', 'gf', '<Cmd>lua vim.lsp.buf.format()<CR>')
- map('n', 'go', '<Cmd>lua vim.diagnostic.open_float()<CR>')
- map('n', '<leader>go', ":call utils#ToggleDiagnosticsOpenFloat()<CR> | :echom ('Toggle Diagnostics Float open/close...')<CR> | :sl! | echo ('')<CR>")
- map('n', 'gq', '<Cmd>lua vim.diagnostic.setloclist()<CR>')
- map('n', '[d', '<Cmd>lua vim.diagnostic.goto_prev()<CR>')
- map('n', ']d', '<Cmd>lua vim.diagnostic.goto_next()<CR>')
- map('n', 'gs', '<Cmd>lua vim.lsp.buf.document_symbol()<CR>')
- map('n', 'gw', '<Cmd>lua vim.lsp.buf.workspace_symbol()<CR>')
- map('n', '<leader>wa', '<Cmd>lua vim.lsp.buf.add_workspace_folder()<CR>')
- map('n', '<leader>wr', '<Cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>')
- map('n', '<leader>wl', function()
+ map("n", "gt", "<cmd>lua require('goto-preview').goto_preview_type_definition()<CR>")
+ map("n", "gn", "<Cmd>lua vim.lsp.buf.rename()<CR>")
+ map("n", "ga", "<Cmd>lua vim.lsp.buf.code_action()<CR>")
+ map("n", "gf", "<Cmd>lua vim.lsp.buf.format()<CR>")
+ map("n", "go", "<Cmd>lua vim.diagnostic.open_float()<CR>")
+ map("n", "<leader>go",
+ ":call utils#ToggleDiagnosticsOpenFloat()<CR> | :echom ('Toggle Diagnostics Float open/close...')<CR> | :sl! | echo ('')<CR>")
+ map("n", "gq", "<Cmd>lua vim.diagnostic.setloclist()<CR>")
+ map("n", "[d", "<Cmd>lua vim.diagnostic.goto_prev()<CR>")
+ map("n", "]d", "<Cmd>lua vim.diagnostic.goto_next()<CR>")
+ map("n", "gs", "<Cmd>lua vim.lsp.buf.document_symbol()<CR>")
+ map("n", "gw", "<Cmd>lua vim.lsp.buf.workspace_symbol()<CR>")
+ map("n", "<leader>wa", "<Cmd>lua vim.lsp.buf.add_workspace_folder()<CR>")
+ map("n", "<leader>wr", "<Cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>")
+ map("n", "<leader>wl", function()
print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
end)
-- TODO: Use the nicer new API for autocommands
- cmd('augroup lsp_aucmds')
+ cmd("augroup lsp_aucmds")
if client.server_capabilities.documentHighlightProvider then
- cmd('au CursorHold <buffer> lua vim.lsp.buf.document_highlight()')
- cmd('au CursorMoved <buffer> lua vim.lsp.buf.clear_references()')
+ cmd("au CursorHold <buffer> lua vim.lsp.buf.document_highlight()")
+ cmd("au CursorMoved <buffer> lua vim.lsp.buf.clear_references()")
end
- cmd('augroup END')
+ cmd("augroup END")
end
-- Toggle diagnostics visibility
@@ -130,11 +134,11 @@ if not vim.g.lsp_setup_done then
]])
-- Suppress error messages from lang servers
- vim.lsp.set_log_level('debug')
+ vim.lsp.set_log_level("debug")
local capabilities = vim.lsp.protocol.make_client_capabilities()
- capabilities = require('cmp_nvim_lsp').default_capabilities()
+ capabilities = require("cmp_nvim_lsp").default_capabilities()
capabilities.textDocument.completion.completionItem.snippetSupport = true
- capabilities.offsetEncoding = { 'utf-8', 'utf-16' }
+ capabilities.offsetEncoding = { "utf-8", "utf-16" }
local function prefer_null_ls_fmt(client)
client.server_capabilities.documentHighlightProvider = true
@@ -149,41 +153,44 @@ if not vim.g.lsp_setup_done then
clangd = {
on_attach = on_attach,
capabilites = capabilities,
- cmd = { 'clangd', '--offset-encoding=utf-16', '--cross-file-rename', '--header-insertion=never', '--suggest-missing-includes' },
+ cmd = { "clangd", "--offset-encoding=utf-16", "--cross-file-rename", "--header-insertion=never",
+ "--suggest-missing-includes" },
init_options = {
clangdFileStatus = true,
},
root_files = {
- '.clangd',
- '.clang-tidy',
- '.clang-format',
- 'compile_commands.json',
- 'compile_flags.txt',
- 'configure.ac', -- AutoTools
+ ".clangd",
+ ".clang-tidy",
+ ".clang-format",
+ "compile_commands.json",
+ "compile_flags.txt",
+ "configure.ac", -- AutoTools
},
},
- cssls = { filetypes = { 'css', 'scss', 'less', 'sass' }, root_dir = lspconfig.util.root_pattern('package.json', '.git') }, -- ghcide = {},
+ cssls = { filetypes = { "css", "scss", "less", "sass" },
+ root_dir = lspconfig.util.root_pattern("package.json", ".git") }, -- ghcide = {},
html = {},
- jsonls = { prefer_null_ls = true, cmd = { '--stdio' } },
+ jsonls = { prefer_null_ls = true, cmd = { "--stdio" } },
intelephense = {},
julials = {
on_new_config = function(new_config, _)
- local julia = vim.fn.expand('~/.julia/environments/nvim-lspconfig/bin/julia')
+ local julia = vim.fn.expand("~/.julia/environments/nvim-lspconfig/bin/julia")
if lspconfig.util.path.is_file(julia) then
new_config.cmd[1] = julia
end
end,
settings = { julia = { format = { indent = 2 } } },
},
- pyright = { settings = { python = { formatting = { provider = 'yapf' }, linting = { pytypeEnabled = true } } } },
+ pyright = { settings = { python = { formatting = { provider = "yapf" }, linting = { pytypeEnabled = true } } } },
rust_analyzer = {
settings = {
- ['rust-analyzer'] = { cargo = { allFeatures = true }, checkOnSave = { command = 'clippy', extraArgs = { '--no-deps' } } },
+ ["rust-analyzer"] = { cargo = { allFeatures = true }, checkOnSave = { command = "clippy",
+ extraArgs = { "--no-deps" } } },
},
},
dartls = {
- cmd = { 'dart', 'language-server', '--protocol=lsp' },
- filetypes = { 'dart' },
+ cmd = { "dart", "language-server", "--protocol=lsp" },
+ filetypes = { "dart" },
init_options = {
closingLabels = true,
flutterOutline = true,
@@ -200,20 +207,20 @@ if not vim.g.lsp_setup_done then
debounce_text_changes = 500,
settings = {
Lua = {
- runtime = { version = 'LuaJIT', path = vim.split(package.path, ';') },
- diagnostics = { enable = true, globals = { 'vim' } },
+ runtime = { version = "LuaJIT", path = vim.split(package.path, ";") },
+ diagnostics = { enable = true, globals = { "vim" } },
workspace = { maxPreload = 2000, preloadFileSize = 50000, checkThirdParty = false },
},
},
},
sqlls = {},
tsserver = {
- capabilities = require('cmp_nvim_lsp').default_capabilities(vim.lsp.protocol.make_client_capabilities()),
+ capabilities = require("cmp_nvim_lsp").default_capabilities(vim.lsp.protocol.make_client_capabilities()),
on_attach = function(client)
client.server_capabilities.document_formatting = false
client.server_capabilities.document_range_formatting = false
end,
- filetypes = { 'javascript', 'javascriptreact', 'javascript.jsx', 'typescript', 'typescriptreact', 'typescript.tsx' },
+ filetypes = { "javascript", "javascriptreact", "javascript.jsx", "typescript", "typescriptreact", "typescript.tsx" },
},
vimls = {},
yamlls = {},
@@ -269,7 +276,7 @@ if not vim.g.lsp_setup_done then
-- null_ls setup
local builtins = null_ls.builtins
- local augroup = vim.api.nvim_create_augroup('LspFormatting', {})
+ local augroup = vim.api.nvim_create_augroup("LspFormatting", {})
-- local eslint_opts = {
-- -- condition = function(utils)
@@ -299,10 +306,10 @@ if not vim.g.lsp_setup_done then
update_in_insert = false,
severity_sort = true,
},
- diagnostics_format = '[#{c}] #{m} (#{s})', -- this will run every time the source runs,
+ diagnostics_format = "[#{c}] #{m} (#{s})", -- this will run every time the source runs,
-- so you should prefer caching results if possible
}),
- builtins.diagnostics.zsh.with({ filetypes = 'zsh', 'sh' }),
+ builtins.diagnostics.zsh.with({ filetypes = "zsh", "sh" }),
builtins.diagnostics.todo_comments,
builtins.diagnostics.teal,
-- null_ls.builtins.diagnostics.vale,
@@ -313,44 +320,45 @@ if not vim.g.lsp_setup_done then
builtins.diagnostics.flake8,
builtins.diagnostics.eslint_d.with({
condition = function(utils)
- return utils.root_has_file('.eslintrc.json')
+ return utils.root_has_file(".eslintrc.json")
end,
}),
builtins.formatting.eslint_d,
-- null_ls.builtins.diagnostics.write_good.with { filetypes = { 'markdown', 'tex' } },
-- Formatting
- builtins.formatting.shfmt.with({ filetypes = { 'bash', 'zsh', 'sh' }, extra_args = { '-i', '2', '-ci' } }),
+ builtins.formatting.shfmt.with({ filetypes = { "bash", "zsh", "sh" }, extra_args = { "-i", "2", "-ci" } }),
builtins.formatting.shellharden,
- builtins.formatting.trim_whitespace.with({ filetypes = { 'tmux', 'teal', 'zsh' } }), -- builtins.formatting.beautysh,
- builtins.formatting.beautysh.with({ filetypes = 'zsh' }),
+ builtins.formatting.trim_whitespace.with({ filetypes = { "tmux", "teal", "zsh" } }), -- builtins.formatting.beautysh,
+ builtins.formatting.beautysh.with({ filetypes = "zsh" }),
builtins.formatting.clang_format.with({
- filetypes = { 'c', 'cpp', 'cs', 'java', 'cuda', 'proto' },
+ filetypes = { "c", "cpp", "cs", "java", "cuda", "proto" },
extra_args = {
- '--style',
- '{BasedOnStyle: Google, IndentWidth: 4, BreakBeforeBinaryOperators: NonAssignment, AllowShortFunctionsOnASingleLine: None}',
+ "--style",
+ "{BasedOnStyle: Google, IndentWidth: 4, BreakBeforeBinaryOperators: NonAssignment, AllowShortFunctionsOnASingleLine: None}",
},
}),
- builtins.formatting.rustfmt,
+ --builtins.formatting.rustfmt,
builtins.formatting.sql_formatter,
-- null_ls.builtins.formatting.cmake_format,
builtins.formatting.isort,
builtins.formatting.htmlbeautifier, -- null_ls.builtins.formatting.prettier,
builtins.formatting.prettierd,
builtins.formatting.prettier.with({
- filetypes = { 'javascript', 'javascriptreact', 'typescript', 'typescriptreact', 'json', 'yaml', 'markdown', 'html', 'css', 'scss', 'less', 'graphql', 'vue', 'svelte' },
- extra_args = { '--single-quote', '--tab-width 4', '--print-width 200' },
+ filetypes = { "javascript", "javascriptreact", "typescript", "typescriptreact", "json", "yaml", "markdown", "html",
+ "css", "scss", "less", "graphql", "vue", "svelte" },
+ extra_args = { "--single-quote", "--tab-width 4", "--print-width 200" },
}),
- builtins.formatting.rustfmt,
-- builtins.formatting.stylua,
-- builtins.formatting.lua_format,
builtins.formatting.stylua.with({
- filetypes = { 'lua' },
- command = 'stylua',
- args = { '--quote_style', 'AutoPreferSingle', '--indent-width', '2', '--column-width', '160', '--indent-type', 'Spaces', '-' },
+ filetypes = { "lua" },
+ command = "stylua",
+ args = { "--quote_style", "AutoPreferSingle", "--indent-width", "2", "--column-width", "160", "--indent-type",
+ "Spaces", "-" },
}),
-- builtins.formatting.dart_format,
- builtins.formatting.dart_format.with({ filetypes = { 'dart' } }),
+ builtins.formatting.dart_format.with({ filetypes = { "dart" } }),
builtins.formatting.trim_whitespace,
builtins.formatting.yapf,
-- null_ls.builtins.formatting.black
@@ -378,9 +386,9 @@ if not vim.g.lsp_setup_done then
sources = sources,
update_in_insert = true,
on_attach = function(client, bufnr)
- if client.supports_method('textDocument/formatting') then
+ if client.supports_method("textDocument/formatting") then
vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr })
- vim.api.nvim_create_autocmd('BufWritePre', {
+ vim.api.nvim_create_autocmd("BufWritePre", {
group = augroup,
buffer = bufnr,
callback = function()
@@ -392,7 +400,7 @@ if not vim.g.lsp_setup_done then
})
-- Install all the null-ls sources using Mason
- local registry = require('mason-registry')
+ local registry = require("mason-registry")
for _, source_name in ipairs(sources) do
local ok, pkg = pcall(registry.get_package, source_name)
if ok then
@@ -413,17 +421,17 @@ if not vim.g.lsp_setup_done then
-- end
-- end
-- end
- vim.api.nvim_create_user_command('NullLsToggle', function()
+ vim.api.nvim_create_user_command("NullLsToggle", function()
-- you can also create commands to disable or enable sources
- require('null-ls').toggle({})
+ require("null-ls").toggle({})
end, {})
local null_ls_stop = function()
local null_ls_client
- local clients = require('user.mods').get_lsp_clients(bufnr)
+ local clients = require("user.mods").get_lsp_clients(bufnr)
for _, client in ipairs(clients) do
- if client.name == 'null-ls' then
+ if client.name == "null-ls" then
null_ls_client = client
end
end
@@ -434,7 +442,7 @@ if not vim.g.lsp_setup_done then
null_ls_client.stop()
end
- vim.api.nvim_create_user_command('NullLsStop', null_ls_stop, {})
+ vim.api.nvim_create_user_command("NullLsStop", null_ls_stop, {})
vim.g.lsp_setup_done = true
end