dots-of-war/eggs/nvim/lua/dots/plugins/lsp.lua

166 lines
8.9 KiB
Lua

-- [nfnl] Compiled from fnl/dots/plugins/lsp.fnl by https://github.com/Olical/nfnl, do not edit.
local _local_1_ = require("dots.prelude")
local autoload = _local_1_["autoload"]
local a = _local_1_["a"]
local utils = _local_1_["utils"]
local lsp = autoload("lspconfig")
local lsp_configs = autoload("lspconfig/configs")
local cmp_nvim_lsp = autoload("cmp_nvim_lsp")
local function setup()
vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(vim.lsp.diagnostic.on_publish_diagnostics, {virtual_text = {prefix = "\226\151\134"}, severity_sort = true, signs = false, update_in_insert = false})
local function on_attach(client, bufnr)
if client.server_capabilities.documentHighlight then
utils.highlight("LspReferenceRead", {gui = "underline"})
utils.highlight("LspReferenceText", {gui = "underline"})
utils.highlight("LspReferenceWrite", {gui = "underline"})
return vim.api.nvim_exec("augroup lsp_document_highlight\n autocmd! * <buffer> \n autocmd CursorHold <buffer> lua vim.lsp.buf.document_highlight() \n autocmd CursorMoved <buffer> lua vim.lsp.buf.clear_references()\n augroup END", false)
else
return nil
end
end
local function better_root_pattern(patterns, except_patterns)
local function _3_(path)
if not lsp.util.root_pattern(except_patterns)(path) then
return lsp.util.root_pattern(patterns)(path)
else
return nil
end
end
return _3_
end
local default_capabilities
do
local capabilities = vim.lsp.protocol.make_client_capabilities()
capabilities.textDocument.completion.completionItem.snippetSupport = true
default_capabilities = cmp_nvim_lsp.default_capabilities(capabilities)
end
local function init_lsp(lsp_name, _3fopts)
local merged_opts = a.merge({on_attach = on_attach, capabilities = default_capabilities}, (_3fopts or {}))
return lsp[lsp_name].setup(merged_opts)
end
local function _5_()
return vim.lsp.buf.range_formatting({}, {0, 0}, {vim.fn.line("$"), 0})
end
init_lsp("jsonls", {commands = {Format = {_5_}}})
init_lsp("denols", {root_dir = better_root_pattern({".git"}, {"package.json"})})
init_lsp("hls", {settings = {languageServerHaskell = {formattingProvider = "stylish-haskell"}}})
init_lsp("ocamllsp")
init_lsp("vimls")
init_lsp("gopls")
init_lsp("bashls")
init_lsp("erlangls")
init_lsp("yamlls")
init_lsp("html")
init_lsp("svelte")
init_lsp("elmls")
init_lsp("texlab")
init_lsp("pyright")
init_lsp("vls")
init_lsp("perlls")
init_lsp("powershell_es", {bundle_path = "/home/leon/powershell"})
init_lsp("clangd")
init_lsp("cssls", {filestypes = {"css", "scss", "less", "stylus"}, root_dir = lsp.util.root_pattern({"package.json", ".git"}), settings = {css = {validate = true}, less = {validate = true}, scss = {validate = true}}})
local function _6_(client, bufnr)
client.resolved_capabilities.document_formatting = false
return on_attach(client, bufnr)
end
lsp.ts_ls.setup({root_dir = lsp.util.root_pattern("package.json"), on_attach = _6_})
do
local rustaceanvim = require("rustaceanvim")
local rustaceanvim_config = require("rustaceanvim.config")
local extension_path = "/home/leon/.vscode/extensions/vadimcn.vscode-lldb-1.6.8/"
local codelldb_path = (extension_path .. "adapter/codelldb")
local liblldb_path = (extension_path .. "lldb/lib/liblldb.so")
local features = nil
vim.g.rustaceanvim = {tools = {inlay_hints = {show_parameter_hints = false}, autoSetHints = false}, dap = {adapter = rustaceanvim_config.get_codelldb_adapter(codelldb_path, liblldb_path)}, server = {on_attach = on_attach, capabilities = default_capabilities, settings = {["rust-analyzer"] = {cargo = {loadOutDirsFromCheck = true, features = (features or "all"), noDefaultFeatures = (nil ~= features)}, procMacro = {enable = true}, diagnostics = {experimental = {enable = false}, enable = false}, checkOnSave = {overrideCommand = {"cargo", "clippy", "--workspace", "--message-format=json", "--all-targets", "--all-features"}}}}}}
end
if (true or not lsp.fennel_language_server) then
lsp_configs["fennel_language_server"] = {default_config = {cmd = "/Users/leon/.cargo/bin/fennel-language-server", filetypes = {"fennel"}, single_file_support = true, root_dir = lsp.util.root_pattern({"fnl", "init.lua"}), settings = {fennel = {workspace = {library = vim.api.nvim_list_runtime_paths()}, diagnostics = {globals = {"vim"}}}}}}
else
end
init_lsp("fennel_language_server", {root_dir = lsp.util.root_pattern({"fnl", "init.lua"}), settings = {fennel = {workspace = {library = vim.api.nvim_list_runtime_paths()}, diagnostics = {globals = {"vim", "comment"}}}}})
--[[ (when (not lsp.prolog_lsp) (tset lsp-configs "prolog_lsp" {:default_config {:cmd ["swipl" "-g" "use_module(library(lsp_server))." "-g" "lsp_server:main" "-t" "halt" "--" "stdio"] :filetypes ["prolog"] :root_dir (fn [fname] (or (lsp.util.find_git_ancestor fname) (vim.loop.os_homedir))) :settings {}}})) (lsp.prolog_lsp.setup {}) ]]
--[[ (let [ewwls-path "/home/leon/coding/projects/ls-eww/crates/ewwls/target/debug/ewwls"] (when (vim.fn.filereadable ewwls-path) (when (not lsp.ewwls) (set lsp-configs.ewwls {:default_config {:cmd [ewwls-path] :filetypes ["yuck"] :root_dir (fn [fname] (or (lsp.util.find_git_ancestor fname) (vim.loop.os_homedir))) :settings {}}})) (init-lsp "ewwls"))) ]]
local autostart_semantic_highlighting = true
local function refresh_semantic_highlighting()
if autostart_semantic_highlighting then
vim.lsp.buf_request(0, "textDocument/semanticTokens/full", {textDocument = vim.lsp.util.make_text_document_params()}, nil)
return vim.NIL
else
return nil
end
end
if not lsp.idris2_lsp then
local function _9_(new_config, new_root_dir)
new_config.cmd = {"idris2-lsp"}
new_config.capabilities.workspace.semanticTokens = {refreshSupport = true}
return nil
end
local function _10_(fname)
local scandir = require("plenary.scandir")
local function find_ipkg_ancestor(fname0)
local function _11_(path)
local res = scandir.scan_dir(path, {depth = 1, search_pattern = ".+%.ipkg"})
if not vim.tbl_isempty(res) then
return path
else
return nil
end
end
return lsp.util.search_ancestors(fname0, _11_)
end
return ((find_ipkg_ancestor(fname) or lsp.util.find_git_ancestor(fname)) or vim.loop.os_homedir())
end
lsp_configs.idris2_lsp = {default_config = {cmd = {"idris2-lsp"}, filetypes = {"idris2"}, on_new_config = _9_, root_dir = _10_, settings = {}}}
else
end
local function _14_(err, method, result, client_id, bufnr, config)
local client = vim.lsp.get_client_by_id(client_id)
local legend = client.server_capabilities.semanticTokensProvider.legend
local token_types = legend.tokenTypes
local data = result.data
local ns = vim.api.nvim_create_namespace("nvim-lsp-semantic")
vim.api.nvim_buf_clear_namespace(bufnr, ns, 0, ( - 1))
local tokens = {}
local prev_line, prev_start = nil, 0
for i = 1, #data, 5 do
local delta_line = data[i]
prev_line = ((prev_line and (prev_line + delta_line)) or delta_line)
local delta_start = data[(i + 1)]
prev_start = (((delta_line == 0) and (prev_start + delta_start)) or delta_start)
local token_type = token_types[(data[(i + 3)] + 1)]
vim.api.nvim_buf_add_highlight(bufnr, ns, ("LspSemantic_" .. token_type), prev_line, prev_start, (prev_start + data[(i + 2)]))
end
return nil
end
lsp.idris2_lsp.setup({on_attach = refresh_semantic_highlighting, autostart = true, handlers = {["workspace/semanticTokens/refresh"] = refresh_semantic_highlighting, ["textDocument/semanticTokens/full"] = _14_}})
vim.cmd("highlight link LspSemantic_type Include")
vim.cmd("highlight link LspSemantic_function Identifier")
vim.cmd("highlight link LspSemantic_struct Number")
vim.cmd("highlight LspSemantic_variable guifg=gray")
vim.cmd("highlight link LspSemantic_keyword Structure")
vim.opt.signcolumn = "yes"
local function cleanup_markdown(contents)
if (contents.kind == "markdown") then
contents["value"] = string.gsub(contents.value, "%[([^%]]+)%]%(([^%)]+)%)", "[%1]")
else
end
return contents
end
local previous_handler = vim.lsp.handlers["textDocument/hover"]
local function _16_(a0, result, b, c)
if not (result and result.contents) then
return previous_handler(a0, result, b, c)
else
local new_contents = cleanup_markdown(result.contents)
result["contents"] = new_contents
return previous_handler(a0, result, b, c)
end
end
vim.lsp.handlers["textDocument/hover"] = _16_
return nil
end
local function _18_()
return require("mason").setup()
end
return {utils.plugin("williamboman/mason.nvim", {config = _18_}), utils.plugin("williamboman/mason-lspconfig.nvim", {config = {ensure_installed = {"rust_analyzer"}}}), utils.plugin("neovim/nvim-lspconfig", {event = "VeryLazy", lazy = true, config = setup})}