-- [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! * \n autocmd CursorHold lua vim.lsp.buf.document_highlight() \n autocmd CursorMoved 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})}