Hi, rust-analyzer team
I'm developing a custom LSP client and trying to get Rust Analyzer to return "Import all missing items"
via a source.fixAll
code action.
In my initialize
request, I clearly declare support for source.fixAll
like this:
"codeAction": {
"codeActionLiteralSupport": {
"codeActionKind": {
"valueSet": [
"", "quickfix", "refactor", "refactor.extract", "refactor.inline",
"refactor.rewrite", "source", "source.organizeImports", "source.fixAll"
]
}
},
"dataSupport": true,
"resolveSupport": { "properties": ["edit"] }
}
However, the initialize
response from rust-analyzer does not list "source.fixAll"
under codeActionProvider.codeActionKinds
ā it only includes:
"codeActionProvider": {
"codeActionKinds": [
"", "quickfix", "refactor", "refactor.extract", "refactor.inline", "refactor.rewrite"
],
"resolveProvider": true
}
Because of this, textDocument/codeAction
with only = ["source.fixAll"]
returns nothing, even when unresolved imports are present.
My question is: under what condition does rust-analyzer omit source.fixAll
in its initialize
response, even though the client declared full support for it?
is there another capability or constraint Iām missing?
Thanks!
Client capabilities (initialize request):
{"jsonrpc":"2.0","method":"initialize","params":{"capabilities":{"experimental":{"commands":{"commands":["rust-analyzer.runSingle","rust-analyzer.debugSingle"]},"serverStatusNotification":true},"textDocument":{"callHierarchy":{"dynamicRegistration":true},"codeAction":{"codeActionLiteralSupport":{"codeActionKind":{"valueSet":["","quickfix","refactor","refactor.extract","refactor.inline","refactor.rewrite","source","source.organizeImports","quickassist","source.fixAll"]}},"dataSupport":true,"resolveSupport":{"properties":["edit"]}},"completion":{"completionItem":{"resolveSupport":{"properties":["additionalTextEdits"]},"snippetSupport":true}},"definition":{},"documentHighlight":{},"documentSymbol":{"hierarchicalDocumentSymbolSupport":true},"foldingRange":{"dynamicRegistration":false,"lineFoldingOnly":false},"hover":{"contentFormat":["markdown","plaintext"]},"inlayHint":{},"inlineCompletion":{},"publishDiagnostics":{},"semanticTokens":{"formats":[],"requests":{"full":{"delta":true}},"tokenModifiers":[],"tokenTypes":[]},"signatureHelp":{"signatureInformation":{"activeParameterSupport":true,"documentationFormat":["markdown","plaintext"],"parameterInformation":{"labelOffsetSupport":true}}},"synchronization":{"didSave":true,"dynamicRegistration":true},"typeDefinition":{"linkSupport":false}},"window":{"showMessage":{"messageActionItem":{"additionalPropertiesSupport":true}},"workDoneProgress":true},"workspace":{"configuration":false,"symbol":{},"workspaceFolders":true}},"clientInfo":{"name":"Lapce-Debug","version":"0.1.0+Debug.d022894"},"initializationOptions":{"check":{"command":"clippy"},"diagnostics":{"enableExperimental":true},"serverPath":"C:\\Users\\36225\\Downloads\\rust-analyzer-x86_64-pc-windows-msvc\\rust-analyzer.exe"},"processId":25272,"rootUri":"file:///D:/git/check/","trace":"verbose","workspaceFolders":[{"name":"file:///D:/git/check/","uri":"file:///D:/git/check/"}]},"id":0}
Server capabilities (initialize response):
{"capabilities":{"callHierarchyProvider":true,"codeActionProvider":{"codeActionKinds":["","quickfix","refactor","refactor.extract","refactor.inline","refactor.rewrite"],"resolveProvider":true},"codeLensProvider":{"resolveProvider":true},"completionProvider":{"completionItem":{"labelDetailsSupport":false},"resolveProvider":false,"triggerCharacters":[":",".","'","("]},"declarationProvider":true,"definitionProvider":true,"diagnosticProvider":{"identifier":"rust-analyzer","interFileDependencies":true,"workspaceDiagnostics":false},"documentFormattingProvider":true,"documentHighlightProvider":true,"documentOnTypeFormattingProvider":{"firstTriggerCharacter":".","moreTriggerCharacter":["=","<",">","{","(","|"]},"documentRangeFormattingProvider":false,"documentSymbolProvider":true,"experimental":{"childModules":true,"externalDocs":true,"hoverRange":true,"joinLines":true,"matchingBrace":true,"moveItem":true,"onEnter":true,"openCargoToml":true,"parentModule":true,"runnables":{"kinds":["cargo"]},"ssr":true,"workspaceSymbolScopeKindFiltering":true},"foldingRangeProvider":true,"hoverProvider":true,"implementationProvider":true,"inlayHintProvider":{"resolveProvider":false},"positionEncoding":"utf-16","referencesProvider":true,"renameProvider":{"prepareProvider":true},"selectionRangeProvider":true,"semanticTokensProvider":{"full":{"delta":true},"legend":{"tokenModifiers":["async","documentation","declaration","static","defaultLibrary","associated","attribute","callable","constant","consuming","controlFlow","crateRoot","injected","intraDocLink","library","macro","mutable","procMacro","public","reference","trait","unsafe"],"tokenTypes":["comment","decorator","enumMember","enum","function","interface","keyword","macro","method","namespace","number","operator","parameter","property","string","struct","typeParameter","variable","type","angle","arithmetic","attributeBracket","attribute","bitwise","boolean","brace","bracket","builtinAttribute","builtinType","character","colon","comma","comparison","constParameter","const","deriveHelper","derive","dot","escapeSequence","formatSpecifier","generic","invalidEscapeSequence","label","lifetime","logical","macroBang","parenthesis","procMacro","punctuation","selfKeyword","selfTypeKeyword","semicolon","static","toolModule","typeAlias","union","unresolvedReference"]},"range":true},"signatureHelpProvider":{"triggerCharacters":["(",",","<"]},"textDocumentSync":{"change":2,"openClose":true,"save":{}},"typeDefinitionProvider":true,"workspace":{"fileOperations":{"willRename":{"filters":[{"pattern":{"glob":"**/*.rs","matches":"file"},"scheme":"file"},{"pattern":{"glob":"**","matches":"folder"},"scheme":"file"}]}},"workspaceFolders":{"changeNotifications":true,"supported":true}},"workspaceSymbolProvider":true},"serverInfo":{"name":"rust-analyzer","version":"0.3.2379-standalone (8365cf853e 2025-04-13)"}}