aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathias Fußenegger <mfussenegger@users.noreply.github.com>2023-03-11 14:50:14 +0100
committerGitHub <noreply@github.com>2023-03-11 14:50:14 +0100
commit23dc2a59b6e13b0dbab47c6c64ac5a55095b258b (patch)
tree13783c87ded36d93d8fb5d8027fb7af91172dc16
parent865d8d4720ca72de1c385773ca4c597f3642874c (diff)
downloadrneovim-23dc2a59b6e13b0dbab47c6c64ac5a55095b258b.tar.gz
rneovim-23dc2a59b6e13b0dbab47c6c64ac5a55095b258b.tar.bz2
rneovim-23dc2a59b6e13b0dbab47c6c64ac5a55095b258b.zip
fix(lsp): send didClose on buffer rename (#22623)
Subset of https://github.com/neovim/neovim/pull/22407 that was reverted in https://github.com/neovim/neovim/pull/22604 If a buffer is renamed sending `didClose` for the old buffer helps ensure the language server doesn't keep a stale document in memory.
-rw-r--r--runtime/lua/vim/lsp.lua6
-rw-r--r--test/functional/fixtures/fake-lsp-server.lua1
2 files changed, 7 insertions, 0 deletions
diff --git a/runtime/lua/vim/lsp.lua b/runtime/lua/vim/lsp.lua
index 117b32dc57..1896543da3 100644
--- a/runtime/lua/vim/lsp.lua
+++ b/runtime/lua/vim/lsp.lua
@@ -1,3 +1,4 @@
+---@diagnostic disable: invisible
local default_handlers = require('vim.lsp.handlers')
local log = require('vim.lsp.log')
local lsp_rpc = require('vim.lsp.rpc')
@@ -1592,6 +1593,11 @@ local function text_document_did_save_handler(bufnr)
local name = api.nvim_buf_get_name(bufnr)
local old_name = changetracking._get_and_set_name(client, bufnr, name)
if old_name and name ~= old_name then
+ client.notify('textDocument/didClose', {
+ textDocument = {
+ uri = vim.uri_from_fname(old_name),
+ },
+ })
client.notify('textDocument/didOpen', {
textDocument = {
version = 0,
diff --git a/test/functional/fixtures/fake-lsp-server.lua b/test/functional/fixtures/fake-lsp-server.lua
index 5fb86d029d..001cd5770a 100644
--- a/test/functional/fixtures/fake-lsp-server.lua
+++ b/test/functional/fixtures/fake-lsp-server.lua
@@ -272,6 +272,7 @@ 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')