Skip to content

Commit c992e72

Browse files
committed
fix(shared) better inner parameter selection
The logic of including a point in a range needs `-1` end_col offset only if the point is from the cursor position but not from the end of another range. Fixes nvim-treesitter#700
1 parent aad2c8e commit c992e72

File tree

1 file changed

+11
-11
lines changed

1 file changed

+11
-11
lines changed

lua/nvim-treesitter-textobjects/shared.lua

+11-11
Original file line numberDiff line numberDiff line change
@@ -224,21 +224,21 @@ end
224224
---@param range Range4
225225
---@param row integer
226226
---@param col integer
227+
---@param end_col_offset integer?
227228
---@return boolean
228-
local function is_in_range(range, row, col)
229+
local function is_in_range(range, row, col, end_col_offset)
229230
local start_row, start_col, end_row, end_col = unpack(range) ---@type integer, integer, integer, integer
230-
end_col = end_col - 1
231+
end_col_offset = end_col_offset or 0
231232

232-
local is_in_rows = start_row <= row and end_row >= row
233-
local is_after_start_col_if_needed = true
234-
if start_row == row then
235-
is_after_start_col_if_needed = col >= start_col
233+
if start_row > row or end_row < row then
234+
return false
236235
end
237-
local is_before_end_col_if_needed = true
238-
if end_row == row then
239-
is_before_end_col_if_needed = col <= end_col
236+
237+
if start_row ~= row or col < start_col then
238+
return false
240239
end
241-
return is_in_rows and is_after_start_col_if_needed and is_before_end_col_if_needed
240+
241+
return end_row == row and col <= end_col + end_col_offset
242242
end
243243

244244
---@param range1 Range4
@@ -276,7 +276,7 @@ local function best_range_at_point(ranges, row, col, opts)
276276
local lookbehind_earliest_start ---@type integer
277277

278278
for _, range in pairs(ranges) do
279-
if range and is_in_range(M.torange4(range), row, col) then
279+
if range and is_in_range(M.torange4(range), row, col, -1) then
280280
local length = range[6] - range[3]
281281
if not range_length or length < range_length then
282282
smallest_range = range

0 commit comments

Comments
 (0)