fix: lsp.enable() don't work correctly inside FileType event #37538

Problem:
Two cases lsp.enable() won't work in the first FileType event
1. lsp.enable luals inside FileType or ftplugin/lua.lua, then:
```
nvim a.lua
```

2. lsp.enable luals inside FileType or ftplugin/lua.lua, then:
```
nvim -> :edit a.lua -> :mksession! | restart +qa! so Session.vim
```

Solution:
Currently `v:vim_did_enter` is used to detected two cases:
1. "maunally enabled" (lsp.enable() or `:lsp enable`)
2. "inside FileType event"

To detect 2. correctly we use did_filetype().
This commit is contained in:
phanium
2026-01-28 06:59:36 +08:00
committed by GitHub
parent 6291256868
commit fd45bc8cab
2 changed files with 35 additions and 1 deletions

View File

@@ -590,7 +590,7 @@ function lsp.enable(name, enable)
-- Ensure any pre-existing buffers start/stop their LSP clients.
if enable ~= false then
if vim.v.vim_did_enter == 1 and next(lsp._enabled_configs) then
if (vim.v.vim_did_enter == 1 or vim.fn.did_filetype() == 1) and next(lsp._enabled_configs) then
vim.cmd.doautoall('nvim.lsp.enable FileType')
end
else