mirror of
https://github.com/chenasraf/vim-matchup.git
synced 2026-05-18 01:38:57 +00:00
tree-sitter: ignore matches in inner scopes
Previously, placing the cursor on line 1 would highlight every elif and else in the whole block of code. % would jump to line 4, then % from there would cycle between lines 2, 4 and 6. 1 if noice: 2 if yeah: 3 pass 4 elif no: 5 pass 6 else: 7 pass 8 elif blah: 9 pass 10 else: 11 pass With the change, which I think the code had contemplated given there was already an unused `M.containing_scope(node, bufnr, info.key)` call, % will only move between ifs and elses that are in the same `@scope.if_`, and not to any inner scopes. Hence the example will have two mutually exclusive %-cycles: [1, 8, 10] and [2, 4, 6].
This commit is contained in:
@@ -248,13 +248,14 @@ function M.get_matching(delim, down, bufnr)
|
||||
and (row >= info.search_range[1]
|
||||
and row <= info.search_range[3]) then
|
||||
|
||||
local scope = M.containing_scope(node, bufnr, info.key)
|
||||
local target_scope = M.containing_scope(node, bufnr, info.key)
|
||||
if info.scope == target_scope then
|
||||
local text = ts_utils.get_node_text(node, bufnr)[1]
|
||||
table.insert(matches, {text, row + 1, col + 1})
|
||||
|
||||
local text = ts_utils.get_node_text(node, bufnr)[1]
|
||||
table.insert(matches, {text, row + 1, col + 1})
|
||||
|
||||
if side == 'close' then
|
||||
got_close = true
|
||||
if side == 'close' then
|
||||
got_close = true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user