Files
dotfiles/nvim/lua/plugins/language_support.lua

79 lines
2.9 KiB
Lua

-- Treesitter
local rocks_path = os.getenv('HOME') .. "/.luarocks/lib/luarocks/rocks-5.1"
-- Pick up the installed parsers in the install dir
for _, parser_dir in ipairs(vim.fn.glob(rocks_path .. '/tree-sitter-*/*/', true, true)) do
vim.opt.runtimepath:prepend(parser_dir)
end
-- Start treesitter parsing on the current buffer
vim.api.nvim_create_autocmd("FileType", {
callback = function(ev)
-- Use pcall to prevent blocking errors
pcall(vim.treesitter.start, ev.buf)
end
})
vim.diagnostic.config({
underline = true,
virtual_text = {
prefix = "",
source = 'always',
},
severity_sort = true,
float = {
source = 'always'
}
})
-- LSP
-- TODO: test out removing the lspconfig plugin and using the built-in enablement
vim.pack.add({
'https://github.com/neovim/nvim-lspconfig',
})
-- Auto set keymaps and other settings on LSP attach
vim.api.nvim_create_autocmd('LspAttach', {
group = vim.api.nvim_create_augroup('my.lsp', {}),
callback = function(args)
-- Native completion
-- local client = assert(vim.lsp.get_client_by_id(args.data.client_id))
-- local chars = {}; for i = 32, 126 do table.insert(chars, string.char(i)) end
-- client.server_capabilities.completionProvider.triggerCharacters = chars
--
-- vim.lsp.completion.enable(true, args.data.client_id, args.buf, {
-- autotrigger = true,
-- convert = function(item)
-- local abbr = item.label
-- abbr = abbr:gsub("%b()", ""):gsub("%b{}", "")
-- abbr = abbr:match("[%w_.]+.*") or abbr
-- abbr = #abbr > 20 and abbr:sub(1, 19) .. "..." or abbr
--
-- return { abbr = abbr }
-- end,
-- })
-- Keyboard Mappings
local bufnr = args.buf
local bufopts = { noremap = true, silent = true, buffer = bufnr }
vim.keymap.set('n', '<C-[>', vim.diagnostic.goto_prev, bufopts)
vim.keymap.set('n', '<C-]>', vim.diagnostic.goto_next, bufopts)
vim.keymap.set('n', 'ga', vim.lsp.buf.code_action, bufopts)
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', 'gs', vim.lsp.buf.signature_help, bufopts)
vim.keymap.set('n', 'gr', vim.lsp.buf.references, bufopts)
vim.keymap.set('n', '<leader>D', vim.lsp.buf.type_definition, bufopts)
vim.keymap.set('n', '<leader>for', function() vim.lsp.buf.format { async = true } end, bufopts)
vim.keymap.set('n', '<leader>r', vim.lsp.buf.rename, bufopts)
vim.keymap.set('i', '<c-space>', vim.lsp.completion.get, bufopts)
end,
})
-- Enable LSP engines
-- vim.lsp.enable('clangd')
vim.lsp.enable('gdscript')