diff --git a/lua/custom/plugins/configs/lsp.lua b/lua/custom/plugins/configs/lsp.lua index 4b874ce..9c7334c 100644 --- a/lua/custom/plugins/configs/lsp.lua +++ b/lua/custom/plugins/configs/lsp.lua @@ -29,86 +29,86 @@ local completion = require 'null-ls.builtins._meta.completion' -- an lsp (for example, opening `main.rs` is associated with `rust_analyzer`) this -- function will be executed to configure the current buffer vim.api.nvim_create_autocmd('LspAttach', { - group = vim.api.nvim_create_augroup('kickstart-lsp-attach', { clear = true }), - callback = function(event) - -- NOTE: Remember that Lua is a real programming language, and as such it is possible - -- to define small helper and utility functions so you don't have to repeat yourself. - -- - -- In this case, we create a function that lets us more easily define mappings specific - -- for LSP related items. It sets the mode, buffer and description for us each time. - local map = function(keys, func, desc) - vim.keymap.set('n', keys, func, { buffer = event.buf, desc = 'LSP: ' .. desc }) - end + group = vim.api.nvim_create_augroup('kickstart-lsp-attach', { clear = true }), + callback = function(event) + -- NOTE: Remember that Lua is a real programming language, and as such it is possible + -- to define small helper and utility functions so you don't have to repeat yourself. + -- + -- In this case, we create a function that lets us more easily define mappings specific + -- for LSP related items. It sets the mode, buffer and description for us each time. + local map = function(keys, func, desc) + vim.keymap.set('n', keys, func, { buffer = event.buf, desc = 'LSP: ' .. desc }) + end - -- Jump to the definition of the word under your cursor. - -- This is where a variable was first declared, or where a function is defined, etc. - -- To jump back, press . - map('gd', require('telescope.builtin').lsp_definitions, '[G]oto [D]efinition') + -- Jump to the definition of the word under your cursor. + -- This is where a variable was first declared, or where a function is defined, etc. + -- To jump back, press . + map('gd', require('telescope.builtin').lsp_definitions, '[G]oto [D]efinition') - -- Find references for the word under your cursor. - map('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences') + -- Find references for the word under your cursor. + map('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences') - -- Jump to the implementation of the word under your cursor. - -- Useful when your language has ways of declaring types without an actual implementation. - map('gI', require('telescope.builtin').lsp_implementations, '[G]oto [I]mplementation') + -- Jump to the implementation of the word under your cursor. + -- Useful when your language has ways of declaring types without an actual implementation. + map('gI', require('telescope.builtin').lsp_implementations, '[G]oto [I]mplementation') - -- Rename the variable under your cursor. - -- Most Language Servers support renaming across files, etc. - map('cr', vim.lsp.buf.rename, '[R]ename') + -- Rename the variable under your cursor. + -- Most Language Servers support renaming across files, etc. + map('cr', vim.lsp.buf.rename, '[R]ename') - -- Execute a code action, usually your cursor needs to be on top of an error - -- or a suggestion from your LSP for this to activate. - map('ca', vim.lsp.buf.code_action, '[A]ction') + -- Execute a code action, usually your cursor needs to be on top of an error + -- or a suggestion from your LSP for this to activate. + map('ca', vim.lsp.buf.code_action, '[A]ction') - -- Opens a popup that displays documentation about the word under your cursor - -- See `:help K` for why this keymap. - map('K', vim.lsp.buf.hover, 'Hover Documentation') + -- Opens a popup that displays documentation about the word under your cursor + -- See `:help K` for why this keymap. + map('K', vim.lsp.buf.hover, 'Hover Documentation') - -- WARN: This is not Goto Definition, this is Goto Declaration. - -- For example, in C this would take you to the header. - map('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration') + -- WARN: This is not Goto Definition, this is Goto Declaration. + -- For example, in C this would take you to the header. + map('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration') - map('gl', vim.diagnostic.open_float, 'Make the diagnostic big') + map('gl', vim.diagnostic.open_float, 'Make the diagnostic big') - -- The following two autocommands are used to highlight references of the - -- word under your cursor when your cursor rests there for a little while. - -- See `:help CursorHold` for information about when this is executed - -- - -- When you move your cursor, the highlights will be cleared (the second autocommand). - local client = vim.lsp.get_client_by_id(event.data.client_id) - if client and client.server_capabilities.documentHighlightProvider then - local highlight_augroup = vim.api.nvim_create_augroup('kickstart-lsp-highlight', { clear = false }) - vim.api.nvim_create_autocmd({ 'CursorHold', 'CursorHoldI' }, { - buffer = event.buf, - group = highlight_augroup, - callback = vim.lsp.buf.document_highlight, - }) + -- The following two autocommands are used to highlight references of the + -- word under your cursor when your cursor rests there for a little while. + -- See `:help CursorHold` for information about when this is executed + -- + -- When you move your cursor, the highlights will be cleared (the second autocommand). + local client = vim.lsp.get_client_by_id(event.data.client_id) + if client and client.server_capabilities.documentHighlightProvider then + local highlight_augroup = vim.api.nvim_create_augroup('kickstart-lsp-highlight', { clear = false }) + vim.api.nvim_create_autocmd({ 'CursorHold', 'CursorHoldI' }, { + buffer = event.buf, + group = highlight_augroup, + callback = vim.lsp.buf.document_highlight, + }) - vim.api.nvim_create_autocmd({ 'CursorMoved', 'CursorMovedI' }, { - buffer = event.buf, - group = highlight_augroup, - callback = vim.lsp.buf.clear_references, - }) + vim.api.nvim_create_autocmd({ 'CursorMoved', 'CursorMovedI' }, { + buffer = event.buf, + group = highlight_augroup, + callback = vim.lsp.buf.clear_references, + }) - vim.api.nvim_create_autocmd('LspDetach', { - group = vim.api.nvim_create_augroup('kickstart-lsp-detach', { clear = true }), - callback = function(event2) - vim.lsp.buf.clear_references() - vim.api.nvim_clear_autocmds { group = 'kickstart-lsp-highlight', buffer = event2.buf } - end, - }) - end + vim.api.nvim_create_autocmd('LspDetach', { + group = vim.api.nvim_create_augroup('kickstart-lsp-detach', { clear = true }), + callback = function(event2) + vim.lsp.buf.clear_references() + vim.api.nvim_clear_autocmds { group = 'kickstart-lsp-highlight', buffer = event2.buf } + end, + }) + end - -- The following autocommand is used to enable inlay hints in your - -- code, if the language server you are using supports them - -- - -- This may be unwanted, since they displace some of your code - if client and client.server_capabilities.inlayHintProvider and vim.lsp.inlay_hint then - map('th', function() - vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled()) - end, '[T]oggle Inlay [H]ints') - end - end, + -- The following autocommand is used to enable inlay hints in your + -- code, if the language server you are using supports them + -- + -- This may be unwanted, since they displace some of your code + if client and client.server_capabilities.inlayHintProvider and vim.lsp.inlay_hint then + map('th', function() + vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled()) + end, '[T]oggle Inlay [H]ints') + end + end, }) -- LSP servers and clients are able to communicate to each other what features they support. @@ -119,22 +119,23 @@ CAPABILITIES = vim.lsp.protocol.make_client_capabilities() CAPABILITIES = vim.tbl_deep_extend('force', CAPABILITIES, require('cmp_nvim_lsp').default_capabilities()) DEFAULT_ON_ATTACH = function(client, bufnr) - vim.keymap.set('n', 'tp', function() - print('pinning this file: ', vim.api.nvim_buf_get_name(0), 'bufnr: ', bufnr) - client:exec_cmd({ - title = 'pin', - command = 'tinymist.pinMain', - arguments = { vim.api.nvim_buf_get_name(0) }, - }, { bufnr = bufnr }) - end, { desc = '[T]oggle [P]in (pin this file as main file)', noremap = true }) + vim.keymap.set('n', 'tp', function() + print('pinning this file: ', vim.api.nvim_buf_get_name(0), 'bufnr: ', bufnr) + client:exec_cmd({ + title = 'pin', + command = 'tinymist.pinMain', + arguments = { vim.api.nvim_buf_get_name(0) }, + }, { bufnr = bufnr }) + vim.cmd "TypstPreview" + end, { desc = '[T]oggle [P]review (pin this file as main file and open preview)', noremap = true }) - vim.keymap.set('n', 'tu', function() - client:exec_cmd({ - title = 'unpin', - command = 'tinymist.pinMain', - arguments = { vim.v.null }, - }, { bufnr = bufnr }) - end, { desc = '[T]oggle [U]npin (unpin this file as main file)', noremap = true }) + vim.keymap.set('n', 'tu', function() + client:exec_cmd({ + title = 'unpin', + command = 'tinymist.pinMain', + arguments = { vim.v.null }, + }, { bufnr = bufnr }) + end, { desc = '[T]oggle [U]npin (unpin this file as main file)', noremap = true }) end -- Enable the following language servers @@ -147,56 +148,56 @@ end -- - settings (table): Override the default settings passed when initializing the server. -- For example, to see the options for `lua_ls`, you could go to: https://luals.github.io/wiki/settings/ local servers = { - tinymist = { - settings = { - formatterMode = 'typstyle', - exportPdf = 'never', - semanticTokens = 'disable', - }, - on_attach = DEFAULT_ON_ATTACH, - }, - html = {}, - taplo = {}, - cssls = {}, - ts_ls = {}, - clangd = {}, - pyright = {}, - bashls = {}, - yamlls = {}, - rust_analyzer = { - settings = { - ['rust-analyzer'] = { - check = { - command = 'clippy', - }, - imports = { - preferPrelude = true, - }, - cargo = { - features = 'all', - buildScripts = { - enable = true, - }, - }, - procMacro = { - enable = true, - }, - assist = { - emitMustUse = true, - expressionFillDefault = true, - }, - }, - }, - }, - lua_ls = { - settings = { - Lua = { - completion = { - callSnippet = 'Replace', - }, - }, - }, - }, + tinymist = { + settings = { + formatterMode = 'typstyle', + exportPdf = 'never', + semanticTokens = 'disable', + }, + on_attach = DEFAULT_ON_ATTACH, + }, + html = {}, + taplo = {}, + cssls = {}, + ts_ls = {}, + clangd = {}, + pyright = {}, + bashls = {}, + yamlls = {}, + rust_analyzer = { + settings = { + ['rust-analyzer'] = { + check = { + command = 'clippy', + }, + imports = { + preferPrelude = true, + }, + cargo = { + features = 'all', + buildScripts = { + enable = true, + }, + }, + procMacro = { + enable = true, + }, + assist = { + emitMustUse = true, + expressionFillDefault = true, + }, + }, + }, + }, + lua_ls = { + settings = { + Lua = { + completion = { + callSnippet = 'Replace', + }, + }, + }, + }, } -- Ensure the servers and tools above are installed @@ -213,20 +214,20 @@ local ensure_installed = vim.tbl_keys(servers or {}) vim.list_extend(ensure_installed, {}) require('mason-lspconfig').setup { - ensure_installed = ensure_installed, - automatic_installation = true, - automatic_enable = false, + ensure_installed = ensure_installed, + automatic_installation = true, + automatic_enable = false, } -- some things work weird local lspconfig = require 'lspconfig' for server_name, server in pairs(servers) do - -- This handles overriding only values explicitly passed - -- by the server configuration above. Useful when disabling - -- certain features of an LSP (for example, turning off formatting for tsserver) - server.capabilities = vim.tbl_deep_extend('force', {}, CAPABILITIES, server.capabilities or {}) - require('lspconfig')[server_name].setup(server) + -- This handles overriding only values explicitly passed + -- by the server configuration above. Useful when disabling + -- certain features of an LSP (for example, turning off formatting for tsserver) + server.capabilities = vim.tbl_deep_extend('force', {}, CAPABILITIES, server.capabilities or {}) + require('lspconfig')[server_name].setup(server) end lspconfig.gdscript.setup {}