280 lines
6.5 KiB
Lua
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",
|
||
|
|
},
|
||
|
|
}
|
||
|
|
|