summaryrefslogtreecommitdiff
path: root/dot_config/nvim/lua/plugins/nvim-lspconfig.lua
diff options
context:
space:
mode:
authorChloe Kudryavtsev <code@toast.bunkerlabs.net>2022-11-08 13:06:08 -0500
committerChloe Kudryavtsev <code@toast.bunkerlabs.net>2022-11-08 13:06:08 -0500
commit946b25db1aa005bf072c3c468cb0641cf2fac45d (patch)
tree1afe414f65b2ff978cf3227ee424c21835158672 /dot_config/nvim/lua/plugins/nvim-lspconfig.lua
parentgit: update config (diff)
nvim: init bootstrappable config
Diffstat (limited to '')
-rw-r--r--dot_config/nvim/lua/plugins/nvim-lspconfig.lua71
1 files changed, 71 insertions, 0 deletions
diff --git a/dot_config/nvim/lua/plugins/nvim-lspconfig.lua b/dot_config/nvim/lua/plugins/nvim-lspconfig.lua
new file mode 100644
index 0000000..af45a49
--- /dev/null
+++ b/dot_config/nvim/lua/plugins/nvim-lspconfig.lua
@@ -0,0 +1,71 @@
+---@diagnostic disable: undefined-global
+
+local lspc = require 'lspconfig'
+local lspu = require 'lspconfig.util'
+
+local function plist(...)
+ local p = lspu.root_pattern(...)
+ return function(f) return p(f) end
+end
+
+-- mappings
+local wk = require 'which-key'
+---@diagnostic disable-next-line: unused-local
+local on_attach = function(c, b)
+ local lsp = vim.lsp
+ local lbf = lsp.buf
+ vim.api.nvim_buf_set_option(b, 'omnifunc', 'v:lua.vim.lsp.omnifunc')
+ wk.register({
+ name = '+lsp',
+ D = {lbf.declaration, 'goto declaration'},
+ d = {lbf.definition, 'goto definition'},
+ k = {lbf.hover, 'hover'},
+ K = {lbf.signature_help, 'signature help'},
+ i = {lbf.implementation, 'goto implementation'},
+ t = {lbf.type_definition, 'goto type definition'},
+ r = {lbf.rename, 'rename'},
+ c = {lbf.code_action, 'code action'},
+ R = {lbf.references, 'list references'},
+ w = {
+ name = '+workspace',
+ a = {lbf.add_workspace_folder, 'add folder'},
+ r = {lbf.remove_workspace_folder, 'remove folder'},
+ l = {
+ function() print(vim.inspect(lbf.list_workspace_folders())) end,
+ 'list folders'
+ },
+ },
+ }, {
+ prefix = '<localleader><localleader>',
+ buffer = b,
+ })
+ wk.register({
+ ['<leader>F'] = {
+ function() vim.lsp.buf.format {async = true} end,
+ 'run format',
+ },
+ }, { buffer = b })
+end
+
+-- configs
+local common = { on_attach = on_attach }
+local deno = vim.deepcopy(common)
+local tss = vim.deepcopy(common)
+deno.root_dir = plist('deno.json', 'deno.jsonc')
+tss.root_dir = plist('tsconfig.json', 'package.json')
+
+-- servers
+local function enable(name, opts)
+ opts = opts or common
+ local s = lspc[name]
+ local c = opts.cmd or s.document_config.default_config.cmd
+ if vim.fn.executable(c[1]) ~= 0 then
+ s.setup(opts)
+ end
+end
+
+enable('denols', deno)
+enable 'gopls'
+enable 'ltex'
+enable 'sumneko_lua'
+enable('tsserver', tss)