hotfixes for lsp

This commit is contained in:
Nicolai Van der Storm 2023-10-17 14:01:12 +02:00
parent 1afa83cfcf
commit c64b53a61e
Signed by: NicolaiVdS
GPG Key ID: CA53B34914EFD59B
3 changed files with 284 additions and 4 deletions

View File

@ -47,11 +47,11 @@
"xdph": "xdph"
},
"locked": {
"lastModified": 1697502546,
"narHash": "sha256-a2e/QF+m5/ipFo6RxRPXUKiQB0zRLZR3/tX2xVohWyY=",
"lastModified": 1697540776,
"narHash": "sha256-Jr0kMlZfCmx3JLL4ZvfonP3GRZdLy+NdiHeeth0rN7o=",
"owner": "hyprwm",
"repo": "Hyprland",
"rev": "93676f91a059d85f9d29a99684fb19b40af5abda",
"rev": "20e7ccd48033dcacc233b2a2f46d385049bf299b",
"type": "github"
},
"original": {

View File

@ -23,7 +23,7 @@
# LSP
{
plugin = vimPlugins.nvim-lspconfig;
plugin = nvim-lspconfig;
config = toLuaFile ./plugins/lsp.lua;
}

View File

@ -20,3 +20,283 @@ if not status then
return
end
require("luasnip.loaders.from_vscode").lazy_load()
-- For consistency
local diagnostic = vim.diagnostic
local lsp = vim.lsp
local keymap = vim.keymap
local api = vim.api
diagnostic.config({
virtual_text = true,
severity_sort = true,
underline = true,
})
local augroup = api.nvim_create_augroup("LspFormatting" , {})
local on_attach = function(client, bufnr)
-- format on save
if client.supports_method("textDocument/formatting") then
-- api.nvim_clear_autocmds({ group = augroup, buffer = bufnr })
-- api.nvim_create_autocmd("BufWritePre", {
-- group = augroup,
-- buffer = bufnr,
-- callback = function()
-- lsp.buf.format({ async = false })
-- end,
-- })
end
local map_opts = {
buffer = true,
silent = true,
}
local float_window_width = 45
keymap.set("n", "<space>s", function()
lsp.buf.hover()
end, map_opts)
lsp.handlers["textDocument/hover"] = lsp.with(vim.lsp.handlers.hover, {
border = "rounded",
width = float_window_width,
})
keymap.set("n", "<space>e", function()
diagnostic.open_float(0, {
source = "always",
scope = "line",
header = false,
width = float_window_width,
border = "rounded",
})
end, map_opts)
end
local capabilities = cmp_capabilities.default_capabilities()
lspconfig.jedi_language_server.setup({
--Python
on_attach = on_attach,
capabilities = capabilities,
})
lspconfig.tsserver.setup({
-- Javascript and Typescript
on_attach = on_attach,
capabilities = capabilities,
})
lspconfig.html.setup({
on_attach = on_attach,
capabilities = capabilities,
})
lspconfig.hls.setup({
on_attach = on_attach,
capabilities = capabilities,
})
lspconfig.rust_analyzer.setup({
on_attach = on_attach,
capabilities = capabilities,
})
lspconfig.cssls.setup({
on_attach = on_attach,
capabilities = capabilities,
})
lspconfig.lua_ls.setup({
on_attach = on_attach,
capabilities = capabilities,
})
lspconfig.bashls.setup({
on_attach = on_attach,
capabilities = capabilities,
})
lspconfig.clangd.setup({
on_attach = on_attach,
capabilities = capabilities,
})
lspconfig.dockerls.setup({
on_attach = on_attach,
capabilities = capabilities,
})
lspconfig.yamlls.setup({
on_attach = on_attach,
capabilities = capabilities,
})
lspconfig.zls.setup({
on_attach = on_attach,
capabilities = capabilities,
})
lspconfig.grammarly.setup({
on_attach = on_attach,
capabilities = capabilities,
})
lspconfig.gopls.setup({
on_attach = on_attach,
capabilities = capabilities,
})
-- lspconfig.nil_ls.setup({
-- on_attach = on_attach,
-- capabilities = capabilities,
-- })
lspconfig.nixd.setup({
on_attach = on_attach,
capabilities = capabilities,
})
lspconfig.jsonls.setup({
on_attach = on_attach,
capabilities = capabilities,
})
local has_root = function(root_files)
return function(utils)
return utils.root_has_file(root_files)
end
end
local js_conf = function(root_files)
return {
only_local = "node_modules/.bin",
condition = has_root(root_files),
}
end
-- null_ls.setup({
-- on_attach = on_attach,
-- capabilities = capabilities,
-- sources = {
-- -- format
-- null_ls.builtins.formatting.stylua,
-- null_ls.builtins.formatting.prettierd.with({
-- extra_filetypes = { "svelte", "toml" },
-- js_conf({
-- ".prettierrc",
-- ".prettierrc.cjs",
-- ".prettierrc.js",
-- ".prettierrc.json",
-- "prettier.config.js",
-- }),
-- }),
-- null_ls.builtins.formatting.eslint_d.with(js_conf({
-- ".eslintrc",
-- ".eslintrc.cjs",
-- ".eslintrc.js",
-- ".eslintrc.json",
-- })),
--
-- -- diagnostics
-- null_ls.builtins.diagnostics.eslint_d.with(js_conf({
-- ".eslintrc",
-- ".eslintrc.cjs",
-- ".eslintrc.js",
-- ".eslintrc.json",
-- })),
--
-- -- code actions
-- null_ls.builtins.code_actions.gitsigns,
-- null_ls.builtins.code_actions.eslint_d.with(js_conf({
-- ".eslintrc",
-- ".eslintrc.cjs",
-- ".eslintrc.js",
-- ".eslintrc.json",
-- })),
-- },
-- })
local kind_icons = {
Text = "",
Method = "",
Function = "",
Constructor = "",
Field = "",
Variable = "",
Class = "",
Interface = "",
Module = "",
Property = "",
Unit = "",
Value = "",
Enum = "",
Keyword = "",
Snippet = "",
Color = "",
File = "",
Reference = "",
Folder = "",
EnumMember = "",
Constant = "",
Struct = "פּ",
Event = "",
Operator = "",
TypeParameter = "",
Copilot = "",
}
cmp.setup({
snippet = {
expand = function(args)
luasnip.lsp_expand(args.body)
end,
},
window = {
completion = cmp.config.window.bordered({
scrollbar = false,
max_width = 1,
max_height = 1,
}),
documentation = cmp.config.window.bordered()
},
mapping = {
['<C-k>'] = cmp.mapping.scroll_docs(-4),
['<C-j>'] = cmp.mapping.scroll_docs(4),
['<C-Space>'] = cmp.mapping.complete(),
['<C-e>'] = cmp.mapping.abort(),
["<Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_next_item()
else
fallback()
end
end, { "i", "s" }),
["<S-Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_prev_item()
else
fallback()
end
end, { "i", "s" }),
['<CR>'] = cmp.mapping({
i = function(fallback)
if cmp.visible() then
cmp.confirm({ behavior = cmp.ConfirmBehavior.Replace, select = true })
else
fallback()
end
end,
}),
},
formatting = {
fields = { "kind", "abbr", "menu" },
format = function(_, item)
local label_width = 45
local label = item.abbr
local truncated_label = vim.fn.strcharpart(label, 0, label_width)
if truncated_label ~= label then
item.abbr = truncated_label .. ""
elseif string.len(label) < label_width then
local padding = string.rep(" ", label_width - string.len(label))
item.abbr = label .. padding
end
item.menu = item.kind
item.kind = kind_icons[item.kind]
return item
end,
},
sources = cmp.config.sources({
{ name = "nvim_lsp" },
{ name = "buffer" },
{ name = "path" },
{ name = "cmp_tabnine" },
{ name = "nvim_lua" },
{ name = "luasnip" },
}),
})