328 lines
9.7 KiB
Lua
328 lines
9.7 KiB
Lua
require 'andr3.lsp_adds.prettier'
|
|
require 'andr3.lsp_adds.null-ls'
|
|
|
|
-- Signature
|
|
|
|
require 'lsp_signature'.setup({ });
|
|
|
|
-- Items {{{
|
|
require('vim.lsp.protocol').CompletionItemKind = {
|
|
'', -- Text
|
|
'', -- Method
|
|
'', -- Function
|
|
'', -- Constructor
|
|
'', -- Field
|
|
'', -- Variable
|
|
'ﴯ', -- Class
|
|
'', -- Interface
|
|
'', -- Module
|
|
'ﰠ', -- Property
|
|
'', -- Unit
|
|
'', -- Value
|
|
'', -- Enum
|
|
'', -- Keyword
|
|
'', -- Snippet
|
|
'', -- Color
|
|
'', -- File
|
|
'', -- Reference
|
|
'', -- Folder
|
|
'', -- EnumMember
|
|
'', -- Constant
|
|
'', -- Struct
|
|
'', -- Event
|
|
'', -- Operator
|
|
'', -- TypeParameter
|
|
}
|
|
--- }}}
|
|
|
|
vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(
|
|
vim.lsp.diagnostic.on_publish_diagnostics, {
|
|
-- Enable underline, use default values
|
|
underline = true,
|
|
-- Enable virtual text, override spacing to 4
|
|
virtual_text = {
|
|
spacing = 4,
|
|
prefix = '~',
|
|
},
|
|
-- Use a function to dynamically turn signs off
|
|
-- and on, using buffer local variables
|
|
signs = function(bufnr, client_id)
|
|
local ok, result = pcall(vim.api.nvim_buf_get_var, bufnr, 'show_signs')
|
|
-- No buffer local variable set, so just enable by default
|
|
if not ok then
|
|
return true
|
|
end
|
|
|
|
return result
|
|
end,
|
|
-- Disable a feature
|
|
update_in_insert = false,
|
|
}
|
|
)
|
|
|
|
-- vim.diagnostic.config({ virtual_text = { prefix = '🅰', } })
|
|
|
|
local warn = "😞";
|
|
local signs = { Error = "☣️ ", Warn = warn, Hint = "❤️ ", Info = "🆓" }
|
|
|
|
for type, icon in pairs(signs) do
|
|
local hl = "DiagnosticSign" .. type
|
|
vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = hl })
|
|
end
|
|
|
|
local kind_icons = {
|
|
Text = "",
|
|
Method = "",
|
|
Function = "",
|
|
Constructor = "",
|
|
Field = "",
|
|
Variable = "",
|
|
Class = "ﴯ",
|
|
Interface = "",
|
|
Module = "",
|
|
Property = "ﰠ",
|
|
Unit = "",
|
|
Value = "",
|
|
Enum = "",
|
|
Keyword = "",
|
|
Snippet = "",
|
|
Color = "",
|
|
File = "",
|
|
Reference = "",
|
|
Folder = "",
|
|
EnumMember = "",
|
|
Constant = "",
|
|
Struct = "",
|
|
Event = "",
|
|
Operator = "",
|
|
TypeParameter = ""
|
|
}
|
|
|
|
-- lspkind
|
|
|
|
require('lspkind').init({
|
|
mode = 'symbol_text',
|
|
preset = 'codicons',
|
|
symbol_map = kind_icons,
|
|
})
|
|
|
|
-- Saga
|
|
|
|
local keymap = vim.keymap.set
|
|
local saga = require'lspsaga'
|
|
|
|
-- saga.init_lsp_saga{
|
|
saga.setup{
|
|
border_style = "single",
|
|
saga_winblend = 0,
|
|
move_in_saga = { prev = '<C-p>',next = '<C-n>'},
|
|
diagnostic_header = { "☣️ ", warn, "❤️ ", "🆓" },
|
|
max_preview_lines = 10,
|
|
code_action_icon = "🈁",
|
|
code_action_num_shortcut = true,
|
|
code_action_lightbulb = {
|
|
enable = true,
|
|
enable_in_insert = true,
|
|
cache_code_action = true,
|
|
sign = true,
|
|
update_time = 150,
|
|
sign_priority = 20,
|
|
virtual_text = true,
|
|
},
|
|
finder_icons = {
|
|
def = ' ',
|
|
ref = '諭 ',
|
|
link = ' ',
|
|
},
|
|
finder_request_timeout = 1500,
|
|
finder_action_keys = {
|
|
open = {'o', '<CR>'},
|
|
vsplit = 's',
|
|
split = 'i',
|
|
tabe = 't',
|
|
quit = {'q', '<ESC>'},
|
|
},
|
|
code_action_keys = {
|
|
quit = 'q',
|
|
exec = '<CR>',
|
|
},
|
|
definition_action_keys = {
|
|
edit = '<C-c>o',
|
|
vsplit = '<C-c>v',
|
|
split = '<C-c>i',
|
|
tabe = '<C-c>t',
|
|
quit = 'q',
|
|
},
|
|
rename_action_quit = '<C-c>',
|
|
rename_in_select = true,
|
|
symbol_in_winbar = {
|
|
in_custom = false,
|
|
enable = true,
|
|
separator = ' ',
|
|
show_file = true,
|
|
file_formatter = "",
|
|
click_support = false,
|
|
},
|
|
show_outline = {
|
|
win_position = 'right',
|
|
win_with = '',
|
|
win_width = 30,
|
|
auto_enter = true,
|
|
auto_preview = true,
|
|
virt_text = '┃',
|
|
jump_key = 'o',
|
|
auto_refresh = true,
|
|
},
|
|
custom_kind = {},
|
|
server_filetype_map = {},
|
|
}
|
|
|
|
keymap("n", "<leader>sf", "<cmd>Lspsaga lsp_finder<CR>", { silent = true })
|
|
keymap({"n","v"}, "<leader>ca", function () saga.code_action() end, {})
|
|
keymap("n", "gr", "<cmd>Lspsaga rename<CR>", { silent = true })
|
|
keymap("n", "gd", "<cmd>Lspsaga peek_definition<CR>", { silent = true })
|
|
--keymap("n", "<leader>cd", "<cmd>Lspsaga show_line_diagnostics<CR>", { silent = true })
|
|
keymap("n", "<leader>cd", "<cmd>Lspsaga show_cursor_diagnostics<CR>", { silent = true })
|
|
keymap('n', '<space>e', '<cmd>lua vim.diagnostic.open_float()<CR>', { silent = true })
|
|
keymap("n", "[e", "<cmd>Lspsaga diagnostic_jump_prev<CR>", { silent = true })
|
|
keymap("n", "]e", "<cmd>Lspsaga diagnostic_jump_next<CR>", { silent = true })
|
|
|
|
keymap("n", "[E", function()
|
|
require("lspsaga.diagnostic").goto_prev({ severity = vim.diagnostic.severity.ERROR })
|
|
end, { silent = true })
|
|
keymap("n", "]E", function()
|
|
require("lspsaga.diagnostic").goto_next({ severity = vim.diagnostic.severity.ERROR })
|
|
end, { silent = true })
|
|
|
|
keymap("n","<leader>o", "<cmd>LSoutlineToggle<CR>",{ silent = true })
|
|
keymap("n", "K", "<cmd>Lspsaga hover_doc<CR>", { silent = true })
|
|
keymap("n", "<A-d>", "<cmd>Lspsaga open_floaterm<CR>", { silent = true })
|
|
keymap("n", "<A-d>", "<cmd>Lspsaga open_floaterm lazygit<CR>", { silent = true })
|
|
keymap("t", "<A-d>", [[<C-\><C-n><cmd>Lspsaga close_floaterm<CR>]], { silent = true })
|
|
|
|
-- Comp
|
|
|
|
local cmp = require'cmp'
|
|
|
|
cmp.setup{
|
|
snippet = {
|
|
expand = function(args)
|
|
vim.fn["vsnip#anonymous"](args.body)
|
|
end,
|
|
},
|
|
window = {
|
|
completion = {
|
|
winhighlight = "Normal:Pmenu,FloatBorder:Pmenu,Search:None",
|
|
col_offset = -3,
|
|
side_padding = 0,
|
|
},
|
|
},
|
|
formatting = {
|
|
fields = { "kind", "abbr", "menu" },
|
|
format = function(entry, vim_item)
|
|
local kind = require("lspkind").cmp_format({ mode = "symbol_text", maxwidth = 50 })(entry, vim_item)
|
|
local strings = vim.split(kind.kind, "%s", { trimempty = true })
|
|
kind.kind = " " .. strings[1] .. " "
|
|
|
|
if entry.completion_item.detail then
|
|
kind.menu = ' "'..entry.completion_item.detail..'"'
|
|
end
|
|
|
|
kind.menu = (kind.menu or "").." (" .. strings[2] .. ") "
|
|
|
|
return kind
|
|
end,
|
|
},
|
|
mapping = cmp.mapping.preset.insert({
|
|
['<C-b>'] = cmp.mapping.scroll_docs(-4),
|
|
['<C-f>'] = cmp.mapping.scroll_docs(4),
|
|
['<C-Space>'] = cmp.mapping.complete(),
|
|
['<C-e>'] = cmp.mapping.abort(),
|
|
['<CR>'] = cmp.mapping.confirm({ select = true }),
|
|
}),
|
|
sources = cmp.config.sources({
|
|
{ name = 'nvim_lsp' },
|
|
{ name = 'vsnip' },
|
|
}, {
|
|
{ name = 'buffer' },
|
|
})
|
|
}
|
|
|
|
-- Use buffer source for `/` and `?` (if you enabled `native_menu`, this won't work anymore).
|
|
cmp.setup.cmdline({ '/', '?' }, {
|
|
mapping = cmp.mapping.preset.cmdline(),
|
|
sources = {
|
|
{ name = 'buffer' }
|
|
}
|
|
})
|
|
|
|
-- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore).
|
|
cmp.setup.cmdline(':', {
|
|
mapping = cmp.mapping.preset.cmdline(),
|
|
sources = cmp.config.sources({
|
|
{ name = 'path' }
|
|
}, {
|
|
{ name = 'cmdline' }
|
|
})
|
|
})
|
|
|
|
-- Set up lspconfig.
|
|
local capabilities = require('cmp_nvim_lsp').default_capabilities()
|
|
|
|
-- Mappings.
|
|
-- See `:help vim.diagnostic.*` for documentation on any of the below functions
|
|
local opts = { noremap=true, silent=true }
|
|
vim.keymap.set('n', '<space>e', vim.diagnostic.open_float, opts)
|
|
vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, opts)
|
|
vim.keymap.set('n', ']d', vim.diagnostic.goto_next, opts)
|
|
vim.keymap.set('n', '<space>q', vim.diagnostic.setloclist, opts)
|
|
|
|
-- Use an on_attach function to only map the following keys
|
|
-- after the language server attaches to the current buffer
|
|
local on_attach = function(client, bufnr)
|
|
|
|
require "lsp_signature".on_attach({
|
|
bind = true,
|
|
handler_opts = {
|
|
border = "rounded"
|
|
}
|
|
}, bufnr)
|
|
|
|
-- Enable completion triggered by <c-x><c-o>
|
|
vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc')
|
|
|
|
-- Mappings.
|
|
-- See `:help vim.lsp.*` for documentation on any of the below functions
|
|
local bufopts = { noremap=true, silent=true, buffer=bufnr }
|
|
vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, bufopts)
|
|
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, bufopts)
|
|
vim.keymap.set('n', 'K', vim.lsp.buf.hover, bufopts)
|
|
vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, bufopts)
|
|
vim.keymap.set('n', '<C-k>', vim.lsp.buf.signature_help, bufopts)
|
|
vim.keymap.set('n', '<space>wa', vim.lsp.buf.add_workspace_folder, bufopts)
|
|
vim.keymap.set('n', '<space>wr', vim.lsp.buf.remove_workspace_folder, bufopts)
|
|
vim.keymap.set('n', '<space>wl', function()
|
|
print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
|
|
end, bufopts)
|
|
vim.keymap.set('n', '<space>D', vim.lsp.buf.type_definition, bufopts)
|
|
vim.keymap.set('n', '<space>rn', vim.lsp.buf.rename, bufopts)
|
|
vim.keymap.set('n', '<space>ca', vim.lsp.buf.code_action, bufopts)
|
|
vim.keymap.set('n', 'gr', vim.lsp.buf.references, bufopts)
|
|
vim.keymap.set('n', '<space>gf', function() vim.lsp.buf.format { async = true } end, bufopts)
|
|
end
|
|
|
|
local lsp_flags = {
|
|
-- This is the default in Nvim 0.7+
|
|
debounce_text_changes = 150,
|
|
}
|
|
|
|
require 'andr3.langs.rust'.setup(on_attach, lsp_flags, capabilities)
|
|
require 'andr3.langs.ts'.setup(on_attach, lsp_flags, capabilities)
|
|
require 'andr3.langs.prisma'.setup(on_attach, lsp_flags, capabilities)
|
|
require 'andr3.langs.svelte'.setup(on_attach, lsp_flags, capabilities)
|
|
require 'andr3.langs.ccls'.setup(on_attach, lsp_flags, capabilities)
|
|
require 'andr3.langs.python'.setup(on_attach, lsp_flags, capabilities)
|
|
require 'andr3.langs.bash'.setup(on_attach, lsp_flags, capabilities)
|
|
require 'andr3.langs.zig'.setup(on_attach, lsp_flags, capabilities)
|
|
|