Skip to content

Commit e91c585

Browse files
authored
fix: range containment check (e.g. weird @parameter.inner behavior) (#840)
Fixes #832
1 parent 0d7c800 commit e91c585

File tree

3 files changed

+17
-4
lines changed

3 files changed

+17
-4
lines changed

lua/nvim-treesitter-textobjects/shared.lua

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,7 @@ function M.find_best_range(bufnr, capture_string, query_group, filter_predicate,
211211
return best
212212
end
213213

214+
-- TODO: replace with `vim.Range:has(vim.Pos)` when we drop support for nvim 0.11
214215
---@param range Range4
215216
---@param row integer
216217
---@param col integer
@@ -231,11 +232,18 @@ local function is_in_range(range, row, col)
231232
return is_in_rows and is_after_start_col_if_needed and is_before_end_col_if_needed
232233
end
233234

234-
---@param range1 Range4
235-
---@param range2 Range4
235+
-- TODO: replace with `vim.Range:has(vim.Range)` when we drop support for 0.11
236+
---@param outer Range4
237+
---@param inner Range4
236238
---@return boolean
237-
local function contains(range1, range2)
238-
return is_in_range(range1, range2[1], range2[2]) and is_in_range(range1, range2[3], range2[4])
239+
local function contains(outer, inner)
240+
local start_row_o, start_col_o, end_row_o, end_col_o = unpack(outer) ---@type integer, integer, integer, integer
241+
local start_row_i, start_col_i, end_row_i, end_col_i = unpack(inner) ---@type integer, integer, integer, integer
242+
243+
return start_row_o <= start_row_i
244+
and start_col_o <= start_col_i
245+
and end_row_o >= end_row_i
246+
and end_col_o >= end_col_i
239247
end
240248

241249
---@param range Range6

tests/select/python/selection_mode.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,5 @@ def __init__(self, *arg):
66
my_list.append(arg_)
77

88
self.my_list = my_list
9+
10+
str.join(' ', map(lambda x: x + x, ['foo', 'bar', 'baz']))

tests/select/python_spec.lua

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ describe('command equality Python:', function()
2525
run:compare_cmds('aligned_indent.py', { row = 1, col = 0, cmds = { 'dfn', 'd;' } })
2626
-- select using move
2727
run:compare_cmds('aligned_indent.py', { row = 1, col = 0, cmds = { 'd]a', 'v]ad', 'c]a' } })
28+
29+
-- test correct @parameter.inner scoping
30+
run:compare_cmds('selection_mode.py', { row = 10, col = 22, cmds = { 'dia', 'df)' } })
2831
run:compare_cmds(
2932
'selection_mode.py',
3033
{ row = 2, col = 4, cmds = { 'dam', 'dVam', 'vamd', 'Vamd' } }

0 commit comments

Comments
 (0)