280 lines
6.5 KiB
Lua

local on_attach = require("util.lsp").on_attach
local diagnostic_signs = require("util.icons").diagnostic_signs
local typescript_organise_imports = require("util.lsp").typescript_organise_imports
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()
-- solidity
lspconfig.solidity_ls.setup({
capabilities = capabilities,
on_attach = on_attach,
filetypes = { "solidity" },
root_dir = lspconfig.util.root_pattern("hardhat.config.*", 'foundry.toml', 'remappings.txt', ".git"),
settings = {
solidity = {
includePath = '',
remappings = {
["@openzeppelin/"] = "lib/openzeppelin-contracts/",
["account-abstraction/"] = "lib/account-abstraction/"
}
}
}
})
-- 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 = {
library = {
vim.fn.expand("$VIMRUNTIME/lua"),
vim.fn.expand("$XDG_CONFIG_HOME") .. "/nvim/lua",
},
},
},
},
})
-- 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.ts_ls.setup({
on_attach = on_attach,
capabilities = capabilities,
filetypes = {
"typescript",
"javascript",
"typescriptreact",
"javascriptreact",
},
commands = {
TypeScriptOrganizeImports = typescript_organise_imports,
},
settings = {
typescript = {
indentStyle = "space",
indentSize = 2,
},
},
})
-- bash
lspconfig.bashls.setup({
capabilities = capabilities,
on_attach = on_attach,
filetypes = { "sh", "aliasrc" },
})
-- markdown
lspconfig.markdown_oxide.setup({
capabilities = capabilities,
on_attach = on_attach,
filetypes = { "markdown" },
})
-- 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",
},
})
-- SQL
require'lspconfig'.sqlls.setup({
capabilities = capabilities,
on_attach = on_attach,
cmd = {
"sql-language-server",
"up",
"--method", "stdio"
},
-- root_dir = "",
})
-- Zig
require 'lspconfig'.zls.setup({
filetype = { "zig", "zir" },
on_attach = on_attach,
cmd = { "zls", },
})
vim.api.nvim_create_autocmd('BufWritePre',{
pattern = {"*.zig", "*.zon"},
callback = function()
vim.lsp.buf.format()
end
})
for type, icon in pairs(diagnostic_signs) do
local hl = "DiagnosticSign" .. type
vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = "" })
end
-- local solhint = require("efmls-configs.linters.solhint")
local prettier_d = require("efmls-configs.formatters.prettier_d")
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 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 cpplint = require("efmls-configs.linters.cpplint")
local clangformat = require("efmls-configs.formatters.clang_format")
local markdownlint = require("efmls-configs.linters.markdownlint")
local sqlfluff = require("efmls-configs.linters.sqlfluff")
local sqlformatter = require("efmls-configs.formatters.sql-formatter")
-- configure efm server
lspconfig.efm.setup({
filetypes = {
"solidity",
"lua",
"python",
"json",
"jsonc",
"sh",
"javascript",
"javascriptreact",
"typescript",
"typescriptreact",
"svelte",
"vue",
"markdown",
"docker",
"html",
"css",
"c",
"cpp",
"zig",
"sql",
},
init_options = {
documentFormatting = true,
documentRangeFormatting = true,
hover = true,
documentSymbol = true,
codeAction = true,
completion = true,
},
settings = {
version = "*",
languages = {
-- solidity = { solhint, prettier_d },
lua = { luacheck, stylua },
python = { 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, markdownlint },
docker = { prettier_d },
html = { prettier_d },
css = { prettier_d },
c = { clangformat, cpplint },
cpp = { clangformat, cpplint },
sql = { sqlfluff, sqlformatter },
-- zig = { zls },
},
},
})
end
-- auto-format on save - BROKEN
--[[ local lsp_fmt_group = vim.api.nvim_create_augroup("LspFormattingGroup", {})
-- vim.api.nvim_create_autocmd({ "BufWritePre", "BufEnter", "BufWritePost", "InsertLeave" }, {
-- vim.api.nvim_create_autocmd({ "BufWritePre" }, {
-- group = lsp_fmt_group,
-- callback = function()
-- local efm = vim.lsp.get_clients({ name = "efm", "zls" })
-- if vim.tbl_isempty(efm) then
-- return
-- end
-- vim.lsp.buf.format({ name = "efm", async = true })
-- 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",
},
}