Language Server Protocol (LSP) support is available in the Dart analysis server from version 2.2.0 of the SDK (which was included in version 1.2.1 of Flutter). The supported messages are detailed below (for the version of the SDK that matches this README).
Run the server from source to ensure you‘re running code that matches the status shown below. If you don’t have a locally built SDK then a recent nightly should do. Pass the --lsp
flag to start the server in LSP mode:
dart pkg/analysis_server/bin/server.dart --lsp
Note: In LSP the client makes the first request so there is no obvious confirmation that the server is working correctly until the client sends an initialize
request. Unlike standard JSON RPC, LSP requires that headers are sent.
Below is a list of LSP methods and their implementation status.
Method | Basic Impl | Capabilities | Tests | Tested Client | Notes |
---|---|---|---|---|---|
initialize | ✅ | ✅ | ✅ | ✅ | trace and other options NYI |
initialized | ✅ | ✅ | ✅ | ✅ | |
shutdown | ✅ | ✅ | ✅ | ✅ | supported but does nothing |
exit | |||||
$/cancelRequest | ignored (unsupported) | ||||
window/showMessage | ✅ | ||||
window/showMessageRequest | |||||
window/logMessage | ✅ | ||||
telemetry/event | |||||
client/registerCapability | unused, but should be used for DocumentSelector at least | ||||
client/unregisterCapability | |||||
workspace/workspaceFolders | |||||
workspace/didChangeWorkspaceFolders | ✅ | ✅ | ✅ | ✅ | |
workspace/configuration | |||||
workspace/didChangeWatchedFiles | unused, server does own watching | ||||
workspace/symbol | ✅ | ✅ | ✅ | ✅ | |
workspace/executeCommand | ✅ | ✅ | ✅ | ✅ | |
workspace/applyEdit | ✅ | ✅ | ✅ | ✅ | |
textDocument/didOpen | ✅ | ✅ | ✅ | ✅ | |
textDocument/didChange | ✅ | ✅ | ✅ | ✅ | |
textDocument/willSave | |||||
textDocument/willSaveWaitUntil | |||||
textDocument/didClose | ✅ | ✅ | ✅ | ✅ | |
textDocument/publishDiagnostics | ✅ | ✅ | ✅ | ✅ | |
textDocument/completion | ✅ | ✅ | ✅ | ✅ | |
completionItem/resolve | not required | ||||
textDocument/hover | ✅ | ✅ | ✅ | ✅ | |
textDocument/signatureHelp | ✅ | ✅ | ✅ | ✅ | trigger character handling outstanding |
textDocument/declaration | |||||
textDocument/definition | ✅ | ✅ | ✅ | ✅ | |
textDocument/typeDefinition | |||||
textDocument/implementation | |||||
textDocument/references | ✅ | ✅ | ✅ | ✅ | |
textDocument/documentHighlight | ✅ | ✅ | ✅ | ✅ | |
textDocument/documentSymbol | ✅ | ✅ | ✅ | ✅ | |
textDocument/codeAction (sortMembers) | ✅ | ✅ | ✅ | ✅ | |
textDocument/codeAction (organiseImports) | ✅ | ✅ | ✅ | ✅ | |
textDocument/codeAction (refactors) | |||||
textDocument/codeAction (assists) | ✅ | ✅ | ✅ | ✅ | Only if the client advertises codeActionLiteralSupport with Refactor |
textDocument/codeAction (fixes) | ✅ | ✅ | ✅ | ✅ | Only if the client advertises codeActionLiteralSupport with QuickFix |
textDocument/codeLens | |||||
codeLens/resolve | |||||
textDocument/documentLink | |||||
documentLink/resolve | |||||
textDocument/documentColor | |||||
textDocument/colorPresentation | |||||
textDocument/formatting | ✅ | ✅ | ✅ | ✅ | |
textDocument/rangeFormatting | requires support from dart_style? | ||||
textDocument/onTypeFormatting | ✅ | ✅ | ✅ | ✅ | |
textDocument/rename | ✅ | ✅ | ✅ | ✅ | |
textDocument/prepareRename | |||||
textDocument/foldingRange | ✅ | ✅ | ✅ | ✅ |