mirror of
https://github.com/neovim/neovim.git
synced 2025-10-21 09:12:07 +00:00
fix(lsp): use line start/end for visual line selection (#22632)
Fixes https://github.com/neovim/neovim/issues/22629
This commit is contained in:

committed by
GitHub

parent
314f20a44f
commit
d15abd1be4
@@ -118,8 +118,10 @@ function M.completion(context)
|
||||
end
|
||||
|
||||
---@private
|
||||
---@param bufnr integer
|
||||
---@param mode "v"|"V"
|
||||
---@return table {start={row, col}, end={row, col}} using (1, 0) indexing
|
||||
local function range_from_selection()
|
||||
local function range_from_selection(bufnr, mode)
|
||||
-- TODO: Use `vim.region()` instead https://github.com/neovim/neovim/pull/13896
|
||||
|
||||
-- [bufnum, lnum, col, off]; both row and column 1-indexed
|
||||
@@ -138,6 +140,11 @@ local function range_from_selection()
|
||||
start_row, end_row = end_row, start_row
|
||||
start_col, end_col = end_col, start_col
|
||||
end
|
||||
if mode == 'V' then
|
||||
start_col = 1
|
||||
local lines = api.nvim_buf_get_lines(bufnr, end_row - 1, end_row, true)
|
||||
end_col = #lines[1]
|
||||
end
|
||||
return {
|
||||
['start'] = { start_row, start_col - 1 },
|
||||
['end'] = { end_row, end_col - 1 },
|
||||
@@ -200,7 +207,7 @@ function M.format(options)
|
||||
local mode = api.nvim_get_mode().mode
|
||||
local range = options.range
|
||||
if not range and mode == 'v' or mode == 'V' then
|
||||
range = range_from_selection()
|
||||
range = range_from_selection(bufnr, mode)
|
||||
end
|
||||
local method = range and 'textDocument/rangeFormatting' or 'textDocument/formatting'
|
||||
|
||||
@@ -772,7 +779,7 @@ function M.code_action(options)
|
||||
local end_ = assert(options.range['end'], 'range must have a `end` property')
|
||||
params = util.make_given_range_params(start, end_)
|
||||
elseif mode == 'v' or mode == 'V' then
|
||||
local range = range_from_selection()
|
||||
local range = range_from_selection(0, mode)
|
||||
params = util.make_given_range_params(range.start, range['end'])
|
||||
else
|
||||
params = util.make_range_params()
|
||||
|
Reference in New Issue
Block a user