diff --git a/tree/.config/nvim/init.lua b/tree/.config/nvim/init.lua index 3fd20f0..e9cf5d4 100644 --- a/tree/.config/nvim/init.lua +++ b/tree/.config/nvim/init.lua @@ -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', 'lg', pick_rust_target, + { desc = "Pick Target (Rust)", buffer = bufnr }) + vim.keymap.set('n', "a", function() vim.cmd.RustLsp('codeAction') end, + { desc = "Code Action (Rust)", buffer = bufnr }) + vim.keymap.set('n', "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() diff --git a/tree/.config/nvim/lua/fns.lua b/tree/.config/nvim/lua/fns.lua index 60d521b..aa3135d 100644 --- a/tree/.config/nvim/lua/fns.lua +++ b/tree/.config/nvim/lua/fns.lua @@ -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 + + diff --git a/tree/.config/nvim/lua/keys.lua b/tree/.config/nvim/lua/keys.lua index 80f5717..88794c8 100644 --- a/tree/.config/nvim/lua/keys.lua +++ b/tree/.config/nvim/lua/keys.lua @@ -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', 'lg', pick_rust_target, { desc = "Rust target picker", buffer = ev.buf }) vim.keymap.set('n', 'ld', telescope.lsp_definitions, { desc = "Show definitons", buffer = ev.buf }) vim.keymap.set('n', 'lr', telescope.lsp_references, { desc = "Show references", buffer = ev.buf }) vim.keymap.set('n', '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', 'r', vim.lsp.buf.rename, { desc = "Rename symbol", buffer = ev.buf }) - - vim.keymap.set('n', "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' }, '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', "a", vim.lsp.buf.code_action, { desc = "Code Action", buffer = ev.buf }) wk.add({ { "l", desc = "Language server stuff" }, diff --git a/tree/.config/nvim/lua/plugins.lua b/tree/.config/nvim/lua/plugins.lua index 69fcc2d..d9653b3 100644 --- a/tree/.config/nvim/lua/plugins.lua +++ b/tree/.config/nvim/lua/plugins.lua @@ -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' } + 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. diff --git a/tree/.config/nvim/lua/spinners.lua b/tree/.config/nvim/lua/spinners.lua new file mode 100644 index 0000000..e62ff27 --- /dev/null +++ b/tree/.config/nvim/lua/spinners.lua @@ -0,0 +1,139 @@ +return { + braille = { "⣾", "⣽", "⣻", "⢿", "⡿", "⣟", "⣯", "⣷" }, + triangles = { "◢", "◣", "◤", "◥" }, + dwarf_fortress = { + " ██████£££ ", + "☺██████£££ ", + "☺██████£££ ", + "☺▓█████£££ ", + "☺▓█████£££ ", + "☺▒█████£££ ", + "☺▒█████£££ ", + "☺░█████£££ ", + "☺░█████£££ ", + "☺ █████£££ ", + " ☺█████£££ ", + " ☺█████£££ ", + " ☺▓████£££ ", + " ☺▓████£££ ", + " ☺▒████£££ ", + " ☺▒████£££ ", + " ☺░████£££ ", + " ☺░████£££ ", + " ☺ ████£££ ", + " ☺████£££ ", + " ☺████£££ ", + " ☺▓███£££ ", + " ☺▓███£££ ", + " ☺▒███£££ ", + " ☺▒███£££ ", + " ☺░███£££ ", + " ☺░███£££ ", + " ☺ ███£££ ", + " ☺███£££ ", + " ☺███£££ ", + " ☺▓██£££ ", + " ☺▓██£££ ", + " ☺▒██£££ ", + " ☺▒██£££ ", + " ☺░██£££ ", + " ☺░██£££ ", + " ☺ ██£££ ", + " ☺██£££ ", + " ☺██£££ ", + " ☺▓█£££ ", + " ☺▓█£££ ", + " ☺▒█£££ ", + " ☺▒█£££ ", + " ☺░█£££ ", + " ☺░█£££ ", + " ☺ █£££ ", + " ☺█£££ ", + " ☺█£££ ", + " ☺▓£££ ", + " ☺▓£££ ", + " ☺▒£££ ", + " ☺▒£££ ", + " ☺░£££ ", + " ☺░£££ ", + " ☺ £££ ", + " ☺£££ ", + " ☺£££ ", + " ☺▓££ ", + " ☺▓££ ", + " ☺▒££ ", + " ☺▒££ ", + " ☺░££ ", + " ☺░££ ", + " ☺ ££ ", + " ☺££ ", + " ☺££ ", + " ☺▓£ ", + " ☺▓£ ", + " ☺▒£ ", + " ☺▒£ ", + " ☺░£ ", + " ☺░£ ", + " ☺ £ ", + " ☺£ ", + " ☺£ ", + " ☺▓ ", + " ☺▓ ", + " ☺▒ ", + " ☺▒ ", + " ☺░ ", + " ☺░ ", + " ☺ ", + " ☺ &", + " ☺ ☼&", + " ☺ ☼ &", + " ☺☼ &", + " ☺☼ & ", + " ‼ & ", + " ☺ & ", + " ‼ & ", + " ☺ & ", + " ‼ & ", + " ☺ & ", + "‼ & ", + " & ", + " & ", + " & ░ ", + " & ▒ ", + " & ▓ ", + " & £ ", + " & ░£ ", + " & ▒£ ", + " & ▓£ ", + " & ££ ", + " & ░££ ", + " & ▒££ ", + "& ▓££ ", + "& £££ ", + " ░£££ ", + " ▒£££ ", + " ▓£££ ", + " █£££ ", + " ░█£££ ", + " ▒█£££ ", + " ▓█£££ ", + " ██£££ ", + " ░██£££ ", + " ▒██£££ ", + " ▓██£££ ", + " ███£££ ", + " ░███£££ ", + " ▒███£££ ", + " ▓███£££ ", + " ████£££ ", + " ░████£££ ", + " ▒████£££ ", + " ▓████£££ ", + " █████£££ ", + " ░█████£££ ", + " ▒█████£££ ", + " ▓█████£££ ", + " ██████£££ ", + " ██████£££ ", + }, +} diff --git a/tree/.config/nvim/lua/statusline.lua b/tree/.config/nvim/lua/statusline.lua index 0fcd5c3..6e39bee 100644 --- a/tree/.config/nvim/lua/statusline.lua +++ b/tree/.config/nvim/lua/statusline.lua @@ -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'} },