Error when exporting Lua language server documentation
How are you using the lua-language-server?
Visual Studio Code Extension (sumneko.lua)
Which OS are you using?
Windows
What is the issue affecting?
Other
Expected Behaviour
documentation export
Actual Behaviour
I encountered an error when trying to export documentation using the Lua language server (sumneko.lua-3.14.0): [error]: script\cli\doc\export.lua:61: bad argument #1 to 'canonical' (bee::path expected, got nil)
Reproduction steps
- Install sumneko.lua-3.14.0 extension in VS Code
- Create a simple Lua project with documentation comments
- Try to export documentation (through command palette)
Additional Notes
This appears to be a regression or oversight in the extension where it attempts to use a variable before it's defined. The fix is straightforward and might help other users encountering the same issue.
Solution
I fixed this by modifying script\cli\doc\export.lua to define the DOC variable with a simpler fallback approach that doesn't rely on non-existent functions:
-- Define DOC variable to avoid nil error
local DOC = DOC or (ws.rootUri and fs.path(furi.decode(ws.rootUri)) or fs.current_path())
This simple fix ensures that DOC is always defined with a valid path value before it's used in the getLocalPath function, allowing the documentation export functionality to work properly.
Log File
[00:02:10.453][error][#0]: script\cli\doc\export.lua:61: bad argument #1 to 'canonical' (bee::path expected, got nil) stack traceback: [C]: in function 'bee.filesystem.canonical' script\cli\doc\export.lua:61: in field 'getLocalPath' script\cli\doc\export.lua:170: in field '?' script\cli\doc\export.lua:118: in field 'documentObject' script\cli\doc\export.lua:261: in field 'variable' script\cli\doc\export.lua:235: in field '?' script\cli\doc\export.lua:118: in field 'documentObject' script\cli\doc\export.lua:287: in field 'makeDocs' script\cli\doc\init.lua:162: in function 'cli.doc.makeDoc' script\core\command\exportDocument.lua:10: in function 'core.command.exportDocument' script\provider\provider.lua:1009: in function <script\provider\provider.lua:987> [C]: in function 'xpcall' script\proto\proto.lua:202: in function <script\proto\proto.lua:177>
This is surely a regression issue, as the export feature undergoes a heavy refactor before in the PR #2821.
Since then it uses the DOC global variable in the getLocalPath(). 🤔
https://github.com/LuaLS/lua-language-server/blame/115a518ad995bfc6ae8dabf216451055e1633898/script/cli/doc/export.lua#L57-L60
- AFAIK the
DOChere is a global variable representing the--docCLI argument, it should not benilwhen called from CLI: https://github.com/LuaLS/lua-language-server/blob/606ea70d3608bf9cec8b007b7aa499dc94ffb02e/script/cli/doc/init.lua#L175-L186 - A better way might be to set this
DOCglobal insidedoc.makeDoc(), and unset after finish? Something like this:
DOC = ws.rootUri and fs.path(furi.decode(ws.rootUri)) or fs.current_path()
local docs = dirty_export.makeDocs(globals, function (i, max)
prog:setMessage(('%d/%d'):format(i, max))
prog:setPercentage((i) / max * 100)
end)
DOC = nil
@tomlau10 Yes definitely, I would like to point out that I was not running through cli but through the vscode palette suggesting that I may not have accurately pointed out the problem, and the problem is how vscode is called. Since through cli it seems to complete successfully without any problems.