2026-02-26T09:43:13.862 helix_lsp::transport [INFO] robotcode -> {"jsonrpc":"2.0","method":"initialize","params":{"capabilities":{"general":{"positionEncodings":["utf-8","utf-32","utf-16"]},"textDocument":{"codeAction":{"codeActionLiteralSupport":{"codeActionKind":{"valueSet":["","quickfix","refactor","refactor.extract","refactor.inline","refactor.rewrite","source","source.organizeImports"]}},"dataSupport":true,"disabledSupport":true,"isPreferredSupport":true,"resolveSupport":{"properties":["edit","command"]}},"completion":{"completionItem":{"deprecatedSupport":true,"insertReplaceSupport":true,"resolveSupport":{"properties":["documentation","detail","additionalTextEdits"]},"snippetSupport":true,"tagSupport":{"valueSet":[1]}},"completionItemKind":{}},"formatting":{"dynamicRegistration":false},"hover":{"contentFormat":["markdown"]},"inlayHint":{"dynamicRegistration":false},"publishDiagnostics":{"tagSupport":{"valueSet":[1,2]},"versionSupport":true},"rename":{"dynamicRegistration":false,"honorsChangeAnnotations":false,"prepareSupport":true},"signatureHelp":{"signatureInformation":{"activeParameterSupport":true,"documentationFormat":["markdown"],"parameterInformation":{"labelOffsetSupport":true}}}},"window":{"workDoneProgress":true},"workspace":{"applyEdit":true,"configuration":true,"didChangeConfiguration":{"dynamicRegistration":false},"didChangeWatchedFiles":{"dynamicRegistration":true,"relativePatternSupport":false},"executeCommand":{"dynamicRegistration":false},"fileOperations":{"didRename":true,"willRename":true},"inlayHint":{"refreshSupport":false},"symbol":{"dynamicRegistration":false},"workspaceEdit":{"documentChanges":true,"failureHandling":"abort","normalizesLineEndings":false,"resourceOperations":["create","rename","delete"]},"workspaceFolders":true}},"clientInfo":{"name":"helix","version":"25.07.1 (a05c151b)"},"processId":25760,"rootPath":"/home/etaric/src/playground/robot/robotcode-bugreport","rootUri":"file:///home/etaric/src/playground/robot/robotcode-bugreport","workspaceFolders":[{"name":"robotcode-bugreport","uri":"file:///home/etaric/src/playground/robot/robotcode-bugreport"}]},"id":0}
2026-02-26T09:43:14.277 helix_lsp::transport [INFO] robotcode <- {"jsonrpc":"2.0","id":0,"result":{"capabilities":{"positionEncoding":"utf-16","textDocumentSync":{"openClose":true,"change":2,"willSave":true,"willSaveWaitUntil":true,"save":{"includeText":true}},"completionProvider":{"triggerCharacters":[" ","*","\t",".","/","{","=","/"],"resolveProvider":true,"completionItem":{"labelDetailsSupport":true},"workDoneProgress":true},"hoverProvider":{"workDoneProgress":true},"signatureHelpProvider":{"triggerCharacters":[" ","\t"],"retriggerCharacters":[" ","\t"]},"definitionProvider":true,"implementationProvider":true,"referencesProvider":{"workDoneProgress":true},"documentHighlightProvider":{"workDoneProgress":true},"codeActionProvider":{"codeActionKinds":["refactor.extract.function","refactor.surround","quickfix","source"],"resolveProvider":true},"codeLensProvider":{"resolveProvider":true},"workspaceSymbolProvider":true,"documentFormattingProvider":{"workDoneProgress":true},"documentRangeFormattingProvider":{"workDoneProgress":true},"renameProvider":{"prepareProvider":true,"workDoneProgress":true},"foldingRangeProvider":true,"selectionRangeProvider":{"workDoneProgress":true},"executeCommandProvider":{"commands":[]},"semanticTokensProvider":{"legend":{"tokenTypes":["namespace","type","class","enum","interface","struct","typeParameter","parameter","variable","property","enumMember","event","function","method","macro","keyword","modifier","comment","string","number","regexp","operator","decorator","settingImport","setting","header","headerSettings","headerVariable","headerTestcase","headerTask","headerComment","headerKeyword","testcaseName","keywordName","controlFlow","argument","variable","keywordCall","keywordCallInner","bddPrefix","nameCall","continuation","separator","terminator","forSeparator","variableBegin","variableEnd","expressionBegin","expressionEnd","variableExpression","escape","namespace","error","config","namedArgument","var","documentation"],"tokenModifiers":["declaration","definition","readonly","static","deprecated","abstract","async","modification","documentation","defaultLibrary","builtin","embedded"]},"full":true},"inlineValueProvider":{"workDoneProgress":true,"documentSelector":[{"language":"robotframework"}]},"inlayHintProvider":{},"workspace":{"workspaceFolders":{"supported":true,"changeNotifications":"81bd7109-5584-4549-951a-4d6f8e0c7854"},"fileOperations":{"didCreate":{"filters":[{"pattern":{"glob":"**/*.{yaml,robot,py,yml,resource}"}}]},"willCreate":{"filters":[{"pattern":{"glob":"**/*.{yaml,robot,py,yml,resource}"}}]},"didRename":{"filters":[{"pattern":{"glob":"**/*.{yaml,robot,py,yml,resource}"}}]},"willRename":{"filters":[{"pattern":{"glob":"**/*.{yaml,robot,py,yml,resource}"}}]},"didDelete":{"filters":[{"pattern":{"glob":"**/*.{yaml,robot,py,yml,resource}"}}]},"willDelete":{"filters":[{"pattern":{"glob":"**/*.{yaml,robot,py,yml,resource}"}}]}}}},"serverInfo":{"name":"RobotCode Language Server","version":"2.2.0"}}}
2026-02-26T09:43:14.277 helix_lsp::transport [INFO] robotcode -> {"jsonrpc":"2.0","method":"initialized","params":{}}
2026-02-26T09:43:14.277 helix_lsp::transport [INFO] robotcode -> {"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"languageId":"robot","text":"*** Test Cases ***\nMy Example Test\n No Operation\n","uri":"file:///home/etaric/src/playground/robot/robotcode-bugreport/example0.robot","version":0}}}
2026-02-26T09:43:14.282 helix_lsp::transport [INFO] robotcode <- {"jsonrpc":"2.0","id":1,"method":"workspace/configuration","params":{"items":[{"scopeUri":"file:///home/etaric/src/playground/robot/robotcode-bugreport","section":"robotcode.robot"}]}}
2026-02-26T09:43:14.282 helix_lsp::transport [INFO] robotcode -> {"jsonrpc":"2.0","result":[null],"id":1}
2026-02-26T09:43:14.283 helix_lsp::transport [INFO] robotcode <- {"jsonrpc":"2.0","id":2,"method":"workspace/configuration","params":{"items":[{"section":"robotcode.documentationServer"}]}}
2026-02-26T09:43:14.283 helix_lsp::transport [INFO] robotcode -> {"jsonrpc":"2.0","result":[null],"id":2}
2026-02-26T09:43:14.287 helix_lsp::transport [INFO] robotcode <- {"jsonrpc":"2.0","id":3,"method":"client/registerCapability","params":{"registrations":[{"id":"16a6790d-b40e-45cf-81da-465edcc35d3c","method":"workspace/didChangeWatchedFiles","registerOptions":{"watchers":[{"globPattern":"**/*.{robot,resource}","kind":5}]}}]}}
2026-02-26T09:43:14.287 helix_lsp::transport [INFO] robotcode <- {"jsonrpc":"2.0","id":4,"method":"client/registerCapability","params":{"registrations":[{"id":"81875a4e-36d0-48aa-b7cc-0cc07b743b2b","method":"workspace/didChangeWatchedFiles","registerOptions":{"watchers":[{"globPattern":"**/*.{yaml,robot,py,yml,resource}","kind":7}]}}]}}
2026-02-26T09:43:14.287 helix_lsp::transport [INFO] robotcode -> {"jsonrpc":"2.0","result":null,"id":3}
2026-02-26T09:43:14.287 helix_lsp::transport [INFO] robotcode -> {"jsonrpc":"2.0","result":null,"id":4}
2026-02-26T09:43:14.287 helix_lsp::transport [INFO] robotcode <- {"jsonrpc":"2.0","id":5,"method":"workspace/configuration","params":{"items":[{"scopeUri":"file:///home/etaric/src/playground/robot/robotcode-bugreport","section":"robotcode"}]}}
2026-02-26T09:43:14.287 helix_lsp::transport [INFO] robotcode -> {"jsonrpc":"2.0","result":[null],"id":5}
2026-02-26T09:43:14.289 helix_lsp::transport [INFO] robotcode <- {"jsonrpc":"2.0","id":6,"method":"window/workDoneProgress/create","params":{"token":"55c1db6c-d785-4ec6-b327-d40ced0da6e0"}}
2026-02-26T09:43:14.289 helix_lsp::transport [INFO] robotcode <- {"jsonrpc":"2.0","method":"$/progress","params":{"token":"55c1db6c-d785-4ec6-b327-d40ced0da6e0","value":{"title":"RobotCode","kind":"begin","cancellable":false,"message":"Collect sources"}}}
2026-02-26T09:43:14.289 helix_lsp::transport [INFO] robotcode -> {"jsonrpc":"2.0","result":null,"id":6}
2026-02-26T09:43:14.289 helix_lsp::transport [INFO] robotcode <- {"jsonrpc":"2.0","method":"$/progress","params":{"token":"55c1db6c-d785-4ec6-b327-d40ced0da6e0","value":{"kind":"end"}}}
2026-02-26T09:43:14.290 helix_lsp::transport [INFO] robotcode <- {"jsonrpc":"2.0","id":7,"method":"window/workDoneProgress/create","params":{"token":"1d14484b-1e49-4f5f-b76e-1160af9c4d05"}}
2026-02-26T09:43:14.290 helix_lsp::transport [INFO] robotcode -> {"jsonrpc":"2.0","result":null,"id":7}
2026-02-26T09:43:14.291 helix_lsp::transport [INFO] robotcode <- {"jsonrpc":"2.0","method":"$/progress","params":{"token":"1d14484b-1e49-4f5f-b76e-1160af9c4d05","value":{"kind":"end"}}}
2026-02-26T09:43:14.291 helix_lsp::transport [INFO] robotcode <- {"jsonrpc":"2.0","id":8,"method":"window/workDoneProgress/create","params":{"token":"ca545fc4-9e0e-44f3-90f6-c0da1653e615"}}
2026-02-26T09:43:14.291 helix_lsp::transport [INFO] robotcode -> {"jsonrpc":"2.0","result":null,"id":8}
2026-02-26T09:43:14.292 helix_lsp::transport [INFO] robotcode <- {"jsonrpc":"2.0","id":9,"method":"workspace/configuration","params":{"items":[{"scopeUri":"file:///home/etaric/src/playground/robot/robotcode-bugreport/example0.robot","section":"robotcode.analysis"}]}}
2026-02-26T09:43:14.292 helix_lsp::transport [INFO] robotcode -> {"jsonrpc":"2.0","result":[null],"id":9}
2026-02-26T09:43:14.295 helix_lsp::transport [INFO] robotcode <- {"jsonrpc":"2.0","id":10,"method":"workspace/configuration","params":{"items":[{"scopeUri":"file:///home/etaric/src/playground/robot/robotcode-bugreport","section":"robotcode.analysis.cache"}]}}
2026-02-26T09:43:14.295 helix_lsp::transport [INFO] robotcode -> {"jsonrpc":"2.0","result":[null],"id":10}
2026-02-26T09:43:14.296 helix_lsp::transport [INFO] robotcode <- {"jsonrpc":"2.0","id":11,"method":"workspace/configuration","params":{"items":[{"scopeUri":"file:///home/etaric/src/playground/robot/robotcode-bugreport","section":"robotcode.analysis.robot"}]}}
2026-02-26T09:43:14.296 helix_lsp::transport [INFO] robotcode -> {"jsonrpc":"2.0","result":[null],"id":11}
2026-02-26T09:43:14.306 helix_lsp::transport [INFO] robotcode <- {"jsonrpc":"2.0","id":12,"method":"client/registerCapability","params":{"registrations":[{"id":"2f280da0-f312-46d6-b11a-88286b83e3a3","method":"workspace/didChangeWatchedFiles","registerOptions":{"watchers":[{"globPattern":"/home/etaric/src/playground/robot/robotcode-bugreport/.venv/lib/python3.12/site-packages/robot/libraries/**"}]}}]}}
2026-02-26T09:43:14.306 helix_lsp::transport [INFO] robotcode <- {"jsonrpc":"2.0","method":"$/progress","params":{"token":"ca545fc4-9e0e-44f3-90f6-c0da1653e615","value":{"kind":"end"}}}
2026-02-26T09:43:14.306 helix_lsp::transport [INFO] robotcode <- {"jsonrpc":"2.0","id":13,"method":"window/workDoneProgress/create","params":{"token":"60791b17-44dc-4e1f-8c87-6ca5196aa819"}}
2026-02-26T09:43:14.306 helix_lsp::transport [INFO] robotcode -> {"jsonrpc":"2.0","result":null,"id":12}
2026-02-26T09:43:14.306 helix_lsp::transport [INFO] robotcode -> {"jsonrpc":"2.0","result":null,"id":13}
2026-02-26T09:43:14.306 helix_lsp::transport [INFO] robotcode <- {"jsonrpc":"2.0","method":"$/progress","params":{"token":"60791b17-44dc-4e1f-8c87-6ca5196aa819","value":{"kind":"end"}}}
2026-02-26T09:46:35.075 helix_lsp::transport [INFO] robotcode -> {"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"languageId":"robot","text":"*** Test Cases ***\nMy Example Test\n No Operation\n","uri":"file:///home/etaric/src/playground/robot/robotcode-bugreport/example1.robot","version":0}}}
2026-02-26T09:46:36.375 helix_lsp::transport [INFO] robotcode <- {"jsonrpc":"2.0","id":14,"method":"window/workDoneProgress/create","params":{"token":"218fc89b-a36a-4a64-a757-973245785ef6"}}
2026-02-26T09:46:36.376 helix_lsp::transport [INFO] robotcode -> {"jsonrpc":"2.0","result":null,"id":14}
2026-02-26T09:46:36.378 helix_lsp::transport [INFO] robotcode <- {"jsonrpc":"2.0","method":"$/progress","params":{"token":"218fc89b-a36a-4a64-a757-973245785ef6","value":{"kind":"end"}}}
2026-02-26T09:46:36.379 helix_lsp::transport [INFO] robotcode <- {"jsonrpc":"2.0","id":15,"method":"window/workDoneProgress/create","params":{"token":"2a551ba2-b411-46f7-b0d1-da91bee6ae69"}}
2026-02-26T09:46:36.379 helix_lsp::transport [INFO] robotcode <- {"jsonrpc":"2.0","id":16,"method":"workspace/configuration","params":{"items":[{"scopeUri":"file:///home/etaric/src/playground/robot/robotcode-bugreport","section":"robotcode.robocop"}]}}
2026-02-26T09:46:36.380 helix_lsp::transport [INFO] robotcode -> {"jsonrpc":"2.0","result":null,"id":15}
2026-02-26T09:46:36.380 helix_lsp::transport [INFO] robotcode -> {"jsonrpc":"2.0","result":[null],"id":16}
2026-02-26T09:46:36.452 helix_lsp::transport [INFO] robotcode <- {"jsonrpc":"2.0","id":17,"method":"workspace/configuration","params":{"items":[{"scopeUri":"file:///home/etaric/src/playground/robot/robotcode-bugreport/example1.robot","section":"robotcode.analysis.diagnosticModifiers"}]}}
2026-02-26T09:46:36.452 helix_lsp::transport [INFO] robotcode -> {"jsonrpc":"2.0","result":[null],"id":17}
2026-02-26T09:46:36.454 helix_lsp::transport [INFO] robotcode <- {"jsonrpc":"2.0","method":"textDocument/publishDiagnostics","params":{"uri":"file:///home/etaric/src/playground/robot/robotcode-bugreport/example1.robot","diagnostics":[{"range":{"start":{"line":1,"character":0},"end":{"line":1,"character":15}},"message":"Missing documentation in 'My Example Test' test case","severity":2,"code":"DOC02-missing-doc-test-case","codeDescription":{"href":"https://robocop.dev/v6.10.1/rules/rules_list.html#doc02-missing-doc-test-case"},"source":"robocop"},{"range":{"start":{"line":0,"character":0},"end":{"line":0,"character":0}},"message":"Missing documentation in suite","severity":2,"code":"DOC03-missing-doc-suite","codeDescription":{"href":"https://robocop.dev/v6.10.1/rules/rules_list.html#doc03-missing-doc-suite"},"source":"robocop"}],"version":0}}
2026-02-26T09:46:36.454 helix_lsp::transport [INFO] robotcode <- {"jsonrpc":"2.0","method":"textDocument/publishDiagnostics","params":{"uri":"file:///home/etaric/src/playground/robot/robotcode-bugreport/example1.robot","diagnostics":[{"range":{"start":{"line":1,"character":0},"end":{"line":1,"character":15}},"message":"Missing documentation in 'My Example Test' test case","severity":2,"code":"DOC02-missing-doc-test-case","codeDescription":{"href":"https://robocop.dev/v6.10.1/rules/rules_list.html#doc02-missing-doc-test-case"},"source":"robocop"},{"range":{"start":{"line":0,"character":0},"end":{"line":0,"character":0}},"message":"Missing documentation in suite","severity":2,"code":"DOC03-missing-doc-suite","codeDescription":{"href":"https://robocop.dev/v6.10.1/rules/rules_list.html#doc03-missing-doc-suite"},"source":"robocop"}],"version":0}}
2026-02-26T09:46:36.454 helix_lsp::transport [INFO] robotcode <- {"jsonrpc":"2.0","method":"textDocument/publishDiagnostics","params":{"uri":"file:///home/etaric/src/playground/robot/robotcode-bugreport/example1.robot","diagnostics":[{"range":{"start":{"line":1,"character":0},"end":{"line":1,"character":15}},"message":"Missing documentation in 'My Example Test' test case","severity":2,"code":"DOC02-missing-doc-test-case","codeDescription":{"href":"https://robocop.dev/v6.10.1/rules/rules_list.html#doc02-missing-doc-test-case"},"source":"robocop"},{"range":{"start":{"line":0,"character":0},"end":{"line":0,"character":0}},"message":"Missing documentation in suite","severity":2,"code":"DOC03-missing-doc-suite","codeDescription":{"href":"https://robocop.dev/v6.10.1/rules/rules_list.html#doc03-missing-doc-suite"},"source":"robocop"}],"version":0}}
2026-02-26T09:46:36.454 helix_lsp::transport [INFO] robotcode <- {"jsonrpc":"2.0","method":"textDocument/publishDiagnostics","params":{"uri":"file:///home/etaric/src/playground/robot/robotcode-bugreport/example1.robot","diagnostics":[{"range":{"start":{"line":1,"character":0},"end":{"line":1,"character":15}},"message":"Missing documentation in 'My Example Test' test case","severity":2,"code":"DOC02-missing-doc-test-case","codeDescription":{"href":"https://robocop.dev/v6.10.1/rules/rules_list.html#doc02-missing-doc-test-case"},"source":"robocop"},{"range":{"start":{"line":0,"character":0},"end":{"line":0,"character":0}},"message":"Missing documentation in suite","severity":2,"code":"DOC03-missing-doc-suite","codeDescription":{"href":"https://robocop.dev/v6.10.1/rules/rules_list.html#doc03-missing-doc-suite"},"source":"robocop"}],"version":0}}
2026-02-26T09:46:36.454 helix_lsp::transport [INFO] robotcode <- {"jsonrpc":"2.0","method":"$/progress","params":{"token":"2a551ba2-b411-46f7-b0d1-da91bee6ae69","value":{"kind":"end"}}}
First of all thank you for this awesome tool!
Describe the bug
I use Helix editor with
robotcode language-server --stdioas a language server. I noticed that the file I open first or the files that are already open when robotcode is (re-)started are ignored by the language server - there are no suggestions and features like "go to definition" do not work, the language server seems to just return resultnull. But when I open another file after robotcode finished starting up, it all works fine for that file.Below are some of the logs of the JSON messages (obtained from helix logs via
hx -v) between the editor and language server, unfortunately I have not found an option to get more debug output out of the language server.To me (as somebody who knows nothing about LSP) it looks like the first
textDocument/didOpenis not handled properly by the language server which is why it does not provide diagnostics and just responds to methods liketextDocument/definitionwith"result": null.Steps To Reproduce
Steps to reproduce the behavior:
hx -v(with the language server configured)This was reproduced with a directory containing nothing but this file twice:
Expected behavior
LSP features work for both opened files.
Logs
When opening the first file:
When opening the second file:
When doing a go to definition in the first file:
Additional context
None
Desktop (please complete the following information):