This commit is contained in:
Your Name 2026-03-06 22:40:15 +08:00
parent 24080f2a07
commit 77c38f1eb1
1 changed files with 91 additions and 2 deletions

View File

@ -516,6 +516,9 @@ require('lazy').setup({
'saghen/blink.cmp', 'saghen/blink.cmp',
}, },
config = function() config = function()
-- Configuration: Set to true to prefer system clangd over Mason
local prefer_system_clangd = true
-- Brief aside: **What is LSP?** -- Brief aside: **What is LSP?**
-- --
-- LSP is an initialism you've probably heard, but might not understand what it is. -- LSP is an initialism you've probably heard, but might not understand what it is.
@ -609,6 +612,22 @@ require('lazy').setup({
end, end,
}) })
-- Disable hover capability from Ruff if using with ty
vim.api.nvim_create_autocmd('LspAttach', {
group = vim.api.nvim_create_augroup('lsp_attach_disable_ruff_hover', { clear = true }),
callback = function(args)
local client = vim.lsp.get_client_by_id(args.data.client_id)
if client == nil then
return
end
if client.name == 'ruff' then
-- Disable hover in favor of ty
client.server_capabilities.hoverProvider = false
end
end,
desc = 'LSP: Disable hover capability from Ruff',
})
-- Enable the following language servers -- Enable the following language servers
-- Feel free to add/remove any LSPs that you want here. They will automatically be installed. -- Feel free to add/remove any LSPs that you want here. They will automatically be installed.
-- See `:help lsp-config` for information about keys and how to configure -- See `:help lsp-config` for information about keys and how to configure
@ -616,7 +635,14 @@ require('lazy').setup({
local servers = { local servers = {
-- clangd = {}, -- clangd = {},
-- gopls = {}, -- gopls = {},
-- pyright = {}, -- ty for Python type checking and hover documentation
ty = {
settings = {
ty = {
-- ty language server settings go here
},
},
},
-- rust_analyzer = {}, -- rust_analyzer = {},
-- --
-- Some languages (like typescript) have entire language plugins that can be useful: -- Some languages (like typescript) have entire language plugins that can be useful:
@ -624,6 +650,9 @@ require('lazy').setup({
-- --
-- But for many setups, the LSP (`ts_ls`) will work just fine -- But for many setups, the LSP (`ts_ls`) will work just fine
-- ts_ls = {}, -- ts_ls = {},
--
-- Ruff LSP for Python linting and formatting
ruff = {},
stylua = {}, -- Used to format Lua code stylua = {}, -- Used to format Lua code
@ -664,17 +693,77 @@ require('lazy').setup({
-- :Mason -- :Mason
-- --
-- You can press `g?` for help in this menu. -- You can press `g?` for help in this menu.
local ensure_installed = vim.tbl_keys(servers or {}) --
vim.list_extend(ensure_installed, {
-- You can add other tools here that you want Mason to install -- You can add other tools here that you want Mason to install
-- for you, so that they are available from within Neovim.
-- Detect system capabilities
local is_termux = vim.fn.has 'unix' == 1 and vim.fn.executable 'termux-info' == 1
local has_system_clangd = vim.fn.executable 'clangd' == 1
local use_system_clangd = prefer_system_clangd and has_system_clangd
-- List of tools to install via Mason
local ensure_installed = vim.tbl_keys(servers or {})
-- Extend with common tools
vim.list_extend(ensure_installed, {
'stylua',
'tailwindcss',
'prettierd',
'html',
'intelephense',
'pretty-php',
-- 'pylsp',
'svelte',
'vtsls',
'gofumpt',
'gopls',
'shfmt',
'rust-analyzer',
'ruff',
}) })
-- Only include clangd if not in Termux and system clangd preference allows it
if not is_termux and not use_system_clangd then
vim.list_extend(ensure_installed, {
'clangd',
'clang-format',
})
elseif not is_termux then
-- Still install clang-format via Mason even when using system clangd
vim.list_extend(ensure_installed, {
'clang-format',
})
end
require('mason-tool-installer').setup { ensure_installed = ensure_installed } require('mason-tool-installer').setup { ensure_installed = ensure_installed }
for name, server in pairs(servers) do for name, server in pairs(servers) do
vim.lsp.config(name, server) vim.lsp.config(name, server)
vim.lsp.enable(name) vim.lsp.enable(name)
end end
-- Setup clangd LSP conditionally - prefer system clangd if configured and available
local clangd_cmd = (use_system_clangd or is_termux) and { 'clangd' } or nil
require('lspconfig').clangd.setup {
cmd = clangd_cmd,
}
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,
},
}
end, end,
}, },