11local function root_dir (patterns )
2- patterns = patterns or {}
2+ patterns = patterns or { " .git/ " , " README.md " , " flake.nix " }
33 local matches = vim .fs .find (patterns , {
44 upward = true ,
55 })
66 if matches then
77 return vim .fs .dirname (matches [1 ])
88 end
9-
10- local default_patterns = { " .git/" , " README.md" , " flake.nix" }
11- return vim .fs .dirname (vim .fs .find (default_patterns , {
12- upward = true ,
13- })[1 ])
9+ return " ~"
1410end
1511
1612-- remove defaults
@@ -22,8 +18,17 @@ vim.keymap.del("n", "grr")
2218
2319-- add my own
2420vim .keymap .set (" n" , " <leader>r" , vim .lsp .buf .rename , { desc = " lsp: rename symbol" })
25- vim .keymap .set (" n" , " <leader>?" , vim .lsp .buf .code_action , { desc = " lsp: run code action" })
26- vim .keymap .set (" n" , " go" , vim .lsp .buf .document_symbol , { desc = " lsp: show symbols" })
21+ vim .keymap .set ({ " n" , " x" }, " <leader>?" , function ()
22+ local line = vim .api .nvim_win_get_cursor (0 )[1 ]
23+ for _ , lens in pairs (vim .lsp .codelens .get (0 )) do
24+ if lens .range .start .line == (line - 1 ) and lens .command and lens .command .command ~= " " then
25+ vim .lsp .codelens .run ()
26+ return
27+ end
28+ end
29+ vim .lsp .buf .code_action ()
30+ end , { desc = " lsp: run codelens or code action" })
31+ vim .keymap .set ({ " n" , " x" }, " go" , vim .lsp .buf .document_symbol , { desc = " lsp: show symbols" })
2732vim .keymap .set (" n" , " gO" , vim .lsp .buf .workspace_symbol , { desc = " lsp: show workspacesymbols" })
2833vim .keymap .set (" n" , " gd" , vim .lsp .buf .definition , { desc = " lsp: show definition" })
2934vim .keymap .set (" n" , " gD" , vim .lsp .buf .type_definition , { desc = " lsp: show type definition" })
@@ -39,6 +44,14 @@ vim.lsp.config("gopls", {
3944 cmd = { " gopls" },
4045 filetypes = { " go" , " gomod" , " gowork" , " gotmpl" },
4146 on_attach = function (_ , _ )
47+ vim .o .foldexpr = " v:lua.vim.lsp.foldexpr()"
48+
49+ -- display code lenses
50+ vim .api .nvim_create_autocmd ({ " BufEnter" , " CursorHold" , " InsertLeave" }, {
51+ callback = function (args )
52+ vim .lsp .codelens .refresh ({ bufnr = args .buf })
53+ end ,
54+ })
4255 -- modify some semantic tokens
4356 vim .api .nvim_create_autocmd (" LspTokenUpdate" , {
4457 callback = function (args )
@@ -66,6 +79,9 @@ vim.lsp.config("gopls", {
6679 },
6780 semanticTokens = true ,
6881 staticcheck = true ,
82+ analyses = {
83+ ST1000 = false ,
84+ },
6985 vulncheck = " Imports" ,
7086 hints = {
7187 assignVariableTypes = true ,
@@ -76,8 +92,6 @@ vim.lsp.config("gopls", {
7692 parameterNames = true ,
7793 rangeVariableTypes = true ,
7894 },
79- completeUnimported = true ,
80- deepCompletion = true ,
8195 },
8296 },
8397})
@@ -137,4 +151,24 @@ vim.lsp.config("typos-lsp", {
137151 },
138152})
139153
140- vim .lsp .enable ({ " gopls" , " typos-lsp" , " nixd" , " templ" , " javascript" , " lua_ls" })
154+ vim .lsp .config (" harper" , {
155+ cmd = { " harper-ls" , " --stdio" },
156+ filetypes = { " markdown" },
157+ root_dir = root_dir (),
158+ settings = {
159+ [" harper-ls" ] = {
160+ linters = {
161+ SpellCheck = false ,
162+ ToDoHyphen = false ,
163+ },
164+ },
165+ },
166+ })
167+
168+ vim .lsp .config (" fish" , {
169+ cmd = { " fish-lsp" , " start" },
170+ filetypes = { " fish" },
171+ root_dir = root_dir (),
172+ })
173+
174+ vim .lsp .enable ({ " gopls" , " typos-lsp" , " nixd" , " templ" , " javascript" , " lua_ls" , " harper" , " fish" })
0 commit comments