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

Operators are not included in the output when generating documentation via the --doc CLI argument

Open matusnovak opened this issue 7 months ago • 1 comments

How are you using the lua-language-server?

Command Line

Which OS are you using?

Linux

What is the issue affecting?

Annotations, Other

Expected Behaviour

When generating markdown and JSON documentation via the command line argument --doc, the output files should contain operators defined by the @operator syntax.

Actual Behaviour

The expected behavior is that the operators are missing in both the markdown and JSON generated files.

Reproduction steps

Given the following Lua file:

---@meta

---@class Vector2f
---@operator unm:Vector2f
---@operator add(Vector2f | number):Vector2f
---@operator sub(Vector2f | number):Vector2f
Vector2f = {}

When the language server is run with the following args:

./LuaS/bin/lua-language-server --doc=./example.lua --doc_out_path=.

Then the output doc.md and doc.json do not contain any of the operators specified.

In the doc.json the type Vector2d is the following, notice the lack of any operators:

{
    "defines": [
        {
            "async": false,
            "deprecated": false,
            "file": ".",
            "finish": [
                2,
                18
            ],
            "start": [
                2,
                10
            ],
            "type": "doc.class",
            "view": "Vector2f",
            "visible": "public"
        }
    ],
    "fields": [],
    "name": "Vector2f",
    "type": "type",
    "view": "Vector2f"
}

Additional Notes

No response

Log File

No response

matusnovak avatar May 26 '25 16:05 matusnovak

As a workaround, I have found that specifying the operators as fields is possible. For example:

---@class Vector2f
---@field __unm fun():Vector2f
---@field __add fun(other: Vector2f|number):Vector2f
---@field __sub fun(other: Vector2f|number):Vector2f
Vector2f = {}

In the output JSON, the operators are listed as fields, which are of type function, and both args and return types are listed as expected.

The hint for this was in the meta library ./meta/Lua 5.4 en-us utf8/basic.lua around the line 309.

matusnovak avatar May 26 '25 16:05 matusnovak