Rely on builtin lsp and completions
And get rid of unused stuff
- Id
- 246ddb050c1397f27eae4b95e9bf9d92a6eb5951
- Author
- Caio
- Commit time
- 2025-04-08T14:16:29+01:00
Modified config/nvim/init.lua
opt.backspace = "indent,eol,start"
opt.errorbells = false
opt.visualbell = false
-opt.completeopt = "menu,menuone,noinsert,noselect,preview"
+opt.completeopt = "menuone,noselect,preview"
opt.showbreak = "↪"
opt.virtualedit = "block"
opt.foldlevelstart = 0
-- Configure general-purpose mappings
-- Plugin-related ones are managed along with the plugins
require('mappings')
+require("config.lsp")
-- Load plugins via `packer`
-- If the packer installation is not found, no plugins
Modified config/nvim/lua/plugins.lua
}
use {
- 'fatih/vim-go',
- -- ensure maximum regret when I open go files
- run = ':GoInstallBinaries',
- ft = {'go'},
- config = function()
- vim.g.go_gopls_enabled = 0
- end
- }
-
- use {
'windwp/nvim-autopairs',
event = 'InsertEnter',
- requires = { 'hrsh7th/nvim-cmp' },
config = function()
require('nvim-autopairs').setup({})
-
- local cmp_autopairs = require('nvim-autopairs.completion.cmp')
- local cmp = require('cmp')
- cmp.event:on('confirm_done', cmp_autopairs.on_confirm_done())
end
- }
-
- -- Front-end stuff
- use {
- 'yuezk/vim-js',
- 'HerringtonDarkholme/yats.vim',
- 'maxmellon/vim-jsx-pretty',
}
use { 'qpkorr/vim-renamer', cmd = 'Renamer' }
use {
'mcchrish/zenbones.nvim',
- requires = { 'rktjmp/lush.nvim' },
config = function()
+ vim.g.zenbones_compat = 1
vim.g.zenbones_darkness = "stark" -- warm/undef
vim.g.zenbones_lightness = "bright" -- dim/undef
vim.opt.termguicolors = true
- vim.opt.background = "dark"
+ vim.opt.background = "light"
vim.cmd("colorscheme zenbones")
- end
- }
-
- -- autocomplete
- use {
- 'hrsh7th/nvim-cmp',
- requires = {
- {'hrsh7th/cmp-nvim-lsp'},
- {'hrsh7th/cmp-buffer'},
- },
- config = function()
- require('config.completions')
end
}
requires = {{'nvim-lua/plenary.nvim'}},
config = function()
require('config.telescope')
- end
- }
-
- -- Only gets loaded when `:LspStart` is called manually
- use {
- 'neovim/nvim-lspconfig',
- cmd = 'LspStart',
- config = function()
- require('config.lsp')
- end
- }
-
- use {
- 'nvim-treesitter/nvim-treesitter',
- run = ':TSUpdate',
- config = function()
- require('config.treesitter')
end
}
end)
Modified config/nvim/lua/config/lsp.lua
-local on_attach = function(client, bufnr)
- vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc')
+vim.api.nvim_create_autocmd('LspAttach', {
+ group = vim.api.nvim_create_augroup('my.lsp', {}),
+ callback = function(args)
+ -- Run cursor+timer triggers faster
+ vim.o.updatetime = 300
+ -- So that the window doesn't shift around in the presence of diagnostics
+ vim.wo.signcolumn = "yes"
- vim.o.foldmethod = "expr"
- vim.o.foldexpr = "v:lua.vim.lsp.foldexpr()"
+ -- ^]: definition (^T: jump back)
+ -- gri: implementation
+ -- grr: references
+ -- grn: rename
+ -- gra: code_action
+ local function nmap(seq, action)
+ local opts = { silent = true, noremap = true}
+ vim.api.nvim_buf_set_keymap(args.buf, 'n', seq, string.format("<cmd>%s<CR>", action), opts)
+ end
+ nmap('gy', 'lua vim.lsp.buf.type_definition()')
+ nmap('<leader>s', 'Telescope lsp_document_symbols')
+ nmap('<leader>S', 'Telescope lsp_dynamic_workspace_symbols')
- -- Run cursor+timer triggers faster
- vim.o.updatetime = 300
- -- So that the window doesn't shift around in the presence of
- -- diagnostics
- vim.wo.signcolumn = "yes"
+ local client = assert(vim.lsp.get_client_by_id(args.data.client_id))
- local function map(...) vim.api.nvim_buf_set_keymap(bufnr, ...) end
- local opts = { silent = true, noremap = true }
+ if client:supports_method('textDocument/completion') then
+ vim.lsp.completion.enable(true, client.id, args.buf, {
+ autotrigger = true
+ })
+ end
- map('n', 'gd', '<cmd>lua vim.lsp.buf.definition()<CR>', opts)
- map('n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<CR>', opts)
- map('n', 'gr', '<cmd>lua vim.lsp.buf.references()<CR>', opts)
- map('n', 'gy', '<cmd>lua vim.lsp.buf.type_definition()<CR>', opts)
+ if client:supports_method('textDocument/foldingRange') then
+ vim.o.foldmethod = "expr"
+ vim.o.foldexpr = "v:lua.vim.lsp.foldexpr()"
+ end
- map('n', 'K', '<cmd>lua vim.lsp.buf.hover()<CR>', opts)
+ local group = vim.api.nvim_create_augroup('my.lsp', {clear=false})
- map('n', '<leader>r', '<cmd>lua vim.lsp.buf.rename()<CR>', opts)
- map('n', '<leader>a', '<cmd>lua vim.lsp.buf.code_action()<CR>', opts)
+ if not client:supports_method('textDocument/willSaveWaitUntil')
+ and client:supports_method('textDocument/formatting') then
+ vim.api.nvim_create_autocmd('BufWritePre', {
+ group = group,
+ buffer = args.buf,
+ callback = function()
+ vim.lsp.buf.format({ bufnr = args.buf, id = client.id, timeout_ms = 1000 })
+ end,
+ })
+ end
- map('n', '<leader>s', '<cmd>Telescope lsp_document_symbols<CR>', opts)
- map('n', '<leader>S', '<cmd>Telescope lsp_dynamic_workspace_symbols<CR>', opts)
+ if client:supports_method('textDocument/documentHighlight') then
+ vim.api.nvim_create_autocmd('CursorHold', {
+ group = group,
+ buffer = args.buf,
+ callback = function()
+ vim.lsp.buf.document_highlight()
+ end,
+ })
+ vim.api.nvim_create_autocmd('CursorMoved', {
+ group = group,
+ buffer = args.buf,
+ callback = function()
+ vim.lsp.buf.clear_references()
+ end,
+ })
+ end
- local cmd = vim.api.nvim_command
- -- Format right before saving
- cmd([[autocmd BufWritePre <buffer> lua vim.lsp.buf.format()]])
-
- -- Highlight current "word" under cursor
- cmd([[autocmd CursorHold <buffer> lua vim.lsp.buf.document_highlight()]])
- -- And clear the highlight after move
- cmd([[autocmd CursorMoved <buffer> lua vim.lsp.buf.clear_references()]])
-end
-
-local config = require('lspconfig')
-
-local ok, _ = pcall(require, 'cmp_nvim_lsp')
-if ok then
- local caps = require('cmp_nvim_lsp').default_capabilities()
- caps["textDocument"]["completion"]["completionItem"]["snippetSupport"] = false
-
- config.util.default_config = vim.tbl_deep_extend('force', config.util.default_config, {
- capabilities = caps
- })
-end
-
-config.util.default_config = vim.tbl_deep_extend('force', config.util.default_config, {
- on_attach = on_attach,
- flags = {
- debounce_text_changes = 150,
- }
+ end,
})
-config.rust_analyzer.setup({
+vim.lsp.config('*', {
+ root_markers = { ".git" },
+ capabilities = {
+ textDocument = {
+ completion = {
+ completionItem = {
+ snippetSupport = false
+ }
+ }
+ }
+ }
+})
+
+vim.lsp.config("rust_analyzer", {
cmd = {"rustup", "run", "stable", "rust-analyzer"},
+ filetypes = { "rust" },
settings = {
["rust-analyzer"] = {
checkOnSave = {
}
})
-config.gopls.setup({
+vim.lsp.config("gopls", {
cmd = {
- 'gopls',
- '-remote=auto',
+ "gopls",
+ "-remote=auto",
},
+ root_markers = { "go.mod" },
+ filetypes = { "go" },
settings = {
- gopls = {
- analyses = {
- unusedparams = true,
- nilness = true,
- shadow = true,
- unusedwrite = true,
+ gopls = {
+ analyses = {
+ unusedparams = true,
+ nilness = true,
+ shadow = true,
+ unusedwrite = true,
+ },
+ staticcheck = true,
},
- staticcheck = true,
- },
- },
+ }
})
local function home_cache_dir(tail)
return base .. '/' .. tail
end
-config.ccls.setup({
- init_options = {
- cache = {
- directory = home_cache_dir('ccls'),
+vim.lsp.config("ccls", {
+ cmd = { "ccls" },
+ filetypes = { "c", "cpp", "objc", "objcpp", "cuda" },
+ root_markers = { "compile_commands.json" },
+ init_options = {
+ cache = {
+ directory = home_cache_dir('ccls'),
+ },
},
- },
})
+
+vim.api.nvim_create_user_command("LspStart", function()
+ vim.lsp.enable({"rust_analyzer", "gopls", "ccls"})
+ vim.cmd("edit") -- reload buffer
+end, {})
Deleted config/nvim/lua/config/completions.lua
-local cmp = require('cmp')
-
-cmp.setup({
- mapping = cmp.mapping.preset.insert({
- ['<C-p>'] = cmp.mapping.select_prev_item(),
- ['<C-n>'] = cmp.mapping.select_next_item(),
- ['<S-Tab>'] = cmp.mapping.select_prev_item(),
- ['<Tab>'] = cmp.mapping.select_next_item(),
- ['<C-d>'] = cmp.mapping.scroll_docs(-4),
- ['<C-f>'] = cmp.mapping.scroll_docs(4),
- ['<C-Space>'] = cmp.mapping.complete(),
- ['<C-e>'] = cmp.mapping.close(),
- ['<CR>'] = cmp.mapping.confirm({
- behavior = cmp.ConfirmBehavior.Insert,
- select = true,
- })
- }),
-
- sources = cmp.config.sources({
- { name = 'nvim_lsp' },
- { name = 'buffer' },
- }),
-})
Deleted config/nvim/lua/config/treesitter.lua
-require('nvim-treesitter.configs').setup {
- ensure_installed = {
- 'bash', 'comment', 'css', 'go', 'html', 'javascript', 'json', 'lua',
- 'python', 'regex', 'rust', 'toml', 'typescript', 'yaml', 'fish'
- },
- highlight = {enable = true, use_languagetree = true},
-}