101 lines
2.8 KiB
Lua
101 lines
2.8 KiB
Lua
vim.api.nvim_create_autocmd('PackChanged', {
|
|
callback = function(ev)
|
|
local name, kind = ev.data.spec.name, ev.data.kind
|
|
if name == 'nvim-treesitter' and kind == 'update' then
|
|
if not ev.data.active then vim.cmd.packadd('nvim-treesitter') end
|
|
vim.cmd(':TSUpdate')
|
|
end
|
|
end
|
|
})
|
|
|
|
vim.pack.add(
|
|
{ { src = "https://github.com/nvim-treesitter/nvim-treesitter", version = "main" } }
|
|
)
|
|
|
|
local ts = require('nvim-treesitter')
|
|
-- require('nvim-treesitter.install').prefer_git = true
|
|
|
|
vim.api.nvim_create_autocmd('User', {
|
|
pattern = 'TSUpdate',
|
|
callback = function()
|
|
require('nvim-treesitter.parsers').spade = {
|
|
install_info = {
|
|
path = "~/coding-projects/tree-sitter-spade/", -- local path or git repo
|
|
generate = true,
|
|
-- optional entries:
|
|
generate_requires_npm = false, -- if stand-alone parser without npm dependencies
|
|
queries = "queries/nvim"
|
|
},
|
|
filetype = "spade"
|
|
}
|
|
end
|
|
})
|
|
|
|
ts.setup {
|
|
-- Directory to install parsers and queries to (prepended to `runtimepath` to have priority)
|
|
install_dir = vim.fn.stdpath('data') .. '/site',
|
|
highlight = {
|
|
enable = true,
|
|
additional_vim_regex_highlighting = false,
|
|
},
|
|
indent = { enable = false },
|
|
}
|
|
|
|
|
|
local languages =
|
|
{
|
|
"bash",
|
|
"c",
|
|
"diff",
|
|
"html",
|
|
"javascript",
|
|
"json",
|
|
"lua",
|
|
"markdown",
|
|
"markdown_inline",
|
|
"python",
|
|
"query",
|
|
"regex",
|
|
"rust",
|
|
"toml",
|
|
"vim",
|
|
"vimdoc",
|
|
"yaml",
|
|
"wgsl",
|
|
"spade"
|
|
}
|
|
|
|
ts.install(languages):wait(300000)
|
|
|
|
for _, lang in pairs(languages) do
|
|
vim.api.nvim_create_autocmd('FileType', {
|
|
pattern = { lang },
|
|
callback = function() vim.treesitter.start() end,
|
|
})
|
|
end
|
|
|
|
-- Incremental selection keybindings
|
|
vim.keymap.set({ 'x' }, '<c-p>', function()
|
|
require 'vim.treesitter._select'.select_prev(vim.v.count1)
|
|
end, { desc = 'Select previous treesitter node' })
|
|
|
|
vim.keymap.set({ 'x' }, '<c-n>', function()
|
|
require 'vim.treesitter._select'.select_next(vim.v.count1)
|
|
end, { desc = 'Select next treesitter node' })
|
|
|
|
vim.keymap.set({ 'x', 'o' }, 'v', function()
|
|
if vim.treesitter.get_parser(nil, nil, { error = false }) then
|
|
require 'vim.treesitter._select'.select_parent(vim.v.count1)
|
|
else
|
|
vim.lsp.buf.selection_range(vim.v.count1)
|
|
end
|
|
end, { desc = 'Select parent treesitter node or outer incremental lsp selections' })
|
|
|
|
vim.keymap.set({ 'x', 'o' }, 'V', function()
|
|
if vim.treesitter.get_parser(nil, nil, { error = false }) then
|
|
require 'vim.treesitter._select'.select_child(vim.v.count1)
|
|
else
|
|
vim.lsp.buf.selection_range(-vim.v.count1)
|
|
end
|
|
end, { desc = 'Select child treesitter node or inner incremental lsp selections' })
|