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).
The analysis server snapshot is included in the bin/snapshots
folder of the Dart SDK. Pass the --lsp
flag to start the server in LSP mode:
dart bin/snapshots/analysis_server.dart.snapshot --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.
onlyAnalyzeProjectsWithOpenFiles
: When set to true
, analysis will only be performed for projects that have open files rather than the root workspace folder. Defaults to false
.suggestFromUnimportedLibraries
: When set to false
, completion will not include synbols that are not already imported into the current file. Defaults to true
, though the client must additionally support workspace/applyEdit
for these completions to be included.closingLabels
: When set to true
, dart/textDocument/publishClosingLabels
notifications will be sent with information to render editor closing labels.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 | ✅ | ✅ | ✅ | ✅ | |
window/showMessage | ✅ | ||||
window/showMessageRequest | |||||
window/logMessage | ✅ | ||||
telemetry/event | |||||
client/registerCapability | ✅ | ✅ | ✅ | ✅ | |
client/unregisterCapability | (unused, capabilities don't change currently) | ||||
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 | ✅ | ✅ | ✅ | ✅ | |
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 | ✅ | ✅ | ✅ | ✅ |
The following custom methods are also provided by the Dart LSP server:
Direction: Client -> Server Params: None Returns: { port: number }
Starts the analzyer diagnostics server (if not already running) and returns the port number it's listening on.
Direction: Client -> Server Params: TextDocumentPositionParams
Returns: Location | null
Returns the location of the super definition of the class or method at the provided position or null
if there isn't one.
Direction: Server -> Client Params: { isAnalyzing: boolean }
Notifies the client when analysis starts/completes.
Direction: Server -> Client Params: { uri: string, abels: { label: string, range: Range }[] }
Notifies the client when closing label information is available (or updated) for a file.