Why does rust-analyzer omit source.fixAll from server capabilities even though it's declared in client initialize?

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)"}}

It doesn't seem like rust-analyzer supports source.fixAll.

1 Like