From 345b80d5a07b2fc4f6aacc706c8ebd3e42601274 Mon Sep 17 00:00:00 2001 From: cscherr Date: Mon, 14 Jul 2025 17:41:06 +0200 Subject: [PATCH] try stuff --- lua/custom/plugins/configs/lsp.lua | 2 + lua/custom/plugins/lsp.lua | 726 +++++++++++++++-------------- 2 files changed, 390 insertions(+), 338 deletions(-) diff --git a/lua/custom/plugins/configs/lsp.lua b/lua/custom/plugins/configs/lsp.lua index 9c7334c..1c482ff 100644 --- a/lua/custom/plugins/configs/lsp.lua +++ b/lua/custom/plugins/configs/lsp.lua @@ -231,3 +231,5 @@ for server_name, server in pairs(servers) do end lspconfig.gdscript.setup {} + +return servers diff --git a/lua/custom/plugins/lsp.lua b/lua/custom/plugins/lsp.lua index ffe177c..6208c94 100644 --- a/lua/custom/plugins/lsp.lua +++ b/lua/custom/plugins/lsp.lua @@ -1,359 +1,409 @@ return { - { - 'neovim/nvim-lspconfig', - dependencies = { - -- Automatically install LSPs and related tools to stdpath for Neovim - { 'williamboman/mason.nvim', config = true }, -- NOTE: Must be loaded before dependants - 'williamboman/mason-lspconfig.nvim', - 'WhoIsSethDaniel/mason-tool-installer.nvim', + { + 'neovim/nvim-lspconfig', + dependencies = { + -- Automatically install LSPs and related tools to stdpath for Neovim + { 'williamboman/mason.nvim', config = true }, -- NOTE: Must be loaded before dependants + 'williamboman/mason-lspconfig.nvim', + 'WhoIsSethDaniel/mason-tool-installer.nvim', - -- Useful status updates for LSP. - -- NOTE: `opts = {}` is the same as calling `require('fidget').setup({})` - { 'j-hui/fidget.nvim', opts = {} }, + -- Useful status updates for LSP. + -- NOTE: `opts = {}` is the same as calling `require('fidget').setup({})` + { 'j-hui/fidget.nvim', opts = {} }, - -- `lazydev` configures Lua LSP for your Neovim config, runtime and plugins - -- used for completion, annotations and signatures of Neovim apis - { 'folke/lazydev.nvim' }, - }, - config = function() - require 'custom.plugins.configs.lsp' - end, - }, - -- See `:help gitsigns` to understand what the configuration keys do - { -- Adds git related signs to the gutter, as well as utilities for managing changes - 'lewis6991/gitsigns.nvim', - opts = { - signs = { - add = { text = '+' }, - change = { text = '~' }, - delete = { text = '_' }, - topdelete = { text = '‾' }, - changedelete = { text = '~' }, - }, - }, - }, - { - 'folke/trouble.nvim', - cmd = 'Trouble', - opts = { use_diagnostic_signs = true }, - keys = { - { 'ctb', 'Trouble diagnostics toggle filter.buf=0', desc = 'Document Diagnostics (Trouble)' }, - { 'ctr', 'Trouble diagnostics toggle', desc = 'Workspace Diagnostics (Trouble)' }, - { 'ctq', 'Trouble qflist toggle', desc = 'Quickfix List (Trouble)' }, - { 'ctl', 'Trouble loclist toggle', desc = 'Location List (Trouble)' }, - { 'ctd', 'Trouble symbols', desc = 'LSP symbols (Trouble)' }, - { 'ctt', 'Trouble todo', desc = 'Todos (Trouble)' }, - { 'cts', 'Trouble lsp_document_symbols toggle win.position=right', desc = 'Document [S]ymbols side (Trouble)' }, - { - '[q', - function() - if require('trouble').is_open() then - require('trouble').previous { skip_groups = true, jump = true } - else - vim.cmd.cprev() - end - end, - desc = 'Previous trouble/quickfix item', - }, - { - ']q', - function() - if require('trouble').is_open() then - require('trouble').next { skip_groups = true, jump = true } - else - vim.cmd.cnext() - end - end, - desc = 'Next trouble/quickfix item', - }, - }, - }, - { -- Autocompletion - 'hrsh7th/nvim-cmp', - enabled = not vim.g.started_by_firenvim, - event = 'InsertEnter', - dependencies = { - -- Snippet Engine & its associated nvim-cmp source - { - 'L3MON4D3/LuaSnip', - build = (function() - -- Build Step is needed for regex support in snippets. - -- This step is not supported in many windows environments. - -- Remove the below condition to re-enable on windows. - if vim.fn.has 'win32' == 1 or vim.fn.executable 'make' == 0 then - return - end - return 'make install_jsregexp' - end)(), - dependencies = { - -- `friendly-snippets` contains a variety of premade snippets. - -- See the README about individual language/framework/plugin snippets: - -- https://github.com/rafamadriz/friendly-snippets - { - 'rafamadriz/friendly-snippets', - config = function() - require('luasnip.loaders.from_vscode').lazy_load() - end, - }, - }, - }, - 'saadparwaiz1/cmp_luasnip', + -- `lazydev` configures Lua LSP for your Neovim config, runtime and plugins + -- used for completion, annotations and signatures of Neovim apis + { 'folke/lazydev.nvim' }, + }, + config = function() + require 'custom.plugins.configs.lsp' - -- Adds other completion capabilities. - -- nvim-cmp does not ship with all sources by default. They are split - -- into multiple repos for maintenance purposes. - 'hrsh7th/cmp-nvim-lsp', - 'hrsh7th/cmp-path', - }, - config = function() - -- See `:help cmp` - local cmp = require 'cmp' - local luasnip = require 'luasnip' - luasnip.config.setup {} + -- so much effort yet it does nothing + vim.api.nvim_create_user_command("RustSetTarget", function(cmdargs) + print("WARN: this apperently does nothing") + vim.cmd [[ + function! Rust_complete_targets(...) + return ["x86_64-unknown-linux-gnu", "thumbv6m-none-eabi"] + endfunction + ]] + local target = vim.fn.input({ + default = "x86_64-unknown-linux-gnu", + completion = "customlist,Rust_complete_targets" + }) + print("setting target to", target) + for _, client in ipairs(vim.lsp.get_clients({ name = "rust_analyzer" })) do + print("notify rust_analyzer") + local status = client.notify("workspace/didChangeConfiguration", + { + settings = { + cargo = { + target = target + } + } + } + ) + print("status: ", status) + end + end, { + nargs = 0, + desc = "Set target for rust analyzer lsp" + }) + end, + }, + -- See `:help gitsigns` to understand what the configuration keys do + { -- Adds git related signs to the gutter, as well as utilities for managing changes + 'lewis6991/gitsigns.nvim', + opts = { + signs = { + add = { text = '+' }, + change = { text = '~' }, + delete = { text = '_' }, + topdelete = { text = '‾' }, + changedelete = { text = '~' }, + }, + }, + }, + { + 'folke/trouble.nvim', + cmd = 'Trouble', + opts = { use_diagnostic_signs = true }, + keys = { + { 'ctb', 'Trouble diagnostics toggle filter.buf=0', desc = 'Document Diagnostics (Trouble)' }, + { 'ctr', 'Trouble diagnostics toggle', desc = 'Workspace Diagnostics (Trouble)' }, + { 'ctq', 'Trouble qflist toggle', desc = 'Quickfix List (Trouble)' }, + { 'ctl', 'Trouble loclist toggle', desc = 'Location List (Trouble)' }, + { 'ctd', 'Trouble symbols', desc = 'LSP symbols (Trouble)' }, + { 'ctt', 'Trouble todo', desc = 'Todos (Trouble)' }, + { 'cts', 'Trouble lsp_document_symbols toggle win.position=right', desc = 'Document [S]ymbols side (Trouble)' }, + { + '[q', + function() + if require('trouble').is_open() then + require('trouble').previous { skip_groups = true, jump = true } + else + vim.cmd.cprev() + end + end, + desc = 'Previous trouble/quickfix item', + }, + { + ']q', + function() + if require('trouble').is_open() then + require('trouble').next { skip_groups = true, jump = true } + else + vim.cmd.cnext() + end + end, + desc = 'Next trouble/quickfix item', + }, + }, + }, + { -- Autocompletion + 'hrsh7th/nvim-cmp', + enabled = not vim.g.started_by_firenvim, + event = 'InsertEnter', + dependencies = { + -- Snippet Engine & its associated nvim-cmp source + { + 'L3MON4D3/LuaSnip', + build = (function() + -- Build Step is needed for regex support in snippets. + -- This step is not supported in many windows environments. + -- Remove the below condition to re-enable on windows. + if vim.fn.has 'win32' == 1 or vim.fn.executable 'make' == 0 then + return + end + return 'make install_jsregexp' + end)(), + dependencies = { + -- `friendly-snippets` contains a variety of premade snippets. + -- See the README about individual language/framework/plugin snippets: + -- https://github.com/rafamadriz/friendly-snippets + { + 'rafamadriz/friendly-snippets', + config = function() + require('luasnip.loaders.from_vscode').lazy_load() + end, + }, + }, + }, + 'saadparwaiz1/cmp_luasnip', - cmp.setup { - snippet = { - expand = function(args) - luasnip.lsp_expand(args.body) - end, - }, - completion = { completeopt = 'menu,menuone,noinsert' }, + -- Adds other completion capabilities. + -- nvim-cmp does not ship with all sources by default. They are split + -- into multiple repos for maintenance purposes. + 'hrsh7th/cmp-nvim-lsp', + 'hrsh7th/cmp-path', + }, + config = function() + -- See `:help cmp` + local cmp = require 'cmp' + local luasnip = require 'luasnip' + luasnip.config.setup {} - -- For an understanding of why these mappings were - -- chosen, you will need to read `:help ins-completion` - -- - -- No, but seriously. Please read `:help ins-completion`, it is really good! - mapping = cmp.mapping.preset.insert { - -- Select the [n]ext item - [''] = cmp.mapping.select_next_item(), - -- Select the [p]revious item - [''] = cmp.mapping.select_prev_item(), + cmp.setup { + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) + end, + }, + completion = { completeopt = 'menu,menuone,noinsert' }, - -- Scroll the documentation window [b]ack / [f]orward - [''] = cmp.mapping.scroll_docs(-4), - [''] = cmp.mapping.scroll_docs(4), + -- For an understanding of why these mappings were + -- chosen, you will need to read `:help ins-completion` + -- + -- No, but seriously. Please read `:help ins-completion`, it is really good! + mapping = cmp.mapping.preset.insert { + -- Select the [n]ext item + [''] = cmp.mapping.select_next_item(), + -- Select the [p]revious item + [''] = cmp.mapping.select_prev_item(), - -- Accept ([y]es) the completion. - -- This will auto-import if your LSP supports it. - -- This will expand snippets if the LSP sent a snippet. - -- [''] = cmp.mapping.confirm { select = true }, + -- Scroll the documentation window [b]ack / [f]orward + [''] = cmp.mapping.scroll_docs(-4), + [''] = cmp.mapping.scroll_docs(4), - -- If you prefer more traditional completion keymaps, - -- you can uncomment the following lines - [''] = cmp.mapping.confirm { select = true }, - [''] = cmp.mapping.select_next_item(), - [''] = cmp.mapping.select_prev_item(), + -- Accept ([y]es) the completion. + -- This will auto-import if your LSP supports it. + -- This will expand snippets if the LSP sent a snippet. + -- [''] = cmp.mapping.confirm { select = true }, - -- Manually trigger a completion from nvim-cmp. - -- Generally you don't need this, because nvim-cmp will display - -- completions whenever it has completion options available. - [''] = cmp.mapping.complete {}, + -- If you prefer more traditional completion keymaps, + -- you can uncomment the following lines + [''] = cmp.mapping.confirm { select = true }, + [''] = cmp.mapping.select_next_item(), + [''] = cmp.mapping.select_prev_item(), - -- Think of as moving to the right of your snippet expansion. - -- So if you have a snippet that's like: - -- function $name($args) - -- $body - -- end - -- - -- will move you to the right of each of the expansion locations. - -- is similar, except moving you backwards. - --[''] = cmp.mapping(function() - -- if luasnip.expand_or_locally_jumpable() then - -- luasnip.expand_or_jump() - -- end - --end, { 'i', 's' }), - --[''] = cmp.mapping(function() - -- if luasnip.locally_jumpable(-1) then - -- luasnip.jump(-1) - -- end - --end, { 'i', 's' }), + -- Manually trigger a completion from nvim-cmp. + -- Generally you don't need this, because nvim-cmp will display + -- completions whenever it has completion options available. + [''] = cmp.mapping.complete {}, - -- For more advanced Luasnip keymaps (e.g. selecting choice nodes, expansion) see: - -- https://github.com/L3MON4D3/LuaSnip?tab=readme-ov-file#keymaps - }, - sources = { - { name = 'nvim_lsp' }, - { name = 'luasnip' }, - { name = 'path' }, - }, - } - end, - }, - { -- Highlight, edit, and navigate code - 'nvim-treesitter/nvim-treesitter', - build = ':TSUpdate', - opts = { - ensure_installed = { 'bash', 'c', 'diff', 'html', 'lua', 'luadoc', 'markdown', 'vim', 'vimdoc' }, - -- Autoinstall languages that are not installed - auto_install = true, - highlight = { - enable = true, - -- Some languages depend on vim's regex highlighting system (such as Ruby) for indent rules. - -- If you are experiencing weird indenting issues, add the language to - -- the list of additional_vim_regex_highlighting and disabled languages for indent. - additional_vim_regex_highlighting = { 'ruby' }, - }, - indent = { enable = true, disable = { 'ruby' } }, - }, - config = function(_, opts) - -- [[ Configure Treesitter ]] See `:help nvim-treesitter` + -- Think of as moving to the right of your snippet expansion. + -- So if you have a snippet that's like: + -- function $name($args) + -- $body + -- end + -- + -- will move you to the right of each of the expansion locations. + -- is similar, except moving you backwards. + --[''] = cmp.mapping(function() + -- if luasnip.expand_or_locally_jumpable() then + -- luasnip.expand_or_jump() + -- end + --end, { 'i', 's' }), + --[''] = cmp.mapping(function() + -- if luasnip.locally_jumpable(-1) then + -- luasnip.jump(-1) + -- end + --end, { 'i', 's' }), - -- Prefer git instead of curl in order to improve connectivity in some environments - require('nvim-treesitter.install').prefer_git = true - ---@diagnostic disable-next-line: missing-fields - require('nvim-treesitter.configs').setup(opts) + -- For more advanced Luasnip keymaps (e.g. selecting choice nodes, expansion) see: + -- https://github.com/L3MON4D3/LuaSnip?tab=readme-ov-file#keymaps + }, + sources = { + { name = 'nvim_lsp' }, + { name = 'luasnip' }, + { name = 'path' }, + }, + } + end, + }, + { -- Highlight, edit, and navigate code + 'nvim-treesitter/nvim-treesitter', + build = ':TSUpdate', + opts = { + ensure_installed = { 'bash', 'c', 'diff', 'html', 'lua', 'luadoc', 'markdown', 'vim', 'vimdoc' }, + -- Autoinstall languages that are not installed + auto_install = true, + highlight = { + enable = true, + -- Some languages depend on vim's regex highlighting system (such as Ruby) for indent rules. + -- If you are experiencing weird indenting issues, add the language to + -- the list of additional_vim_regex_highlighting and disabled languages for indent. + additional_vim_regex_highlighting = { 'ruby' }, + }, + indent = { enable = true, disable = { 'ruby' } }, + }, + config = function(_, opts) + -- [[ Configure Treesitter ]] See `:help nvim-treesitter` - -- There are additional nvim-treesitter modules that you can use to interact - -- with nvim-treesitter. You should go explore a few and see what interests you: - -- - -- - Incremental selection: Included, see `:help nvim-treesitter-incremental-selection-mod` - -- - Show your current context: https://github.com/nvim-treesitter/nvim-treesitter-context - -- - Treesitter + textobjects: https://github.com/nvim-treesitter/nvim-treesitter-textobjects - end, - }, - { - 'kevinhwang91/nvim-bqf', - ft = 'qf', - cmd = 'BqfAutoToggle', - event = 'QuickFixCmdPost', - opts = { - auto_resize_height = false, - func_map = { - tab = 'st', - split = 'sv', - vsplit = 'sg', + -- Prefer git instead of curl in order to improve connectivity in some environments + require('nvim-treesitter.install').prefer_git = true + ---@diagnostic disable-next-line: missing-fields + require('nvim-treesitter.configs').setup(opts) - stoggleup = 'K', - stoggledown = 'J', - stogglevm = '', + -- There are additional nvim-treesitter modules that you can use to interact + -- with nvim-treesitter. You should go explore a few and see what interests you: + -- + -- - Incremental selection: Included, see `:help nvim-treesitter-incremental-selection-mod` + -- - Show your current context: https://github.com/nvim-treesitter/nvim-treesitter-context + -- - Treesitter + textobjects: https://github.com/nvim-treesitter/nvim-treesitter-textobjects + end, + }, + { + 'kevinhwang91/nvim-bqf', + ft = 'qf', + cmd = 'BqfAutoToggle', + event = 'QuickFixCmdPost', + opts = { + auto_resize_height = false, + func_map = { + tab = 'st', + split = 'sv', + vsplit = 'sg', - ptoggleitem = 'p', - ptoggleauto = 'P', - ptogglemode = 'zp', + stoggleup = 'K', + stoggledown = 'J', + stogglevm = '', - pscrollup = '', - pscrolldown = '', + ptoggleitem = 'p', + ptoggleauto = 'P', + ptogglemode = 'zp', - prevfile = 'gk', - nextfile = 'gj', + pscrollup = '', + pscrolldown = '', - prevhist = '', - nexthist = '', - }, - preview = { - auto_preview = true, - should_preview_cb = function(bufnr) - -- file size greater than 100kb can't be previewed automatically - local filename = vim.api.nvim_buf_get_name(bufnr) - local fsize = vim.fn.getfsize(filename) - if fsize > 100 * 1024 then - return false - end - return true - end, - }, - }, - }, - { - 'rmagatti/goto-preview', - event = 'FileType', - keys = { - { - 'gpd', - function() - require('goto-preview').goto_preview_definition() - end, - desc = 'Go to definition preview', - }, - { - 'gpD', - function() - require('goto-preview').goto_preview_declaration() - end, - desc = 'Go to declaration preview', - }, - { - 'gpi', - function() - require('goto-preview').goto_preview_implementation() - end, - desc = 'Go to implementaion preview', - }, - { - 'gpt', - function() - require('goto-preview').goto_preview_type_definition() - end, - desc = 'Go to type preview', - }, - { - 'gpt', - function() - require('goto-preview').goto_preview_type_references() - end, - desc = 'Preview references', - }, - { - 'gpc', - function() - require('goto-preview').close_all_win() - end, - desc = 'Close all preview windows', - }, - }, - config = function() - require('goto-preview').setup {} - end, - dependencies = 'nvim-telescope/telescope.nvim', - opts = { - width = 78, - height = 15, - default_mappings = false, - opacity = 10, - }, - }, - { 'kosayoda/nvim-lightbulb', event = { 'BufReadPre', 'BufNewFile' } }, - { - 'folke/lazydev.nvim', - ft = 'lua', -- only load on lua files - opts = { - library = { - -- See the configuration section for more details - -- Load luvit types when the `vim.uv` word is found - { path = 'luvit-meta/library', words = { 'vim%.uv' } }, - }, - }, - }, - { 'Bilal2453/luvit-meta', lazy = true }, -- optional `vim.uv` typings - { - 'nvimtools/none-ls.nvim', - config = function() - local null_ls = require 'null-ls' + prevfile = 'gk', + nextfile = 'gj', - null_ls.setup { - sources = { - null_ls.builtins.formatting.stylua, - null_ls.builtins.formatting.gdformat, - null_ls.builtins.diagnostics.gdlint, - }, - } - end, - }, - { - 'chomosuke/typst-preview.nvim', - ft = 'typst', - version = '1.*', - opts = { - dependencies_bin = { ['tinymist'] = 'tinymist' }, -- use mason - }, -- lazy.nvim will implicitly calls `setup {}` - }, - { - 'hedyhli/outline.nvim', - lazy = true, - cmd = { 'Outline', 'OutlineOpen' }, - keys = { -- Example mapping to toggle outline - { 'to', 'Outline', desc = 'Toggle outline' }, - }, - opts = {}, - }, + prevhist = '', + nexthist = '', + }, + preview = { + auto_preview = true, + should_preview_cb = function(bufnr) + -- file size greater than 100kb can't be previewed automatically + local filename = vim.api.nvim_buf_get_name(bufnr) + local fsize = vim.fn.getfsize(filename) + if fsize > 100 * 1024 then + return false + end + return true + end, + }, + }, + }, + { + 'rmagatti/goto-preview', + event = 'FileType', + keys = { + { + 'gpd', + function() + require('goto-preview').goto_preview_definition() + end, + desc = 'Go to definition preview', + }, + { + 'gpD', + function() + require('goto-preview').goto_preview_declaration() + end, + desc = 'Go to declaration preview', + }, + { + 'gpi', + function() + require('goto-preview').goto_preview_implementation() + end, + desc = 'Go to implementaion preview', + }, + { + 'gpt', + function() + require('goto-preview').goto_preview_type_definition() + end, + desc = 'Go to type preview', + }, + { + 'gpt', + function() + require('goto-preview').goto_preview_type_references() + end, + desc = 'Preview references', + }, + { + 'gpc', + function() + require('goto-preview').close_all_win() + end, + desc = 'Close all preview windows', + }, + }, + config = function() + require('goto-preview').setup {} + end, + dependencies = 'nvim-telescope/telescope.nvim', + opts = { + width = 78, + height = 15, + default_mappings = false, + opacity = 10, + }, + }, + { 'kosayoda/nvim-lightbulb', event = { 'BufReadPre', 'BufNewFile' } }, + { + 'folke/lazydev.nvim', + ft = 'lua', -- only load on lua files + opts = { + library = { + -- See the configuration section for more details + -- Load luvit types when the `vim.uv` word is found + { path = 'luvit-meta/library', words = { 'vim%.uv' } }, + }, + }, + }, + { 'Bilal2453/luvit-meta', lazy = true }, -- optional `vim.uv` typings + { + 'nvimtools/none-ls.nvim', + config = function() + local null_ls = require 'null-ls' + + null_ls.setup { + sources = { + null_ls.builtins.formatting.stylua, + null_ls.builtins.formatting.gdformat, + null_ls.builtins.diagnostics.gdlint, + }, + } + end, + }, + { + 'chomosuke/typst-preview.nvim', + ft = 'typst', + version = '1.*', + opts = { + dependencies_bin = { ['tinymist'] = 'tinymist' }, -- use mason + }, -- lazy.nvim will implicitly calls `setup {}` + }, + { + 'hedyhli/outline.nvim', + lazy = true, + cmd = { 'Outline', 'OutlineOpen' }, + keys = { -- Example mapping to toggle outline + { 'to', 'Outline', desc = 'Toggle outline' }, + }, + opts = {}, + }, + { + "klen/nvim-config-local", + config = function() + require("config-local").setup({ + -- Default options (optional) + + -- Config file patterns to load (lua supported) + config_files = { ".clangd.lua", ".nvim.lua", ".nvimrc", ".exrc", ".rust_analyzer.nvim" }, + + -- Where the plugin keeps files data + hashfile = vim.fn.stdpath("data") .. "/config-local", + + autocommands_create = true, -- Create autocommands (VimEnter, DirectoryChanged) + commands_create = true, -- Create commands (ConfigLocalSource, ConfigLocalEdit, ConfigLocalTrust, ConfigLocalIgnore) + silent = false, -- Disable plugin messages (Config loaded/ignored) + lookup_parents = false, -- Lookup config files in parent directories + }) + end, + } }