aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtime/lua/vim/lsp.lua54
-rw-r--r--runtime/lua/vim/lsp/util.lua9
-rw-r--r--test/functional/fixtures/fake-lsp-server.lua37
3 files changed, 30 insertions, 70 deletions
diff --git a/runtime/lua/vim/lsp.lua b/runtime/lua/vim/lsp.lua
index c85d38a50e..117b32dc57 100644
--- a/runtime/lua/vim/lsp.lua
+++ b/runtime/lua/vim/lsp.lua
@@ -369,7 +369,7 @@ do
--- @field offset_encoding "utf-8"|"utf-16"|"utf-32"
---
--- @class CTBufferState
- --- @field uri string uri of the buffer
+ --- @field name string name of the buffer
--- @field lines string[] snapshot of buffer lines from last didChange
--- @field lines_tmp string[]
--- @field pending_changes table[] List of debounced changes in incremental sync mode
@@ -488,12 +488,8 @@ do
if buf_state then
buf_state.refs = buf_state.refs + 1
else
- local uri = vim.uri_from_bufnr(bufnr)
- if not uv.fs_stat(api.nvim_buf_get_name(bufnr)) then
- uri = uri:gsub('^file://', 'buffer://')
- end
buf_state = {
- uri = uri,
+ name = api.nvim_buf_get_name(bufnr),
lines = {},
lines_tmp = {},
pending_changes = {},
@@ -508,26 +504,12 @@ do
end
---@private
- ---@param client table
- ---@param bufnr integer
- ---@return string uri
- function changetracking._get_uri(client, bufnr)
- local state = state_by_group[get_group(client)] or {}
- local buf_state = (state.buffers or {})[bufnr]
- return assert(buf_state.uri, 'Must have an URI set')
- end
-
- ---@private
- ---@param client table
- ---@param bufnr integer
- ---@param uri string
- ---@return string uri
- function changetracking._get_and_set_uri(client, bufnr, uri)
+ function changetracking._get_and_set_name(client, bufnr, name)
local state = state_by_group[get_group(client)] or {}
local buf_state = (state.buffers or {})[bufnr]
- local old_uri = buf_state.uri
- buf_state.uri = uri
- return old_uri
+ local old_name = buf_state.name
+ buf_state.name = name
+ return old_name
end
---@private
@@ -614,7 +596,7 @@ do
{ text = buf_get_full_text(bufnr) },
}
end
- local uri = buf_state.uri
+ local uri = vim.uri_from_bufnr(bufnr)
for _, client in pairs(state.clients) do
if not client.is_stopped() and lsp.buf_is_attached(bufnr, client.id) then
client.notify('textDocument/didChange', {
@@ -727,14 +709,11 @@ local function text_document_did_open_handler(bufnr, client)
return
end
local filetype = nvim_buf_get_option(bufnr, 'filetype')
- local uri = vim.uri_from_bufnr(bufnr)
- if not uv.fs_stat(api.nvim_buf_get_name(bufnr)) then
- uri = uri:gsub('^file://', 'buffer://')
- end
+
local params = {
textDocument = {
version = 0,
- uri = uri,
+ uri = vim.uri_from_bufnr(bufnr),
languageId = client.config.get_language_id(bufnr, filetype),
text = buf_get_full_text(bufnr),
},
@@ -1611,13 +1590,8 @@ local function text_document_did_save_handler(bufnr)
local text = once(buf_get_full_text)
for_each_buffer_client(bufnr, function(client)
local name = api.nvim_buf_get_name(bufnr)
- local old_uri = changetracking._get_and_set_uri(client, bufnr, uri)
- if old_uri and name ~= old_uri then
- client.notify('textDocument/didClose', {
- textDocument = {
- uri = old_uri,
- },
- })
+ local old_name = changetracking._get_and_set_name(client, bufnr, name)
+ if old_name and name ~= old_name then
client.notify('textDocument/didOpen', {
textDocument = {
version = 0,
@@ -1720,12 +1694,8 @@ function lsp.buf_attach_client(bufnr, client_id)
end)
end,
on_detach = function()
+ local params = { textDocument = { uri = uri } }
for_each_buffer_client(bufnr, function(client, _)
- local params = {
- textDocument = {
- uri = changetracking._get_uri(client, bufnr),
- },
- }
changetracking.reset_buf(client, bufnr)
if vim.tbl_get(client.server_capabilities, 'textDocumentSync', 'openClose') then
client.notify('textDocument/didClose', params)
diff --git a/runtime/lua/vim/lsp/util.lua b/runtime/lua/vim/lsp/util.lua
index c9613dc7a7..342fad33c2 100644
--- a/runtime/lua/vim/lsp/util.lua
+++ b/runtime/lua/vim/lsp/util.lua
@@ -2032,12 +2032,7 @@ end
---@returns `TextDocumentIdentifier`
---@see https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocumentIdentifier
function M.make_text_document_params(bufnr)
- bufnr = bufnr or 0
- local uri = vim.uri_from_bufnr(bufnr)
- if not uv.fs_stat(api.nvim_buf_get_name(bufnr)) then
- uri = uri:gsub('^file://', 'buffer://')
- end
- return { uri = uri }
+ return { uri = vim.uri_from_bufnr(bufnr or 0) }
end
--- Create the workspace params
@@ -2070,7 +2065,7 @@ function M.make_formatting_params(options)
insertSpaces = vim.bo.expandtab,
})
return {
- textDocument = M.make_text_document_params(0),
+ textDocument = { uri = vim.uri_from_bufnr(0) },
options = options,
}
end
diff --git a/test/functional/fixtures/fake-lsp-server.lua b/test/functional/fixtures/fake-lsp-server.lua
index 9cc2f6fa27..5fb86d029d 100644
--- a/test/functional/fixtures/fake-lsp-server.lua
+++ b/test/functional/fixtures/fake-lsp-server.lua
@@ -272,7 +272,6 @@ function tests.text_document_save_did_open()
end;
body = function()
notify('start')
- expect_notification('textDocument/didClose')
expect_notification('textDocument/didOpen')
expect_notification('textDocument/didSave')
notify('shutdown')
@@ -293,8 +292,6 @@ function tests.text_document_sync_save_bool()
end;
body = function()
notify('start')
- expect_notification('textDocument/didClose')
- expect_notification('textDocument/didOpen')
expect_notification('textDocument/didSave', {textDocument = { uri = "file://" }})
notify('shutdown')
end;
@@ -316,8 +313,6 @@ function tests.text_document_sync_save_includeText()
end;
body = function()
notify('start')
- expect_notification('textDocument/didClose')
- expect_notification('textDocument/didOpen')
expect_notification('textDocument/didSave', {
textDocument = {
uri = "file://"
@@ -464,7 +459,7 @@ function tests.basic_check_buffer_open()
textDocument = {
languageId = "";
text = table.concat({"testing"; "123"}, "\n") .. '\n';
- uri = "buffer://";
+ uri = "file://";
version = 0;
};
})
@@ -491,13 +486,13 @@ function tests.basic_check_buffer_open_and_change()
textDocument = {
languageId = "";
text = table.concat({"testing"; "123"}, "\n") .. '\n';
- uri = "buffer://";
+ uri = "file://";
version = 0;
};
})
expect_notification('textDocument/didChange', {
textDocument = {
- uri = "buffer://";
+ uri = "file://";
version = 3;
};
contentChanges = {
@@ -527,13 +522,13 @@ function tests.basic_check_buffer_open_and_change_noeol()
textDocument = {
languageId = "";
text = table.concat({"testing"; "123"}, "\n");
- uri = "buffer://";
+ uri = "file://";
version = 0;
};
})
expect_notification('textDocument/didChange', {
textDocument = {
- uri = "buffer://";
+ uri = "file://";
version = 3;
};
contentChanges = {
@@ -562,13 +557,13 @@ function tests.basic_check_buffer_open_and_change_multi()
textDocument = {
languageId = "";
text = table.concat({"testing"; "123"}, "\n") .. '\n';
- uri = "buffer://";
+ uri = "file://";
version = 0;
};
})
expect_notification('textDocument/didChange', {
textDocument = {
- uri = "buffer://";
+ uri = "file://";
version = 3;
};
contentChanges = {
@@ -577,7 +572,7 @@ function tests.basic_check_buffer_open_and_change_multi()
})
expect_notification('textDocument/didChange', {
textDocument = {
- uri = "buffer://";
+ uri = "file://";
version = 4;
};
contentChanges = {
@@ -607,13 +602,13 @@ function tests.basic_check_buffer_open_and_change_multi_and_close()
textDocument = {
languageId = "";
text = table.concat({"testing"; "123"}, "\n") .. '\n';
- uri = "buffer://";
+ uri = "file://";
version = 0;
};
})
expect_notification('textDocument/didChange', {
textDocument = {
- uri = "buffer://";
+ uri = "file://";
version = 3;
};
contentChanges = {
@@ -622,7 +617,7 @@ function tests.basic_check_buffer_open_and_change_multi_and_close()
})
expect_notification('textDocument/didChange', {
textDocument = {
- uri = "buffer://";
+ uri = "file://";
version = 4;
};
contentChanges = {
@@ -631,7 +626,7 @@ function tests.basic_check_buffer_open_and_change_multi_and_close()
})
expect_notification('textDocument/didClose', {
textDocument = {
- uri = "buffer://";
+ uri = "file://";
};
})
expect_notification("finish")
@@ -665,13 +660,13 @@ function tests.basic_check_buffer_open_and_change_incremental()
textDocument = {
languageId = "";
text = table.concat({"testing"; "123"}, "\n") .. '\n';
- uri = "buffer://";
+ uri = "file://";
version = 0;
};
})
expect_notification('textDocument/didChange', {
textDocument = {
- uri = "buffer://";
+ uri = "file://";
version = 3;
};
contentChanges = {
@@ -708,13 +703,13 @@ function tests.basic_check_buffer_open_and_change_incremental_editing()
textDocument = {
languageId = "";
text = table.concat({"testing"; "123"}, "\n");
- uri = "buffer://";
+ uri = "file://";
version = 0;
};
})
expect_notification('textDocument/didChange', {
textDocument = {
- uri = "buffer://";
+ uri = "file://";
version = 3;
};
contentChanges = {