diff --git a/lua/kickstart/plugins/conform.lua b/lua/kickstart/plugins/conform.lua index 1f8c5f9b..4cec0037 100644 --- a/lua/kickstart/plugins/conform.lua +++ b/lua/kickstart/plugins/conform.lua @@ -38,6 +38,7 @@ return { typescript = { 'biome' }, javascript = { 'biome' }, typescriptreact = { 'biome' }, + javascriptreact = { 'biome' }, }, }, }, diff --git a/lua/kickstart/plugins/lint.lua b/lua/kickstart/plugins/lint.lua index 1df78edb..efbc9a24 100644 --- a/lua/kickstart/plugins/lint.lua +++ b/lua/kickstart/plugins/lint.lua @@ -7,7 +7,6 @@ return { local lint = require 'lint' lint.linters_by_ft = { go = { 'golangcilint' }, - markdown = { 'markdownlint' }, typescript = { 'biomejs' }, typescriptreact = { 'biomejs' }, } diff --git a/lua/kickstart/plugins/lspconfig.lua b/lua/kickstart/plugins/lspconfig.lua index f83f3e6d..2f8228fb 100644 --- a/lua/kickstart/plugins/lspconfig.lua +++ b/lua/kickstart/plugins/lspconfig.lua @@ -118,26 +118,11 @@ return { -- map('grt', require('telescope.builtin').lsp_type_definitions, '[G]oto [T]ype Definition') map('grt', require('fzf-lua').lsp_typedefs, '[G]oto [T]ype Definition') - -- This function resolves a difference between neovim nightly (version 0.11) and stable (version 0.10) - ---@param client vim.lsp.Client - ---@param method vim.lsp.protocol.Method - ---@param bufnr? integer some lsp support methods only in specific files - ---@return boolean - local function client_supports_method(client, method, bufnr) - if vim.fn.has 'nvim-0.11' == 1 then - return client:supports_method(method, bufnr) - else - return client.supports_method(method, { bufnr = bufnr }) - end - end - -- 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_supports_method(client, vim.lsp.protocol.Methods.textDocument_documentHighlight, event.buf) then + if client and client:supports_method('textDocument/documentHighlight', event.buf) then local highlight_augroup = vim.api.nvim_create_augroup('kickstart-lsp-highlight', { clear = false }) vim.api.nvim_create_autocmd({ 'CursorHold', 'CursorHoldI' }, { buffer = event.buf, @@ -145,6 +130,7 @@ return { callback = vim.lsp.buf.document_highlight, }) + -- When you move your cursor, the highlights will be cleared vim.api.nvim_create_autocmd({ 'CursorMoved', 'CursorMovedI' }, { buffer = event.buf, group = highlight_augroup, @@ -164,7 +150,7 @@ return { -- 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_supports_method(client, vim.lsp.protocol.Methods.textDocument_inlayHint, event.buf) then + if client and client:supports_method('textDocument/inlayHint', event.buf) then map('th', function() vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled { bufnr = event.buf }) end, '[T]oggle Inlay [H]ints') @@ -205,11 +191,8 @@ return { -- By default, Neovim doesn't support everything that is in the LSP specification. -- When you add blink.cmp, luasnip, etc. Neovim now has *more* capabilities. -- So, we create new capabilities with blink.cmp, and then broadcast that to the servers. - local capabilities = require('blink.cmp').get_lsp_capabilities() + -- local capabilities = require('blink.cmp').get_lsp_capabilities() - -- Enable the following language servers - -- Feel free to add/remove any LSPs that you want here. They will automatically be installed. - -- -- Add any additional override configuration in the following tables. Available keys are: -- - cmd (table): Override the default command used to start the server -- - filetypes (table): Override the default list of associated filetypes for the server @@ -222,18 +205,35 @@ return { pyright = {}, rust_analyzer = {}, -- ... etc. See `:help lspconfig-all` for a list of all the pre-configured LSPs - -- - -- Some languages (like typescript) have entire language plugins that can be useful: - -- https://github.com/pmizio/typescript-tools.nvim - -- - -- But for many setups, the LSP (`ts_ls`) will work just fine - -- ts_ls = {}, - -- - + stylua = {}, lua_ls = { -- cmd = { ... }, -- filetypes = { ... }, -- capabilities = {}, + on_init = function(client) + if client.workspace_folders then + local path = client.workspace_folders[1].name + if path ~= vim.fn.stdpath 'config' and (vim.uv.fs_stat(path .. '/.luarc.json') or vim.uv.fs_stat(path .. '/.luarc.jsonc')) then + return + end + end + + -- client.config.settings.Lua = vim.tbl_deep_extend('force', client.config.settings.Lua, { + -- runtime = { + -- version = 'LuaJIT', + -- path = { 'lua/?.lua', 'lua/?/init.lua' }, + -- }, + -- workspace = { + -- checkThirdParty = false, + -- -- NOTE: this is a lot slower and will cause issues when working on your own configuration. + -- -- See https://github.com/neovim/nvim-lspconfig/issues/3189 + -- library = vim.tbl_extend('force', vim.api.nvim_get_runtime_file('', true), { + -- '${3rd}/luv/library', + -- '${3rd}/busted/library', + -- }), + -- }, + -- }) + end, settings = { Lua = { completion = { @@ -241,45 +241,33 @@ return { }, -- You can toggle below to ignore Lua_LS's noisy `missing-fields` warnings -- diagnostics = { disable = { 'missing-fields' } }, + diagnostics = { + globals = { 'vim' }, + }, }, }, }, - biome = {}, + ts_ls = {}, + -- TODO: make biome work as lsp fot ts, js, tsx, jsx files instead of ts_ls + biome = { + -- cmd = { 'biome', 'lsp-proxy' }, + -- root_dir = require('lspconfig').util.root_pattern('package.json', '.git'), + }, } -- Ensure the servers and tools above are installed - -- -- To check the current status of installed tools and/or manually install -- other tools, you can run -- :Mason - -- - -- You can press `g?` for help in this menu. - -- - -- `mason` had to be setup earlier: to configure its options see the - -- `dependencies` table for `nvim-lspconfig` above. - -- - -- You can add other tools here that you want Mason to install - -- for you, so that they are available from within Neovim. local ensure_installed = vim.tbl_keys(servers or {}) vim.list_extend(ensure_installed, { - 'stylua', -- Used to format Lua code + -- add any other tools we want from mason }) require('mason-tool-installer').setup { ensure_installed = ensure_installed } - - require('mason-lspconfig').setup { - ensure_installed = {}, -- explicitly set to an empty table (Kickstart populates installs via mason-tool-installer) - automatic_installation = false, - handlers = { - function(server_name) - local server = servers[server_name] or {} - -- 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 ts_ls) - server.capabilities = vim.tbl_deep_extend('force', {}, capabilities, server.capabilities or {}) - require('lspconfig')[server_name].setup(server) - end, - }, - } + for name, server in pairs(servers) do + vim.lsp.config(name, server) + vim.lsp.enable(name) + end -- In case you want to install an lsp directly on your system, you;ll need to configure it and enable it manually -- local system_installed_servers = {