feat: nvim-lspconfig -> vim.lsp.config()
This commit is contained in:
parent
e5354bfa28
commit
e7cddfde33
6 changed files with 222 additions and 235 deletions
|
@ -91,9 +91,6 @@ with final.pkgs.lib; let
|
|||
]
|
||||
))
|
||||
|
||||
# LSP
|
||||
nvim-lspconfig
|
||||
|
||||
# Coding
|
||||
blink-cmp
|
||||
luasnip
|
||||
|
|
|
@ -12,6 +12,7 @@ require('keymaps')
|
|||
require('autocmds')
|
||||
|
||||
require('snacks-nvim')
|
||||
require('lsp')
|
||||
|
||||
require('lz.n').load('plugins')
|
||||
|
||||
|
|
38
nvim/lsp/lua-language-server.lua
Normal file
38
nvim/lsp/lua-language-server.lua
Normal file
|
@ -0,0 +1,38 @@
|
|||
return {
|
||||
filetypes = { 'lua' },
|
||||
cmd = { 'lua-language-server' },
|
||||
root_markers = {
|
||||
'.luarc.json',
|
||||
'.luarc.jsonc',
|
||||
'.luacheckrc',
|
||||
'.stylua.toml',
|
||||
'stylua.toml',
|
||||
'selene.toml',
|
||||
'selene.yml',
|
||||
},
|
||||
|
||||
settings = {
|
||||
Lua = {
|
||||
workspace = {
|
||||
checkThirdParty = false,
|
||||
},
|
||||
codeLens = {
|
||||
enable = true,
|
||||
},
|
||||
completion = {
|
||||
callSnippet = 'Replace',
|
||||
},
|
||||
doc = {
|
||||
privateName = { '^_' },
|
||||
},
|
||||
hint = {
|
||||
enable = true,
|
||||
setType = false,
|
||||
paramType = true,
|
||||
paramName = 'Disable',
|
||||
semicolon = 'Disable',
|
||||
arrayIndex = 'Disable',
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
183
nvim/lua/lsp.lua
Normal file
183
nvim/lua/lsp.lua
Normal file
|
@ -0,0 +1,183 @@
|
|||
local i = require('icons')
|
||||
|
||||
-- Diagnostics -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
||||
---@type vim.diagnostic.Opts
|
||||
local diagnosticConfig = {
|
||||
underline = true,
|
||||
update_in_insert = true,
|
||||
virtual_text = {
|
||||
spacing = 4,
|
||||
source = 'if_many',
|
||||
prefix = function(diagnostic)
|
||||
for d, icon in pairs(i.diagnostics) do
|
||||
if diagnostic.severity == vim.diagnostic.severity[d:upper()] then
|
||||
return icon
|
||||
end
|
||||
end
|
||||
|
||||
return ''
|
||||
end,
|
||||
},
|
||||
severity_sort = true,
|
||||
signs = {
|
||||
text = {
|
||||
[vim.diagnostic.severity.ERROR] = i.diagnostics.Error,
|
||||
[vim.diagnostic.severity.WARN] = i.diagnostics.Warn,
|
||||
[vim.diagnostic.severity.HINT] = i.diagnostics.Hint,
|
||||
[vim.diagnostic.severity.INFO] = i.diagnostics.Info,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for severity, icon in pairs(diagnosticConfig.signs.text) do
|
||||
local name =
|
||||
vim.diagnostic.severity[severity]:lower():gsub('^%l', string.upper)
|
||||
name = 'DiagnosticSign' .. name
|
||||
|
||||
vim.fn.sign_define(name, { text = icon, texthl = name, numhl = '' })
|
||||
end
|
||||
|
||||
vim.diagnostic.config(diagnosticConfig)
|
||||
|
||||
-- Codelens -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
||||
vim.api.nvim_create_autocmd('User', {
|
||||
pattern = 'LspSupportsMethod',
|
||||
callback = function(args)
|
||||
local client = vim.lsp.get_client_by_id(args.data.client_id)
|
||||
local buffer = args.data.buffer
|
||||
|
||||
if client and args.data.method == 'textDocument/codeLens' then
|
||||
vim.lsp.codelens.refresh()
|
||||
|
||||
vim.api.nvim_create_autocmd({ 'BufEnter', 'CursorHold', 'InsertLeave' }, {
|
||||
buffer = buffer,
|
||||
callback = vim.lsp.codelens.refresh,
|
||||
})
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
-- Server Setup -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
||||
local has_blink, blink = pcall(require, 'blink.cmp')
|
||||
local capabilities = vim.tbl_deep_extend(
|
||||
'force',
|
||||
{},
|
||||
vim.lsp.protocol.make_client_capabilities(),
|
||||
has_blink and blink.get_lsp_capabilities() or {},
|
||||
{
|
||||
workspace = {
|
||||
fileOperations = {
|
||||
didRename = true,
|
||||
willRename = true,
|
||||
},
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
vim.lsp.config('*', {
|
||||
root_markers = { '.git' },
|
||||
capabilities = capabilities,
|
||||
})
|
||||
|
||||
vim.lsp.enable({ 'lua-language-server' })
|
||||
|
||||
-- Keymaps -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
||||
vim.api.nvim_create_autocmd('LspAttach', {
|
||||
callback = function(args)
|
||||
local client = vim.lsp.get_client_by_id(args.data.client_id)
|
||||
|
||||
if not client then
|
||||
return
|
||||
end
|
||||
|
||||
local set = vim.keymap.set
|
||||
|
||||
set('n', 'gD', vim.lsp.buf.declaration, { desc = 'declaration' })
|
||||
set('n', 'gI', vim.lsp.buf.implementation, { desc = 'implementation' })
|
||||
|
||||
set(
|
||||
'n',
|
||||
'gr',
|
||||
vim.lsp.buf.references,
|
||||
{ desc = 'references', nowait = true }
|
||||
)
|
||||
|
||||
set('n', 'gy', vim.lsp.buf.type_definition, { desc = 'type definition' })
|
||||
|
||||
set('n', 'K', function()
|
||||
return vim.lsp.buf.hover()
|
||||
end, { desc = 'hover' })
|
||||
|
||||
if client.supports_method('textDocument/codeAction') then
|
||||
set(
|
||||
{ 'n', 'v' },
|
||||
'<LEADER>ca',
|
||||
vim.lsp.buf.code_action,
|
||||
{ desc = 'code action' }
|
||||
)
|
||||
end
|
||||
|
||||
if client.supports_method('textDocument/codeLens') then
|
||||
set(
|
||||
{ 'n', 'v' },
|
||||
'<LEADER>cc',
|
||||
vim.lsp.codelens.run,
|
||||
{ desc = 'run codelens' }
|
||||
)
|
||||
|
||||
set(
|
||||
'n',
|
||||
'<LEADER>cC',
|
||||
vim.lsp.codelens.refresh,
|
||||
{ desc = 'refresh & display codelens' }
|
||||
)
|
||||
end
|
||||
|
||||
if client.supports_method('textDocument/definition') then
|
||||
set('n', 'gd', vim.lsp.buf.definition, { desc = 'definition' })
|
||||
end
|
||||
|
||||
if client.supports_method('textDocument/documentHighlight') then
|
||||
if Snacks.words.is_enabled() then
|
||||
set('n', '<A-n>', function()
|
||||
Snacks.words.jump(vim.v.count1, true)
|
||||
end, { desc = 'next reference' })
|
||||
|
||||
set('n', '<A-p>', function()
|
||||
Snacks.words.jump(-vim.v.count1, true)
|
||||
end, { desc = 'prev reference' })
|
||||
|
||||
set('n', ']]', function()
|
||||
Snacks.words.jump(vim.v.count1)
|
||||
end, { desc = 'next reference' })
|
||||
|
||||
set('n', '[[', function()
|
||||
Snacks.words.jump(-vim.v.count1)
|
||||
end, { desc = 'prev reference' })
|
||||
end
|
||||
end
|
||||
|
||||
if client.supports_method('textDocument/rename') then
|
||||
set('n', '<LEADER>cr', vim.lsp.buf.rename, { desc = 'rename' })
|
||||
end
|
||||
|
||||
if client.supports_method('textDocument/signatureHelp') then
|
||||
set('i', '<C-k>', function()
|
||||
return vim.lsp.buf.signature_help()
|
||||
end, { desc = 'signature help' })
|
||||
|
||||
set('n', 'gK', function()
|
||||
vim.lsp.buf.signature_help()
|
||||
end, { desc = 'signature help' })
|
||||
end
|
||||
|
||||
if
|
||||
client.supports_method('workspace/didRenameFiles')
|
||||
or client.supports_method('workspace/willRenameFiles')
|
||||
then
|
||||
set('n', '<LEADER>cR', function()
|
||||
Snacks.rename.rename_file()
|
||||
end, { desc = 'rename file' })
|
||||
end
|
||||
end,
|
||||
})
|
|
@ -1,5 +0,0 @@
|
|||
local req = MarleyVim.local_require('plugins.lsp')
|
||||
|
||||
return {
|
||||
req('nvim-lspconfig'),
|
||||
}
|
|
@ -1,227 +0,0 @@
|
|||
return {
|
||||
'nvim-lspconfig',
|
||||
event = { 'BufRead', 'BufWinEnter', 'BufNewFile' },
|
||||
cmd = { 'LspStart', 'LspRestart', 'LspStop', 'LspLog' },
|
||||
after = function()
|
||||
local i = require('icons')
|
||||
|
||||
-- Diagnostics -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
||||
---@type vim.diagnostic.Opts
|
||||
local diagnosticConfig = {
|
||||
underline = true,
|
||||
update_in_insert = true,
|
||||
virtual_text = {
|
||||
spacing = 4,
|
||||
source = 'if_many',
|
||||
prefix = function(diagnostic)
|
||||
for d, icon in pairs(i.diagnostics) do
|
||||
if diagnostic.severity == vim.diagnostic.severity[d:upper()] then
|
||||
return icon
|
||||
end
|
||||
end
|
||||
|
||||
return ''
|
||||
end,
|
||||
},
|
||||
severity_sort = true,
|
||||
signs = {
|
||||
text = {
|
||||
[vim.diagnostic.severity.ERROR] = i.diagnostics.Error,
|
||||
[vim.diagnostic.severity.WARN] = i.diagnostics.Warn,
|
||||
[vim.diagnostic.severity.HINT] = i.diagnostics.Hint,
|
||||
[vim.diagnostic.severity.INFO] = i.diagnostics.Info,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for severity, icon in pairs(diagnosticConfig.signs.text) do
|
||||
local name =
|
||||
vim.diagnostic.severity[severity]:lower():gsub('^%l', string.upper)
|
||||
name = 'DiagnosticSign' .. name
|
||||
|
||||
vim.fn.sign_define(name, { text = icon, texthl = name, numhl = '' })
|
||||
end
|
||||
|
||||
vim.diagnostic.config(diagnosticConfig)
|
||||
|
||||
-- Codelens -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
||||
vim.api.nvim_create_autocmd('User', {
|
||||
pattern = 'LspSupportsMethod',
|
||||
callback = function(args)
|
||||
local client = vim.lsp.get_client_by_id(args.data.client_id)
|
||||
local buffer = args.data.buffer
|
||||
|
||||
if client and args.data.method == 'textDocument/codeLens' then
|
||||
vim.lsp.codelens.refresh()
|
||||
|
||||
vim.api.nvim_create_autocmd(
|
||||
{ 'BufEnter', 'CursorHold', 'InsertLeave' },
|
||||
{
|
||||
buffer = buffer,
|
||||
callback = vim.lsp.codelens.refresh,
|
||||
}
|
||||
)
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
-- Server Setup -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
||||
local has_blink, blink = pcall(require, 'blink.cmp')
|
||||
local capabilities = vim.tbl_deep_extend(
|
||||
'force',
|
||||
{},
|
||||
vim.lsp.protocol.make_client_capabilities(),
|
||||
has_blink and blink.get_lsp_capabilities() or {},
|
||||
{
|
||||
workspace = {
|
||||
fileOperations = {
|
||||
didRename = true,
|
||||
willRename = true,
|
||||
},
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
local lspconfig = require('lspconfig')
|
||||
|
||||
lspconfig.util.default_config = vim.tbl_extend(
|
||||
'force',
|
||||
lspconfig.util.default_config,
|
||||
{ capabilities = capabilities }
|
||||
)
|
||||
|
||||
lspconfig.lua_ls.setup({
|
||||
settings = {
|
||||
Lua = {
|
||||
workspace = {
|
||||
checkThirdParty = false,
|
||||
},
|
||||
codeLens = {
|
||||
enable = true,
|
||||
},
|
||||
completion = {
|
||||
callSnippet = 'Replace',
|
||||
},
|
||||
doc = {
|
||||
privateName = { '^_' },
|
||||
},
|
||||
hint = {
|
||||
enable = true,
|
||||
setType = false,
|
||||
paramType = true,
|
||||
paramName = 'Disable',
|
||||
semicolon = 'Disable',
|
||||
arrayIndex = 'Disable',
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
-- Keymaps -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
||||
vim.api.nvim_create_autocmd('LspAttach', {
|
||||
callback = function(args)
|
||||
local client = vim.lsp.get_client_by_id(args.data.client_id)
|
||||
|
||||
if not client then
|
||||
return
|
||||
end
|
||||
|
||||
local set = vim.keymap.set
|
||||
|
||||
set('n', '<LEADER>cl', '<CMD>LspInfo<CR>', { desc = 'lsp info' })
|
||||
set('n', 'gD', vim.lsp.buf.declaration, { desc = 'declaration' })
|
||||
set('n', 'gI', vim.lsp.buf.implementation, { desc = 'implementation' })
|
||||
|
||||
set(
|
||||
'n',
|
||||
'gr',
|
||||
vim.lsp.buf.references,
|
||||
{ desc = 'references', nowait = true }
|
||||
)
|
||||
|
||||
set(
|
||||
'n',
|
||||
'gy',
|
||||
vim.lsp.buf.type_definition,
|
||||
{ desc = 'type definition' }
|
||||
)
|
||||
|
||||
set('n', 'K', function()
|
||||
return vim.lsp.buf.hover()
|
||||
end, { desc = 'hover' })
|
||||
|
||||
if client.supports_method('textDocument/codeAction') then
|
||||
set(
|
||||
{ 'n', 'v' },
|
||||
'<LEADER>ca',
|
||||
vim.lsp.buf.code_action,
|
||||
{ desc = 'code action' }
|
||||
)
|
||||
end
|
||||
|
||||
if client.supports_method('textDocument/codeLens') then
|
||||
set(
|
||||
{ 'n', 'v' },
|
||||
'<LEADER>cc',
|
||||
vim.lsp.codelens.run,
|
||||
{ desc = 'run codelens' }
|
||||
)
|
||||
|
||||
set(
|
||||
'n',
|
||||
'<LEADER>cC',
|
||||
vim.lsp.codelens.refresh,
|
||||
{ desc = 'refresh & display codelens' }
|
||||
)
|
||||
end
|
||||
|
||||
if client.supports_method('textDocument/definition') then
|
||||
set('n', 'gd', vim.lsp.buf.definition, { desc = 'definition' })
|
||||
end
|
||||
|
||||
if client.supports_method('textDocument/documentHighlight') then
|
||||
if Snacks.words.is_enabled() then
|
||||
set('n', '<A-n>', function()
|
||||
Snacks.words.jump(vim.v.count1, true)
|
||||
end, { desc = 'next reference' })
|
||||
|
||||
set('n', '<A-p>', function()
|
||||
Snacks.words.jump(-vim.v.count1, true)
|
||||
end, { desc = 'prev reference' })
|
||||
|
||||
set('n', ']]', function()
|
||||
Snacks.words.jump(vim.v.count1)
|
||||
end, { desc = 'next reference' })
|
||||
|
||||
set('n', '[[', function()
|
||||
Snacks.words.jump(-vim.v.count1)
|
||||
end, { desc = 'prev reference' })
|
||||
end
|
||||
end
|
||||
|
||||
if client.supports_method('textDocument/rename') then
|
||||
set('n', '<LEADER>cr', vim.lsp.buf.rename, { desc = 'rename' })
|
||||
end
|
||||
|
||||
if client.supports_method('textDocument/signatureHelp') then
|
||||
set('i', '<C-k>', function()
|
||||
return vim.lsp.buf.signature_help()
|
||||
end, { desc = 'signature help' })
|
||||
|
||||
set('n', 'gK', function()
|
||||
vim.lsp.buf.signature_help()
|
||||
end, { desc = 'signature help' })
|
||||
end
|
||||
|
||||
if
|
||||
client.supports_method('workspace/didRenameFiles')
|
||||
or client.supports_method('workspace/willRenameFiles')
|
||||
then
|
||||
set('n', '<LEADER>cR', function()
|
||||
Snacks.rename.rename_file()
|
||||
end, { desc = 'rename file' })
|
||||
end
|
||||
end,
|
||||
})
|
||||
end,
|
||||
}
|
Loading…
Reference in a new issue