nvim: Improve LSP stuff

This commit is contained in:
2024-09-13 13:00:39 +02:00
parent 2458565137
commit fd0c14dc0c
6 changed files with 254 additions and 31 deletions

View File

@ -1,6 +1,8 @@
vim.g.mapleader = " "
vim.g.localleader = "\\"
-- Install Lazy
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not (vim.uv or vim.loop).fs_stat(lazypath) then
local lazyrepo = "https://github.com/folke/lazy.nvim.git"
@ -17,6 +19,48 @@ if not (vim.uv or vim.loop).fs_stat(lazypath) then
end
vim.opt.rtp:prepend(lazypath)
-- TODO: get colored renders working
vim.g.rustaceanvim = {
-- Plugin configuration
tools = {},
-- LSP configuration
server = {
on_attach = function(client, bufnr)
vim.keymap.set('n', '<leader>lg', pick_rust_target,
{ desc = "Pick Target (Rust)", buffer = bufnr })
vim.keymap.set('n', "<leader>a", function() vim.cmd.RustLsp('codeAction') end,
{ desc = "Code Action (Rust)", buffer = bufnr })
vim.keymap.set('n', "<leader>e", function() vim.cmd.RustLsp('renderDiagnostic', 'current') end,
{ desc = "Render Diagnostic", buffer = bufnr })
end,
default_settings = {
['rust-analyzer'] = {
checkOnSave = { overrideCommand = "cargo check --message-format=json-diagnostic-rendered-ansi" },
},
},
settings = function(project_root)
local ra = require('rustaceanvim.config.server')
local settings = ra.load_rust_analyzer_settings(project_root, {
settings_file_pattern = 'rust-analyzer.json'
})
-- override default target (if `set_rust_target` has been called)
local rust_target = vim.g["rust-analyzer-target"]
if rust_target then
settings["rust-analyzer"]["cargo"] = { target = rust_target }
end
vim.g["rust-analyzer-target-test"] = settings
return settings
end,
},
-- DAP configuration
dap = {},
}
require('plugins')
require('vars')
@ -27,9 +71,16 @@ require('theme')
require('statusline')
--require('debugger') -- TODO:
local lspconfig = require("lspconfig")
-- Mason Setup
local language_servers = {
"pylsp",
"eslint",
"cssls",
"jsonls",
"ts_ls",
"gopls",
"wgsl_analyzer",
}
require("mason").setup({
ui = {
icons = {
@ -38,17 +89,43 @@ require("mason").setup({
package_uninstalled = "",
},
},
ensure_installed = { "pylsp", "eslint", "gopls", "wgsl_analyzer" },
ensure_installed = language_servers,
})
require("mason-lspconfig").setup_handlers {
-- rust_analyzer is managed by rustaceanvim
['rust_analyzer'] = function() end
}
require("mason-lspconfig").setup()
lspconfig.pylsp.setup {}
lspconfig.eslint.setup {}
lspconfig.gopls.setup {}
lspconfig.wgsl_analyzer.setup {}
local lspconfig = require("lspconfig")
for _,l in pairs(language_servers) do
lspconfig[l].setup {}
end
local compare = require "cmp.config.compare"
require('cmp').setup.filetype({ "rust" }, {
sorting = {
priority_weight = 2,
comparators = {
-- deprioritize `.box`, `.mut`, etc.
require("cmp-rust").deprioritize_postfix,
-- deprioritize `Borrow::borrow` and `BorrowMut::borrow_mut`
require("cmp-rust").deprioritize_borrow,
-- deprioritize `Deref::deref` and `DerefMut::deref_mut`
require("cmp-rust").deprioritize_deref,
-- deprioritize `Into::into`, `Clone::clone`, etc.
require("cmp-rust").deprioritize_common_traits,
compare.offset,
compare.exact,
compare.score,
--compare.recently_used,
compare.locality,
compare.sort_text,
compare.length,
compare.order,
},
},
})
require("todo-comments").setup()

View File

@ -1,12 +1,10 @@
-- change rust-analyzer target
-- change rust-analyzer target and restart
set_rust_target = function(target)
vim.g["rust-analyzer-target"] = target
vim.cmd("RustAnalyzer restart")
print("rust-analyzer.cargo.target = " .. target)
require("rust-tools").setup({
server = { settings = { ["rust-analyzer"] = { cargo = { target = target } } } },
})
end
-- a custom telescope picker for changing rust-analyzer target
pick_rust_target = function(opts)
opts = opts or {}
require("telescope.pickers").new(opts, {
@ -24,3 +22,5 @@ pick_rust_target = function(opts)
end,
}):find()
end

View File

@ -20,7 +20,6 @@ vim.api.nvim_create_autocmd('LspAttach', {
-- Buffer local mappings.
-- See `:help vim.lsp.*` for documentation on any of the below functions
vim.keymap.set('n', '<leader>lg', pick_rust_target, { desc = "Rust target picker", buffer = ev.buf })
vim.keymap.set('n', '<leader>ld', telescope.lsp_definitions, { desc = "Show definitons", buffer = ev.buf })
vim.keymap.set('n', '<leader>lr', telescope.lsp_references, { desc = "Show references", buffer = ev.buf })
vim.keymap.set('n', '<leader>li', telescope.lsp_implementations, { desc = "Show implementations", buffer = ev.buf })
@ -35,13 +34,7 @@ vim.api.nvim_create_autocmd('LspAttach', {
print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
end, { desc = "List workspace folders", buffer = ev.buf })
vim.keymap.set('n', '<leader>r', vim.lsp.buf.rename, { desc = "Rename symbol", buffer = ev.buf })
vim.keymap.set('n', "<leader>a", function()
vim.cmd.RustLsp('codeAction') -- supports rust-analyzer's grouping
-- or vim.lsp.buf.codeAction() if you don't want grouping.
end,
{ silent = true, buffer = ev.buf })
--vim.keymap.set({ 'n', 'v' }, '<leader>la', vim.lsp.buf.code_action, { desc = "Code actions", buffer = ev.buf }) -- TODO: figure out how to fall back to this option lang isnt rust
vim.keymap.set('n', "<leader>a", vim.lsp.buf.code_action, { desc = "Code Action", buffer = ev.buf })
wk.add({
{ "<leader>l", desc = "Language server stuff" },

View File

@ -1,7 +1,7 @@
require("lazy").setup({
spec = {
-- install plugins
{ 'nvim-treesitter/nvim-treesitter', opts = {} },
{ 'nvim-treesitter/nvim-treesitter' },
{ 'ellisonleao/gruvbox.nvim' },
{ 'danilamihailov/beacon.nvim' },
{ 'nvim-lua/plenary.nvim' },
@ -52,16 +52,15 @@ require("lazy").setup({
{ 'hrsh7th/cmp-path' },
{ 'hrsh7th/cmp-buffer' },
{ 'hrsh7th/vim-vsnip' },
{ 'ryo33/nvim-cmp-rust' },
{ 'nvim-telescope/telescope.nvim', branch = '0.1.x',
dependencies = { 'nvim-lua/plenary.nvim' }
},
-- -- status line
{
'nvim-lualine/lualine.nvim',
--requires = { 'nvim-tree/nvim-web-devicons', opt = true }
},
{ 'linrongbin16/lsp-progress.nvim' },
{ 'nvim-lualine/lualine.nvim' },
},
-- Configure any other settings here. See the documentation for more details.
-- colorscheme that will be used when installing plugins.

View File

@ -0,0 +1,139 @@
return {
braille = { "", "", "", "", "", "", "", "" },
triangles = { "", "", "", "" },
dwarf_fortress = {
" ██████£££ ",
"☺██████£££ ",
"☺██████£££ ",
"☺▓█████£££ ",
"☺▓█████£££ ",
"☺▒█████£££ ",
"☺▒█████£££ ",
"☺░█████£££ ",
"☺░█████£££ ",
"☺ █████£££ ",
" ☺█████£££ ",
" ☺█████£££ ",
" ☺▓████£££ ",
" ☺▓████£££ ",
" ☺▒████£££ ",
" ☺▒████£££ ",
" ☺░████£££ ",
" ☺░████£££ ",
" ☺ ████£££ ",
" ☺████£££ ",
" ☺████£££ ",
" ☺▓███£££ ",
" ☺▓███£££ ",
" ☺▒███£££ ",
" ☺▒███£££ ",
" ☺░███£££ ",
" ☺░███£££ ",
" ☺ ███£££ ",
" ☺███£££ ",
" ☺███£££ ",
" ☺▓██£££ ",
" ☺▓██£££ ",
" ☺▒██£££ ",
" ☺▒██£££ ",
" ☺░██£££ ",
" ☺░██£££ ",
" ☺ ██£££ ",
" ☺██£££ ",
" ☺██£££ ",
" ☺▓█£££ ",
" ☺▓█£££ ",
" ☺▒█£££ ",
" ☺▒█£££ ",
" ☺░█£££ ",
" ☺░█£££ ",
" ☺ █£££ ",
" ☺█£££ ",
" ☺█£££ ",
" ☺▓£££ ",
" ☺▓£££ ",
" ☺▒£££ ",
" ☺▒£££ ",
" ☺░£££ ",
" ☺░£££ ",
" ☺ £££ ",
" ☺£££ ",
" ☺£££ ",
" ☺▓££ ",
" ☺▓££ ",
" ☺▒££ ",
" ☺▒££ ",
" ☺░££ ",
" ☺░££ ",
" ☺ ££ ",
" ☺££ ",
" ☺££ ",
" ☺▓£ ",
" ☺▓£ ",
" ☺▒£ ",
" ☺▒£ ",
" ☺░£ ",
" ☺░£ ",
" ☺ £ ",
" ☺£ ",
" ☺£ ",
" ☺▓ ",
" ☺▓ ",
" ☺▒ ",
" ☺▒ ",
" ☺░ ",
" ☺░ ",
"",
" ☺ &",
" ☺ ☼&",
" ☺ ☼ &",
" ☺☼ &",
" ☺☼ & ",
" ‼ & ",
" ☺ & ",
" ‼ & ",
" ☺ & ",
" ‼ & ",
" ☺ & ",
"‼ & ",
" & ",
" & ",
" & ░ ",
" & ▒ ",
" & ▓ ",
" & £ ",
" & ░£ ",
" & ▒£ ",
" & ▓£ ",
" & ££ ",
" & ░££ ",
" & ▒££ ",
"& ▓££ ",
"& £££ ",
" ░£££ ",
" ▒£££ ",
" ▓£££ ",
" █£££ ",
" ░█£££ ",
" ▒█£££ ",
" ▓█£££ ",
" ██£££ ",
" ░██£££ ",
" ▒██£££ ",
" ▓██£££ ",
" ███£££ ",
" ░███£££ ",
" ▒███£££ ",
" ▓███£££ ",
" ████£££ ",
" ░████£££ ",
" ▒████£££ ",
" ▓████£££ ",
" █████£££ ",
" ░█████£££ ",
" ▒█████£££ ",
" ▓█████£££ ",
" ██████£££ ",
" ██████£££ ",
},
}

View File

@ -1,3 +1,17 @@
require('lsp-progress').setup({
spinner = require('spinners').dwarf_fortress,
spin_update_time = 200,
client_format = function(client_name, spinner, series_messages)
return #series_messages > 0
and (
table.concat(series_messages, ", ")
.. " " .. spinner
.. " [" .. client_name .. "]"
)
or nil
end,
})
require('lualine').setup {
options = {
icons_enabled = true,
@ -12,7 +26,7 @@ require('lualine').setup {
always_divide_middle = true,
globalstatus = false,
refresh = {
statusline = 1000,
statusline = 200,
tabline = 1000,
winbar = 1000,
}
@ -21,10 +35,11 @@ require('lualine').setup {
lualine_a = {'mode'},
lualine_b = {'branch', 'diff', 'diagnostics'},
lualine_c = {'filename'},
lualine_x = {{
'lsp_progress',
timer = { progress_enddelay = 20, spinner = 20, lsp_client_name_enddelay = 20 },
}},
lualine_x = {
function()
return require('lsp-progress').progress()
end
},
lualine_y = {'encoding', 'fileformat', 'filetype'},
lualine_z = {'location'}
},