mirror of
https://github.com/nvim-treesitter/nvim-treesitter.git
synced 2026-07-18 11:20:07 -04:00
fix(indents): ignore comment_parsers for indentation
This commit is contained in:
parent
66f33ddd8b
commit
07e07cf303
1 changed files with 20 additions and 2 deletions
|
|
@ -9,6 +9,12 @@ M.avoid_force_reparsing = {
|
||||||
yaml = true,
|
yaml = true,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
M.comment_parsers = {
|
||||||
|
comment = true,
|
||||||
|
jsdoc = true,
|
||||||
|
phpdoc = true,
|
||||||
|
}
|
||||||
|
|
||||||
local function get_first_node_at_line(root, lnum)
|
local function get_first_node_at_line(root, lnum)
|
||||||
local col = vim.fn.indent(lnum)
|
local col = vim.fn.indent(lnum)
|
||||||
return root:descendant_for_range(lnum - 1, col, lnum - 1, col)
|
return root:descendant_for_range(lnum - 1, col, lnum - 1, col)
|
||||||
|
|
@ -70,8 +76,20 @@ function M.get_indent(lnum)
|
||||||
parser:parse()
|
parser:parse()
|
||||||
end
|
end
|
||||||
|
|
||||||
-- get_root_for_position is 0-based.
|
-- Get language tree with smallest range around node that's not a comment parser
|
||||||
local root, _, lang_tree = tsutils.get_root_for_position(lnum - 1, 0, parser)
|
local root, lang_tree
|
||||||
|
parser:for_each_tree(function(tstree, tree)
|
||||||
|
if not tstree or M.comment_parsers[tree:lang()] then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local local_root = tstree:root()
|
||||||
|
if tsutils.is_in_node_range(local_root, lnum - 1, 0) then
|
||||||
|
if not root or tsutils.node_length(root) >= tsutils.node_length(local_root) then
|
||||||
|
root = local_root
|
||||||
|
lang_tree = tree
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
-- Not likely, but just in case...
|
-- Not likely, but just in case...
|
||||||
if not root then
|
if not root then
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue