feat(treesitter): incremental selection

Co-authored-by: György Andorka <gyorgy.andorka@protonmail.com>
This commit is contained in:
altermo
2025-12-16 13:03:20 +01:00
committed by Christian Clason
parent e8e694d837
commit 72d3a57f27
7 changed files with 975 additions and 12 deletions

View File

@@ -221,14 +221,6 @@ do
vim.lsp.buf.type_definition()
end, { desc = 'vim.lsp.buf.type_definition()' })
vim.keymap.set({ 'x', 'o' }, 'an', function()
vim.lsp.buf.selection_range(vim.v.count1)
end, { desc = 'vim.lsp.buf.selection_range(vim.v.count1)' })
vim.keymap.set({ 'x', 'o' }, 'in', function()
vim.lsp.buf.selection_range(-vim.v.count1)
end, { desc = 'vim.lsp.buf.selection_range(-vim.v.count1)' })
vim.keymap.set('n', 'gO', function()
vim.lsp.buf.document_symbol()
end, { desc = 'vim.lsp.buf.document_symbol()' })
@@ -452,6 +444,33 @@ do
return 'g@l'
end, { expr = true, desc = 'Add empty line below cursor' })
end
--- incremental treesitter selection mappings (+ lsp fallback)
do
vim.keymap.set({ 'x' }, '[n', function()
require 'vim.treesitter._select'.select_prev(vim.v.count1)
end, { desc = 'Select previous treesitter node' })
vim.keymap.set({ 'x' }, ']n', function()
require 'vim.treesitter._select'.select_next(vim.v.count1)
end, { desc = 'Select next treesitter node' })
vim.keymap.set({ 'x', 'o' }, 'an', 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' }, 'in', 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' })
end
end
--- Default menus