lua-language-server icon indicating copy to clipboard operation
lua-language-server copied to clipboard

Error when exporting Lua language server documentation

Open GeTechG opened this issue 8 months ago • 3 comments

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

  1. Install sumneko.lua-3.14.0 extension in VS Code
  2. Create a simple Lua project with documentation comments
  3. 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>

GeTechG avatar Apr 30 '25 19:04 GeTechG

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 DOC here is a global variable representing the --doc CLI argument, it should not be nil when 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 DOC global inside doc.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 avatar May 01 '25 01:05 tomlau10

@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.

GeTechG avatar May 01 '25 06:05 GeTechG