From 7367c425fb7d8980a0c4287dd525762b1f3e0d99 Mon Sep 17 00:00:00 2001 From: Jacob Bohanon Date: Mon, 18 Mar 2024 09:06:14 -0400 Subject: [PATCH] added some LSPs --- init.sh | 1 + nvim/lua/lsp.lua | 92 ++++++++++++++++++++++++++++++++++-------------- 2 files changed, 66 insertions(+), 27 deletions(-) diff --git a/init.sh b/init.sh index df80def..7eb2b76 100755 --- a/init.sh +++ b/init.sh @@ -33,6 +33,7 @@ sh -c 'curl -fLo "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/autoload/plug. # Make directories & symlinks mkdir -p $HOME/.config +cp -r ./ $HOME/.dotfiles ln -s $HOME/.dotfiles/zsh/ $HOME/.config/zsh ln -s $HOME/.dotfiles/nvim/ $HOME/.config/nvim ln -s $HOME/.dotfiles/tmux/ $HOME/.config/tmux diff --git a/nvim/lua/lsp.lua b/nvim/lua/lsp.lua index 1b84329..afd3001 100644 --- a/nvim/lua/lsp.lua +++ b/nvim/lua/lsp.lua @@ -1,8 +1,8 @@ -- Mappings. -- See `:help vim.diagnostic.*` for documentation on any of the below functions -local opts = { noremap=true, silent=true } +local opts = { noremap = true, silent = true } vim.keymap.set('n', 'd', vim.diagnostic.open_float, opts) -vim.keymap.set('n', 'dd', require'telescope.builtin'.diagnostics, opts) +vim.keymap.set('n', 'dd', require 'telescope.builtin'.diagnostics, opts) vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, opts) vim.keymap.set('n', ']d', vim.diagnostic.goto_next, opts) vim.keymap.set('n', 'dl', vim.diagnostic.setloclist, opts) @@ -10,54 +10,92 @@ vim.keymap.set('n', 'dl', vim.diagnostic.setloclist, opts) -- Use an on_attach function to only map the following keys -- after the language server attaches to the current buffer local on_attach = function(client, bufnr) - -- Enable completion triggered by - vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') + -- Enable completion triggered by + vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') - -- Mappings. - -- See `:help vim.lsp.*` for documentation on any of the below functions - local bufopts = { noremap=true, silent=true, buffer=bufnr } - --vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, bufopts) - vim.keymap.set('n', 'gD', require'telescope.builtin'.lsp_type_definitions, bufopts) - --vim.keymap.set('n', 'gd', vim.lsp.buf.definition, bufopts) - vim.keymap.set('n', 'gd', require'telescope.builtin'.lsp_definitions, bufopts) - vim.keymap.set('n', 'K', vim.lsp.buf.hover, bufopts) - vim.keymap.set('n', 'gi', require'telescope.builtin'.lsp_implementations, bufopts) - vim.keymap.set('n', '', vim.lsp.buf.signature_help, bufopts) - vim.keymap.set('n', 'D', vim.lsp.buf.type_definition, bufopts) - vim.keymap.set('n', 'rn', vim.lsp.buf.rename, bufopts) - vim.keymap.set('n', 'ca', vim.lsp.buf.code_action, bufopts) - --vim.keymap.set('n', 'gr', vim.lsp.buf.references, bufopts) - vim.keymap.set('n', 'gr', require'telescope.builtin'.lsp_references, bufopts) - vim.keymap.set('n', 'f', vim.lsp.buf.format, bufopts) + -- Mappings. + -- See `:help vim.lsp.*` for documentation on any of the below functions + local bufopts = { noremap = true, silent = true, buffer = bufnr } + vim.keymap.set('n', 'gD', require 'telescope.builtin'.lsp_type_definitions, bufopts) + vim.keymap.set('n', 'gd', require 'telescope.builtin'.lsp_definitions, bufopts) + vim.keymap.set('n', 'K', vim.lsp.buf.hover, bufopts) + vim.keymap.set('n', 'gi', require 'telescope.builtin'.lsp_implementations, bufopts) + vim.keymap.set('n', '', vim.lsp.buf.signature_help, bufopts) + vim.keymap.set('n', 'D', vim.lsp.buf.type_definition, bufopts) + vim.keymap.set('n', 'rn', vim.lsp.buf.rename, bufopts) + vim.keymap.set('n', 'ca', vim.lsp.buf.code_action, bufopts) + vim.keymap.set('n', 'gr', require 'telescope.builtin'.lsp_references, bufopts) + vim.keymap.set('n', 'f', vim.lsp.buf.format, bufopts) end local capabilities = require('cmp_nvim_lsp').default_capabilities(vim.lsp.protocol.make_client_capabilities()) -require('lspconfig')['gopls'].setup{ +require('lspconfig')['gopls'].setup { settings = { gopls = { - templateExtensions = {'gotmpl', 'gohtml'}, + templateExtensions = { 'gotmpl', 'gohtml' }, } }, filetypes = { "go", "gomod", "gowork", "gotmpl", "gohtml", "gohtmltmpl" }, on_attach = on_attach, capabilities = capabilities, } -require('lspconfig')['pyright'].setup{ +require('lspconfig')['pyright'].setup { on_attach = on_attach, capabilities = capabilities, } -require('lspconfig')['tsserver'].setup{ +require('lspconfig')['tsserver'].setup { on_attach = on_attach, capabilities = capabilities, } -require('lspconfig')['clangd'].setup{ +require('lspconfig')['clangd'].setup { on_attach = on_attach, capabilities = capabilities, } -require('lspconfig')['rust_analyzer'].setup{ +require('lspconfig')['rust_analyzer'].setup { on_attach = on_attach, capabilities = capabilities, } -require('lspconfig')['bashls'].setup{ +require('lspconfig')['bashls'].setup { on_attach = on_attach, capabilities = capabilities, } +require('lspconfig')['bzl'].setup { + on_attach = on_attach, + capabilities = capabilities, +} +require('lspconfig')['cmake'].setup { + on_attach = on_attach, + capabilities = capabilities, +} +require('lspconfig')['lua_ls'].setup { + on_attach = on_attach, + capabilities = capabilities, + on_init = function(client) + local path = client.workspace_folders[1].name + if (vim.uv or vim.loop).fs_stat(path .. '/.luarc.json') or (vim.uv or vim.loop).fs_stat(path .. '/.luarc.jsonc') then + return + end + + client.config.settings.Lua = vim.tbl_deep_extend('force', client.config.settings.Lua, { + runtime = { + -- Tell the language server which version of Lua you're using + -- (most likely LuaJIT in the case of Neovim) + version = 'LuaJIT' + }, + -- Make the server aware of Neovim runtime files + workspace = { + checkThirdParty = false, + library = { + vim.env.VIMRUNTIME + -- Depending on the usage, you might want to add additional paths here. + -- "${3rd}/luv/library" + -- "${3rd}/busted/library", + } + -- or pull in all of 'runtimepath'. NOTE: this is a lot slower + -- library = vim.api.nvim_get_runtime_file("", true) + } + }) + end, + settings = { + Lua = {} + } +}