From a15e27fbcf6046ff0dc4ac710cc65c3f5cf46679 Mon Sep 17 00:00:00 2001 From: Luis Calle <53507599+TheLeoP@users.noreply.github.com> Date: Thu, 9 Apr 2026 10:01:28 -0500 Subject: [PATCH] fix(vim.pos): Range:intersect() drops `buf` #38898 new() only supports nargs=5 or nargs=2, but this was passing 4 args. (cherry picked from commit 24811c0a1410703d78e77c6a3233ff85f87964ef) --- runtime/lua/vim/range.lua | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/runtime/lua/vim/range.lua b/runtime/lua/vim/range.lua index 27de39427b..03ad1b3c52 100644 --- a/runtime/lua/vim/range.lua +++ b/runtime/lua/vim/range.lua @@ -70,8 +70,8 @@ function Range.__index(pos, key) end ---@package ----@overload fun(self: vim.Range, start: vim.Pos, end_: vim.Pos): vim.Range ----@overload fun(self: vim.Range, buf: integer, start_row: integer, start_col: integer, end_row: integer, end_col: integer): vim.Range +---@overload fun(start: vim.Pos, end_: vim.Pos): vim.Range +---@overload fun(buf: integer, start_row: integer, start_col: integer, end_row: integer, end_col: integer): vim.Range function Range.new(...) ---@type integer, integer, integer, integer, integer|nil local start_row, start_col, end_row, end_col, buf @@ -223,6 +223,10 @@ end ---@return vim.Range? range that is present inside both range and `r2`. --- `nil` if such range does not exist. function Range:intersect(r2) + if self.buf ~= r2.buf then + return nil + end + local r1_inclusive_end_row, r1_inclusive_end_col = to_inclusive_pos(self.buf, self.end_row, self.end_col) local r2_inclusive_end_row, r2_inclusive_end_col = @@ -237,7 +241,7 @@ function Range:intersect(r2) local rs = cmp_pos(self.start_row, self.start_col, r2.start_row, r2.start_col) ~= 1 and r2 or self local re = cmp_pos(self.end_row, self.end_col, r2.end_row, r2.end_col) ~= -1 and r2 or self - return Range.new(rs.start_row, rs.start_col, re.end_row, re.end_col) + return Range.new(self.buf, rs.start_row, rs.start_col, re.end_row, re.end_col) end --- Converts |vim.Range| to `lsp.Range`.