aboutsummaryrefslogtreecommitdiff
path: root/test/functional/plugin/lsp_spec.lua
diff options
context:
space:
mode:
authorTristan Knight <admin@snappeh.com>2024-09-05 08:23:11 +0100
committerGitHub <noreply@github.com>2024-09-05 00:23:11 -0700
commit882a450a2982caa05fcbbe90e94246a8c2b45b8b (patch)
treee42f1e5ea42016e4aca4afbfc641592dd8ded98b /test/functional/plugin/lsp_spec.lua
parent220b8aa6fe4be4e8f13600a5d7ae19fef79ba53a (diff)
downloadrneovim-882a450a2982caa05fcbbe90e94246a8c2b45b8b.tar.gz
rneovim-882a450a2982caa05fcbbe90e94246a8c2b45b8b.tar.bz2
rneovim-882a450a2982caa05fcbbe90e94246a8c2b45b8b.zip
fix(lsp): handle locations exceeding line length #30253
Problem: LSP spec [states](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#position) that "if the character value is greater than the line length it defaults back to the line length", but `locations_to_items` fails in that case. Solution: Adjust locations_to_items to follow the spec. closes #28281
Diffstat (limited to 'test/functional/plugin/lsp_spec.lua')
-rw-r--r--test/functional/plugin/lsp_spec.lua36
1 files changed, 23 insertions, 13 deletions
diff --git a/test/functional/plugin/lsp_spec.lua b/test/functional/plugin/lsp_spec.lua
index 1347ea9745..1d43b5d449 100644
--- a/test/functional/plugin/lsp_spec.lua
+++ b/test/functional/plugin/lsp_spec.lua
@@ -2673,7 +2673,7 @@ describe('LSP', function()
describe('lsp.util.locations_to_items', function()
it('Convert Location[] to items', function()
- local expected = {
+ local expected_template = {
{
filename = '/fake/uri',
lnum = 1,
@@ -2681,7 +2681,12 @@ describe('LSP', function()
col = 3,
end_col = 4,
text = 'testing',
- user_data = {
+ user_data = {},
+ },
+ }
+ local test_params = {
+ {
+ {
uri = 'file:///fake/uri',
range = {
start = { line = 0, character = 2 },
@@ -2689,23 +2694,28 @@ describe('LSP', function()
},
},
},
- }
- local actual = exec_lua(function()
- local bufnr = vim.uri_to_bufnr('file:///fake/uri')
- local lines = { 'testing', '123' }
- vim.api.nvim_buf_set_lines(bufnr, 0, 1, false, lines)
- local locations = {
+ {
{
uri = 'file:///fake/uri',
range = {
start = { line = 0, character = 2 },
- ['end'] = { line = 1, character = 3 },
+ -- LSP spec: if character > line length, default to the line length.
+ ['end'] = { line = 1, character = 10000 },
},
},
- }
- return vim.lsp.util.locations_to_items(locations, 'utf-16')
- end)
- eq(expected, actual)
+ },
+ }
+ for _, params in ipairs(test_params) do
+ local actual = exec_lua(function(params0)
+ local bufnr = vim.uri_to_bufnr('file:///fake/uri')
+ local lines = { 'testing', '123' }
+ vim.api.nvim_buf_set_lines(bufnr, 0, 1, false, lines)
+ return vim.lsp.util.locations_to_items(params0, 'utf-16')
+ end, params)
+ local expected = vim.deepcopy(expected_template)
+ expected[1].user_data = params[1]
+ eq(expected, actual)
+ end
end)
it('Convert LocationLink[] to items', function()