-- [nfnl] fnl/clojure-nvim/lsp.fnl local _local_1_ = require("clojure-nvim.fs") local get_package_path = _local_1_["get-package-path"] local edn = require("clojure-nvim.vendor.edn") local textcase = require("textcase") local clojure_lsp_commands = get_package_path("lua", "clojure-nvim", "clojure-lsp-commands.edn") local function get_uri_and_pos() local _let_2_ = vim.api.nvim_win_get_cursor(0) local row = _let_2_[1] local col = _let_2_[2] local uri = vim.uri_from_bufnr(0) return {uri, (row - 1), col} end local function get_client(name) if (nil == name) then _G.error("Missing argument name on fnl/clojure-nvim/lsp.fnl:17", 2) else end return vim.lsp.get_clients({name = name})[1] end local function execute_positional_command(cmd, _3fargs) if (nil == cmd) then _G.error("Missing argument cmd on fnl/clojure-nvim/lsp.fnl:20", 2) else end local client = get_client("clojure-lsp") local _let_5_ = get_uri_and_pos() local uri = _let_5_[1] local row = _let_5_[2] local col = _let_5_[3] local function _6_() if ("string" == type(_3fargs)) then return _3fargs else return unpack((_3fargs or {})) end end client:exec_cmd({command = cmd.command, arguments = {uri, row, col, _6_()}}) return vim.api.nvim__redraw({buf = 0, flush = true}) end local function execute_prompt_command(cmd, _3fargs) if (nil == cmd) then _G.error("Missing argument cmd on fnl/clojure-nvim/lsp.fnl:29", 2) else end local prompt = cmd.prompt if not _3fargs then local function _8_(_241) return execute_positional_command(cmd, _241) end return vim.ui.input({prompt = (prompt .. " ")}, _8_) else local function _10_() local t_9_ = _3fargs if (nil ~= t_9_) then t_9_ = t_9_.args else end return t_9_ end return execute_positional_command(cmd, _10_()) end end local function execute_choice_command(cmd, _3fargs) if (nil == cmd) then _G.error("Missing argument cmd on fnl/clojure-nvim/lsp.fnl:35", 2) else end local prompt = cmd.prompt local choices = cmd.choices if not _3fargs then local function _14_(_241) return execute_positional_command(cmd, _241) end return vim.ui.select(choices, {prompt = prompt}, _14_) else local function _16_() local t_15_ = _3fargs if (nil ~= t_15_) then t_15_ = t_15_.args else end return t_15_ end return execute_positional_command(cmd, _16_()) end end local function get_command_fn(cmd) if (nil == cmd) then _G.error("Missing argument cmd on fnl/clojure-nvim/lsp.fnl:41", 2) else end local case_20_ = cmd.type if (case_20_ == "positional") then local function _21_(_args) return execute_positional_command(cmd, nil) end return _21_ elseif (case_20_ == "prompt") then local function _22_(args) if (nil == args) then _G.error("Missing argument args on fnl/clojure-nvim/lsp.fnl:44", 2) else end return execute_prompt_command(cmd, args) end return _22_ elseif (case_20_ == "choice") then local function _24_(args) if (nil == args) then _G.error("Missing argument args on fnl/clojure-nvim/lsp.fnl:45", 2) else end return execute_choice_command(cmd, args) end return _24_ else return nil end end local function register_keymaps(commands) if (nil == commands) then _G.error("Missing argument commands on fnl/clojure-nvim/lsp.fnl:47", 2) else end for _, cmd in ipairs(commands) do if cmd.shortcut then vim.keymap.set("n", ("cl" .. cmd.shortcut), get_command_fn(cmd), {silent = true, noremap = true, desc = ("clojure-lsp-" .. cmd.command)}) else end end return nil end local function register_commands(commands) if (nil == commands) then _G.error("Missing argument commands on fnl/clojure-nvim/lsp.fnl:56", 2) else end for _, cmd in ipairs(commands) do local nargs if cmd.positional then nargs = "0" else nargs = "?" end vim.api.nvim_create_user_command(("CljLsp" .. textcase.api.to_pascal_case(cmd.command)), get_command_fn(cmd), {nargs = nargs}) end local function _31_() local _let_32_ = get_uri_and_pos() local uri = _let_32_[1] local row = _let_32_[2] local col = _let_32_[3] return vim.lsp.buf_notify(0, "clojure/cursorInfo/log", {textDocument = {uri = uri}, position = {line = row, character = col}}) end vim.api.nvim_create_user_command("CljLspCursorInfo", _31_, {nargs = 0}) local function _33_() return vim.lsp.buf_notify(0, "clojure/serverInfo/log") end vim.api.nvim_create_user_command("CljLspServerInfo", _33_, {nargs = 0}) local function _34_() return vim.lsp.buf_request_sync(0, "clojure/workspace/projectTree/nodes") end vim.api.nvim_create_user_command("CljLspProjectTree", _34_, {nargs = 0}) return nil end local M = {} local default_lsp_config = {cmd = {"clojure-lsp"}, filetypes = {"clojure"}, root_markers = {"project.clj", "deps.edn", "build.boot", "shadow-cljs.edn", "bb.edn", ".git"}} M["set-config"] = function(_3flsp_config) local lsp_config = (_3flsp_config or {}) local function _35_() if vim.tbl_isempty(lsp_config) then return default_lsp_config else return vim.tbl_deep_extend("force", default_lsp_config, lsp_config) end end return vim.lsp.config("clojure-lsp", _35_()) end M["enable-config"] = function() return vim.lsp.enable("clojure-lsp") end M["register-keys"] = function(config) if (nil == config) then _G.error("Missing argument config on fnl/clojure-nvim/lsp.fnl:100", 2) else end local reg_keys = config["register-keymaps"] local reg_cmds = config["register-commands"] if vim.uv.fs_stat(clojure_lsp_commands) then local commands = edn.decode(vim.fn.readblob(clojure_lsp_commands)) if reg_keys then register_keymaps(commands) else end if reg_cmds then return register_commands(commands) else return nil end else return nil end end M.initialize = function(config) if (nil == config) then _G.error("Missing argument config on fnl/clojure-nvim/lsp.fnl:109", 2) else end local _42_ do local t_41_ = config if (nil ~= t_41_) then t_41_ = t_41_.lsp else end if (nil ~= t_41_) then t_41_ = t_41_.enable else end _42_ = t_41_ end if _42_ then M["set-config"](config.lsp.config) M["enable-config"]() return M["register-keys"](config.lsp) else return nil end end return M