Skip to content

Fix: reattach LSP on file rename/reload - #527

Merged
sidlatau merged 1 commit into
nvim-flutter:mainfrom
whiteseppel:fix/reattach-lsp-on-reload
Aug 6, 2026
Merged

sidlatau merged 1 commit into
nvim-flutter:mainfrom
whiteseppel:fix/reattach-lsp-on-reload

Conversation

@whiteseppel

@whiteseppel whiteseppel commented Jul 27, 2026 •

Copy link
Copy Markdown
Contributor

Fixes #484. The dartls client is detached whenever the file is reread (:e), renamed or edited outside from Neovim. The ftplugin is resourced on every FileType event, but the flutter_tools_did_ftplugin guard prevents the lsp from attaching to the buffer.

Fix
Moving attach() above the guard lets the lsp attach to the buffer again.

Testing
Open a .dart file and check :checkhealth vim.lsp to see dartls to the current buffer. Afterwards, edit the file or rename it. When checking checkhealth vim.lsp again, you should see the lsp again attached to the buffer.

Caveat
Taking the top line comment of the file into account would mean that users setting vim.b.flutter_tools_did_ftplugin = 1 could not suppress the lsp attach. Currently not sure if this is a big concern.

@sidlatau
sidlatau merged commit 2450aa2 into nvim-flutter:main Aug 6, 2026
@sidlatau

sidlatau commented Aug 6, 2026

Copy link
Copy Markdown
Collaborator

Thanks, @whiteseppel!

sidlatau added a commit that referenced this pull request Aug 6, 2026
`M.attach()` validates the path of the current buffer, but
`vim.lsp.start()` was called without `opts`, so the client attached to
whichever buffer happened to be current when the callback ran. With
`flutter_lookup_cmd` configured that callback is scheduled off a job's
output, so switching buffers right after opening a dart file attached
dartls to the wrong buffer and left the dart file unattached.

Pass the captured `bufnr` through, and bail out if the buffer is gone by
the time the callback runs.

Also cache the paths resolved via `flutter_lookup_cmd`, matching the
`fvm` and `flutter_path` branches. That branch was the only one leaving
`cached_paths` unset, so it re-ran the external lookup command on every
`attach()` - now once per `FileType` event since #527.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG] LSP stops when a file with an active buffer is renamed.

2 participants