neovim setup
This commit is contained in:
202
lua/plugins/nvim-lspconfig.lua
Normal file
202
lua/plugins/nvim-lspconfig.lua
Normal file
@@ -0,0 +1,202 @@
|
||||
local on_attach = require("util.lsp").on_attach
|
||||
local diagnostic_signs = require("util.icons").diagnostic_signs
|
||||
|
||||
local config = function()
|
||||
require("neoconf").setup({})
|
||||
local cmp_nvim_lsp = require("cmp_nvim_lsp")
|
||||
local lspconfig = require("lspconfig")
|
||||
local capabilities = cmp_nvim_lsp.default_capabilities()
|
||||
|
||||
for type, icon in pairs(diagnostic_signs) do
|
||||
local hl = "DiagnosticSign" .. type
|
||||
vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = "" })
|
||||
end
|
||||
|
||||
-- lua
|
||||
lspconfig.lua_ls.setup({
|
||||
capabilities = capabilities,
|
||||
on_attach = on_attach,
|
||||
settings = { -- custom settings for lua
|
||||
Lua = {
|
||||
-- make the language server recognize "vim" global
|
||||
diagnostics = {
|
||||
globals = { "vim" },
|
||||
},
|
||||
workspace = {
|
||||
-- make language server aware of runtime files
|
||||
library = {
|
||||
[vim.fn.expand("$VIMRUNTIME/lua")] = true,
|
||||
[vim.fn.stdpath("config") .. "/lua"] = true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
-- json
|
||||
lspconfig.jsonls.setup({
|
||||
capabilities = capabilities,
|
||||
on_attach = on_attach,
|
||||
filetypes = { "json", "jsonc" },
|
||||
})
|
||||
|
||||
-- python
|
||||
lspconfig.pyright.setup({
|
||||
capabilities = capabilities,
|
||||
on_attach = on_attach,
|
||||
settings = {
|
||||
pyright = {
|
||||
disableOrganizeImports = false,
|
||||
analysis = {
|
||||
useLibraryCodeForTypes = true,
|
||||
autoSearchPaths = true,
|
||||
diagnosticMode = "workspace",
|
||||
autoImportCompletions = true,
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
-- typescript
|
||||
lspconfig.tsserver.setup({
|
||||
on_attach = on_attach,
|
||||
capabilities = capabilities,
|
||||
filetypes = {
|
||||
"typescript",
|
||||
"javascript",
|
||||
"typescriptreact",
|
||||
"javascriptreact",
|
||||
},
|
||||
root_dir = lspconfig.util.root_pattern("package.json", "tsconfig.json", ".git"),
|
||||
})
|
||||
|
||||
-- bash
|
||||
lspconfig.bashls.setup({
|
||||
capabilities = capabilities,
|
||||
on_attach = on_attach,
|
||||
filetypes = { "sh", "aliasrc" },
|
||||
})
|
||||
|
||||
-- solidity
|
||||
lspconfig.solidity.setup({
|
||||
capabilities = capabilities,
|
||||
on_attach = on_attach,
|
||||
filetypes = { "solidity" },
|
||||
})
|
||||
|
||||
-- typescriptreact, javascriptreact, css, sass, scss, less, svelte, vue
|
||||
lspconfig.emmet_ls.setup({
|
||||
capabilities = capabilities,
|
||||
on_attach = on_attach,
|
||||
filetypes = {
|
||||
"typescriptreact",
|
||||
"javascriptreact",
|
||||
"javascript",
|
||||
"css",
|
||||
"sass",
|
||||
"scss",
|
||||
"less",
|
||||
"svelte",
|
||||
"vue",
|
||||
"html",
|
||||
},
|
||||
})
|
||||
|
||||
-- docker
|
||||
lspconfig.dockerls.setup({
|
||||
capabilities = capabilities,
|
||||
on_attach = on_attach,
|
||||
})
|
||||
|
||||
-- C/C++
|
||||
lspconfig.clangd.setup({
|
||||
capabilities = capabilities,
|
||||
on_attach = on_attach,
|
||||
cmd = {
|
||||
"clangd",
|
||||
"--offset-encoding=utf-16",
|
||||
},
|
||||
})
|
||||
|
||||
local luacheck = require("efmls-configs.linters.luacheck")
|
||||
local stylua = require("efmls-configs.formatters.stylua")
|
||||
local flake8 = require("efmls-configs.linters.flake8")
|
||||
local black = require("efmls-configs.formatters.black")
|
||||
local eslint = require("efmls-configs.linters.eslint")
|
||||
local prettier_d = require("efmls-configs.formatters.prettier_d")
|
||||
local fixjson = require("efmls-configs.formatters.fixjson")
|
||||
local shellcheck = require("efmls-configs.linters.shellcheck")
|
||||
local shfmt = require("efmls-configs.formatters.shfmt")
|
||||
local hadolint = require("efmls-configs.linters.hadolint")
|
||||
local solhint = require("efmls-configs.linters.solhint")
|
||||
local cpplint = require("efmls-configs.linters.cpplint")
|
||||
local clangformat = require("efmls-configs.formatters.clang_format")
|
||||
|
||||
-- configure efm server
|
||||
lspconfig.efm.setup({
|
||||
filetypes = {
|
||||
"lua",
|
||||
"python",
|
||||
"json",
|
||||
"jsonc",
|
||||
"sh",
|
||||
"javascript",
|
||||
"javascriptreact",
|
||||
"typescript",
|
||||
"typescriptreact",
|
||||
"svelte",
|
||||
"vue",
|
||||
"markdown",
|
||||
"docker",
|
||||
"solidity",
|
||||
"html",
|
||||
"css",
|
||||
"c",
|
||||
"cpp",
|
||||
},
|
||||
init_options = {
|
||||
documentFormatting = true,
|
||||
documentRangeFormatting = true,
|
||||
hover = true,
|
||||
documentSymbol = true,
|
||||
codeAction = true,
|
||||
completion = true,
|
||||
},
|
||||
settings = {
|
||||
languages = {
|
||||
lua = { luacheck, stylua },
|
||||
python = { flake8, black },
|
||||
typescript = { eslint, prettier_d },
|
||||
json = { eslint, fixjson },
|
||||
jsonc = { eslint, fixjson },
|
||||
sh = { shellcheck, shfmt },
|
||||
javascript = { eslint, prettier_d },
|
||||
javascriptreact = { eslint, prettier_d },
|
||||
typescriptreact = { eslint, prettier_d },
|
||||
svelte = { eslint, prettier_d },
|
||||
vue = { eslint, prettier_d },
|
||||
markdown = { prettier_d },
|
||||
docker = { hadolint, prettier_d },
|
||||
solidity = { solhint },
|
||||
html = { prettier_d },
|
||||
css = { prettier_d },
|
||||
c = { clangformat, cpplint },
|
||||
cpp = { clangformat, cpplint },
|
||||
},
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
return {
|
||||
"neovim/nvim-lspconfig",
|
||||
config = config,
|
||||
lazy = false,
|
||||
dependencies = {
|
||||
"windwp/nvim-autopairs",
|
||||
"williamboman/mason.nvim",
|
||||
"creativenull/efmls-configs-nvim",
|
||||
"hrsh7th/nvim-cmp",
|
||||
"hrsh7th/cmp-buffer",
|
||||
"hrsh7th/cmp-nvim-lsp",
|
||||
},
|
||||
}
|
||||
Reference in New Issue
Block a user