2024-11-23 19:32:34 +00:00
|
|
|
-- [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
|
2024-12-18 11:47:46 +00:00
|
|
|
lsp.ts_ls.setup({root_dir = lsp.util.root_pattern("package.json"), on_attach = _6_})
|
2024-11-23 19:32:34 +00:00
|
|
|
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})}
|