From 686ada3d4663d40f30d40368f0b9520e011ccd2d Mon Sep 17 00:00:00 2001 From: jacqueline Date: Fri, 8 Mar 2024 14:01:27 +1100 Subject: Bring a modified luavgl stub file into our stubs --- tools/luals-gendoc/gendoc.lua | 65 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 62 insertions(+), 3 deletions(-) (limited to 'tools') diff --git a/tools/luals-gendoc/gendoc.lua b/tools/luals-gendoc/gendoc.lua index 15f46b3c..ace0b6c9 100755 --- a/tools/luals-gendoc/gendoc.lua +++ b/tools/luals-gendoc/gendoc.lua @@ -14,6 +14,7 @@ local raw_data = io.read("*all") local parsed = json.decode(raw_data) local definitions_per_module = {} +local fields_per_class = {} for _, class in ipairs(parsed) do if not class.defines or not class.defines[1] then goto continue end @@ -27,6 +28,12 @@ for _, class in ipairs(parsed) do module[class.name] = class definitions_per_module[module_name] = module + local fields = {} + for _, field in ipairs(class.fields or {}) do + fields[field.name] = true + end + fields_per_class[class.name] = fields + ::continue:: end @@ -72,6 +79,8 @@ local function filterReturns(field) end local function emitField(level, prefix, field) + if not field.desc then return end + printHeading(level, "`" .. prefix .. "." .. field.name .. "`") print() print("`" .. field.extends.view .. "`") @@ -111,14 +120,64 @@ local function emitField(level, prefix, field) end end +local function baseClassName(class) + for _, define in ipairs(class.defines or {}) do + for _, extend in ipairs(define.extends or {}) do + if extend.type == "doc.extends.name" then + return extend.view + end + end + end +end + +local function isEnum(class) + for _, define in pairs(class.defines) do + if define.type == "doc.enum" then return true end + end + return false +end + +local function isAlias(class) + for _, define in pairs(class.defines) do + if define.type == "doc.alias" then return true end + end + return false +end + local function emitClass(level, prefix, class) if not class.name then return end + if not class.fields then return end + if isAlias(class) then return end + + for _, define in ipairs(class.defines or {}) do + if define.type == "tablefield" then + print(" - " .. class.name) + return + end + end printHeading(level, "`" .. prefix .. "." .. class.name .. "`") + print() + + local base_class = baseClassName(class) + local base_class_fields = {} + if base_class then + base_class_fields = fields_per_class[base_class] or {} + print("`" .. class.name .. ":" .. base_class .. "`") + print() + end + if class.desc then print(class.desc) end - for _, field in ipairs(class.fields) do - emitField(level + 1, class.name, field) + for _, field in ipairs(class.fields or {}) do + if not base_class_fields[field.name] then + emitField(level + 1, class.name, field) + end + end + + if isEnum(class) then + printHeading(level + 1, "Values") + print() end end @@ -130,7 +189,7 @@ for name, module in sortedPairs(definitions_per_module) do local top_level_class = module[name] if top_level_class then if top_level_class.desc then print(top_level_class.desc) end - for _, field in ipairs(top_level_class.fields) do + for _, field in ipairs(top_level_class.fields or {}) do emitField(initial_level + 1, name, field) end end -- cgit v1.2.3