diff --git a/home/user/.config/nvim/lua/core/options.lua b/home/user/.config/nvim/lua/core/options.lua index bdaec6a..6387c5e 100644 --- a/home/user/.config/nvim/lua/core/options.lua +++ b/home/user/.config/nvim/lua/core/options.lua @@ -92,6 +92,7 @@ opt.undoreload = 1000 local prefix = vim.fn.expand("~/.local/state/nvim") + opt.undodir = { prefix .. "/undo//" } opt.backupdir = { prefix .. "/backup//" } opt.directory = { prefix .. "/swap//" } @@ -173,3 +174,4 @@ vim.api.nvim_create_autocmd("BufWinEnter", { }) vim.opt.foldcolumn = "1" +vim.diagnostic.config({ virtual_text = true }) diff --git a/home/user/.config/nvim/lua/plugins/autocomplete.lua b/home/user/.config/nvim/lua/plugins/autocomplete.lua index b71ff34..461117b 100644 --- a/home/user/.config/nvim/lua/plugins/autocomplete.lua +++ b/home/user/.config/nvim/lua/plugins/autocomplete.lua @@ -130,13 +130,6 @@ return { }, config = setup_cmp, }, - { - 'neovim/nvim-lspconfig', - event = "InsertEnter", - config = function() - vim.diagnostic.config({ virtual_text = true }) - end, - }, -- { -- 'zbirenbaum/copilot.lua', -- cmd = "Copilot", diff --git a/home/user/.config/nvim/lua/plugins/coding.lua b/home/user/.config/nvim/lua/plugins/coding.lua index 7d85a41..c48fa7c 100644 --- a/home/user/.config/nvim/lua/plugins/coding.lua +++ b/home/user/.config/nvim/lua/plugins/coding.lua @@ -1,3 +1,39 @@ + +local lsp_have_feature = { + rename = function(client) + return client.supports_method "textDocument/rename" + end, + inlay_hint = function(client) + return client.supports_method "textDocument/inlayHint" + end, +} + +local function get_lsp_client_names(have_feature) + local client_names = {} + local attached_clients = vim.lsp.get_clients { bufnr = 0 } + for _, client in ipairs(attached_clients) do + if have_feature(client) then + table.insert(client_names, client.name) + end + end + return client_names +end + +local function lsp_buf_rename(client_name) + vim.lsp.buf.rename(nil, { name = client_name }) +end + +function LSP_BUF_RENAME_USE_ANY(fallback) + local client_names = get_lsp_client_names(lsp_have_feature.rename) + for _, client_name in ipairs(client_names) do + lsp_buf_rename(client_name) + return + end + if fallback then + fallback() + end +end + return { { "ellisonleao/dotenv.nvim", @@ -185,4 +221,62 @@ return { vim.keymap.set("n", "ca", require("actions-preview").code_actions, {desc = "Code action"}) end, }, + { + "neovim/nvim-lspconfig", + dependencies = { + "mason-org/mason.nvim", + "mason-org/mason-lspconfig.nvim", + 'nvim-telescope/telescope.nvim', + }, + config = function() + local opts = { noremap=true, silent=true } + + local function desc(description) + return vim.tbl_extend("keep", opts, {desc = description}) + end + + -- Sections + vim.api.nvim_set_keymap('n', 'w', '', {desc = "Workspace manage"}) + + -- See `:help vim.lsp.*` for documentation on any of the below functions + vim.api.nvim_set_keymap('n', 'gD', 'lua vim.lsp.buf.declaration()', desc("Go declaration")) + vim.api.nvim_set_keymap('n', 'gd', 'Telescope lsp_definitions', desc("Go definition")) + vim.api.nvim_set_keymap('n', 'gi', 'Telescope lsp_implementations', desc("Go implementation")) + vim.api.nvim_set_keymap('n', 'gr', 'Telescope lsp_references', desc("Go references")) + vim.api.nvim_set_keymap('n', 'gt', 'Telescope lsp_type_definitions', desc("Go type references")) + vim.api.nvim_set_keymap('n', 'k', 'lua vim.lsp.buf.hover()', desc("Show help")) + vim.api.nvim_set_keymap('n', 'K', 'lua vim.lsp.buf.signature_help()', desc("Show signature")) + vim.api.nvim_set_keymap('n', 'wa', 'lua vim.lsp.buf.add_workspace_folder()', desc("Add workspace folder")) + vim.api.nvim_set_keymap('n', 'wr', 'lua vim.lsp.buf.remove_workspace_folder()', desc("Remove workspace folder")) + vim.api.nvim_set_keymap('n', 'wl', 'lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))', desc("Show workspace folders")) + vim.api.nvim_set_keymap('n', 'D', 'lua vim.lsp.buf.type_definition()', desc("Show type")) + vim.api.nvim_set_keymap('n', 'rn', "lua LSP_BUF_RENAME_USE_ANY()", desc("Rename object")) + vim.api.nvim_set_keymap('n', 'e', 'lua vim.diagnostic.open_float()', desc("Show diagnostic")) + vim.api.nvim_set_keymap('n', 'p', 'lua vim.diagnostic.goto_prev()', desc("Previous problem")) + vim.api.nvim_set_keymap('n', 'n', 'lua vim.diagnostic.goto_next()', desc("Next problem")) + vim.api.nvim_set_keymap('n', 'q', 'lua vim.diagnostic.setloclist()', opts) + vim.api.nvim_set_keymap('n', 'f', 'lua vim.lsp.buf.format()', desc("Format file")) + + -- Mason настройки + require("mason").setup() + + require("mason-lspconfig").setup({ + ensure_installed = { + "lua_ls", + "pyright", + "gopls", + "rust_analyzer", + "ts_ls", + }, + handlers = { + function(server_name) + local config = vim.deepcopy(require('lspconfig')[server_name].config) + config.capabilities = vim.lsp.protocol.make_client_capabilities() + vim.lsp.config(server_name, config) + vim.lsp.enable(server_name) + end, + } + }) + end + }, } diff --git a/home/user/.config/nvim/lua/plugins/lsp_manager.lua b/home/user/.config/nvim/lua/plugins/lsp_manager.lua deleted file mode 100644 index 6152a87..0000000 --- a/home/user/.config/nvim/lua/plugins/lsp_manager.lua +++ /dev/null @@ -1,80 +0,0 @@ - -local lsp_have_feature = { - rename = function(client) - return client.supports_method "textDocument/rename" - end, - inlay_hint = function(client) - return client.supports_method "textDocument/inlayHint" - end, -} - -local function get_lsp_client_names(have_feature) - local client_names = {} - local attached_clients = vim.lsp.get_clients { bufnr = 0 } - for _, client in ipairs(attached_clients) do - if have_feature(client) then - table.insert(client_names, client.name) - end - end - return client_names -end - -local function lsp_buf_rename(client_name) - vim.lsp.buf.rename(nil, { name = client_name }) -end - -function LSP_BUF_RENAME_USE_ANY(fallback) - local client_names = get_lsp_client_names(lsp_have_feature.rename) - for _, client_name in ipairs(client_names) do - lsp_buf_rename(client_name) - return - end - if fallback then - fallback() - end -end - - -return { - { - 'mason-org/mason.nvim', - dependencies = { - 'neovim/nvim-lspconfig', - "mason-org/mason-lspconfig.nvim", - 'nvim-telescope/telescope.nvim', - }, - config = function() - -- Mappings. - local opts = { noremap=true, silent=true } - - local function desc(description) - return vim.tbl_extend("keep", opts, {desc = description}) - end - - -- Sections - vim.api.nvim_set_keymap('n', 'w', '', {desc = "Workspace manage"}) - - -- See `:help vim.lsp.*` for documentation on any of the below functions - vim.api.nvim_set_keymap('n', 'gD', 'lua vim.lsp.buf.declaration()', desc("Go declaration")) - vim.api.nvim_set_keymap('n', 'gd', 'Telescope lsp_definitions', desc("Go definition")) - vim.api.nvim_set_keymap('n', 'gi', 'Telescope lsp_implementations', desc("Go implementation")) - vim.api.nvim_set_keymap('n', 'gr', 'Telescope lsp_references', desc("Go references")) - vim.api.nvim_set_keymap('n', 'gt', 'Telescope lsp_type_definitions', desc("Go type references")) - vim.api.nvim_set_keymap('n', 'k', 'lua vim.lsp.buf.hover()', desc("Show help")) - vim.api.nvim_set_keymap('n', 'K', 'lua vim.lsp.buf.signature_help()', desc("Show signature")) - vim.api.nvim_set_keymap('n', 'wa', 'lua vim.lsp.buf.add_workspace_folder()', desc("Add workspace folder")) - vim.api.nvim_set_keymap('n', 'wr', 'lua vim.lsp.buf.remove_workspace_folder()', desc("Remove workspace folder")) - vim.api.nvim_set_keymap('n', 'wl', 'lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))', desc("Show workspace folders")) - vim.api.nvim_set_keymap('n', 'D', 'lua vim.lsp.buf.type_definition()', desc("Show type")) - vim.api.nvim_set_keymap('n', 'rn', "lua LSP_BUF_RENAME_USE_ANY()", desc("Rename object")) - vim.api.nvim_set_keymap('n', 'e', 'lua vim.diagnostic.open_float()', desc("Show diagnostic")) - vim.api.nvim_set_keymap('n', 'p', 'lua vim.diagnostic.goto_prev()', desc("Previous problem")) - vim.api.nvim_set_keymap('n', 'n', 'lua vim.diagnostic.goto_next()', desc("Next problem")) - vim.api.nvim_set_keymap('n', 'q', 'lua vim.diagnostic.setloclist()', opts) - vim.api.nvim_set_keymap('n', 'f', 'lua vim.lsp.buf.format()', desc("Format file")) - - require("mason").setup() - require("mason-lspconfig").setup() - end, - }, -}