mirror of
https://github.com/lune-org/docs.git
synced 2024-12-12 04:50:36 +00:00
137 lines
2.9 KiB
Text
137 lines
2.9 KiB
Text
local moonwave = require("./moonwave")
|
|
|
|
local function trim(s: string): string
|
|
local result = s
|
|
result = string.gsub(result, "^%s+", "")
|
|
result = string.gsub(result, "%s+$", "")
|
|
return result
|
|
end
|
|
|
|
local buffer = {}
|
|
local function write(text: string)
|
|
table.insert(buffer, text)
|
|
end
|
|
|
|
local function writeDesc(desc: string)
|
|
desc = string.gsub(desc, "###", "####")
|
|
write(`{desc}\n\n`)
|
|
end
|
|
|
|
local function writeTypeAndDesc(typ: string, desc: string, inline: boolean)
|
|
if #typ > 0 and #desc <= 0 then
|
|
-- HACK: Got empty desc but we have a type, this is a doc comment not a type
|
|
if inline then
|
|
write(" ")
|
|
end
|
|
write(typ)
|
|
if not inline then
|
|
write("\n\n")
|
|
end
|
|
elseif #desc > 0 then
|
|
if #typ > 0 then
|
|
if inline then
|
|
write(" ")
|
|
end
|
|
write("`" .. trim(typ) .. "`")
|
|
if not inline then
|
|
write("\n\n")
|
|
end
|
|
end
|
|
if inline then
|
|
write(" ")
|
|
end
|
|
write(desc)
|
|
if not inline then
|
|
write("\n\n")
|
|
end
|
|
end
|
|
end
|
|
|
|
local function writeParams(params: { moonwave.FunctionParam })
|
|
if #params > 0 then
|
|
write(`#### Parameters\n\n`)
|
|
for _, param in params do
|
|
write(`- \`{param.name}\``)
|
|
writeTypeAndDesc(param.lua_type, param.desc, true)
|
|
write("\n\n")
|
|
end
|
|
end
|
|
end
|
|
|
|
local function writeReturns(returns: { moonwave.FunctionReturn })
|
|
if #returns > 0 then
|
|
write(`#### Returns\n\n`)
|
|
for _, ret in returns do
|
|
write(`- `)
|
|
writeTypeAndDesc(ret.lua_type, ret.desc, true)
|
|
write("\n\n")
|
|
end
|
|
end
|
|
end
|
|
|
|
local function writeFunctions(fns: { moonwave.Function })
|
|
for _, fn in fns do
|
|
write(`### {fn.name}\n\n`)
|
|
writeDesc(fn.desc)
|
|
writeParams(fn.params)
|
|
writeReturns(fn.returns)
|
|
write(`---\n\n`)
|
|
end
|
|
end
|
|
|
|
local function writeMarkdown(item: moonwave.Item)
|
|
write(`# {item.name}\n\n`)
|
|
writeDesc(item.desc)
|
|
|
|
if #item.properties > 0 then
|
|
write(`## Properties\n\n`)
|
|
for _, prop in item.properties do
|
|
write(`### {prop.name}\n\n`)
|
|
writeTypeAndDesc(prop.lua_type, prop.desc, false)
|
|
write("\n\n")
|
|
write(`---\n\n`)
|
|
end
|
|
end
|
|
|
|
if #item.functions > 0 then
|
|
local foundStatic = {}
|
|
local foundConstructors = {}
|
|
local foundMethods = {}
|
|
for _, fn in item.functions do
|
|
if fn.tags ~= nil and table.find(fn.tags, "Constructor") ~= nil then
|
|
table.insert(foundConstructors, fn)
|
|
elseif fn.tags ~= nil and table.find(fn.tags, "Method") ~= nil then
|
|
table.insert(foundMethods, fn)
|
|
else
|
|
table.insert(foundStatic, fn)
|
|
end
|
|
end
|
|
if #foundStatic > 0 then
|
|
write(`## Functions\n\n`)
|
|
writeFunctions(foundStatic)
|
|
end
|
|
if #foundConstructors > 0 then
|
|
write(`## Constructors\n\n`)
|
|
writeFunctions(foundConstructors)
|
|
end
|
|
if #foundMethods > 0 then
|
|
write(`## Methods\n\n`)
|
|
writeFunctions(foundMethods)
|
|
end
|
|
end
|
|
|
|
if #item.types > 0 then
|
|
write(`## Types\n\n`)
|
|
for _, typ in item.types do
|
|
write(`### {typ.name}\n\n`)
|
|
writeDesc(typ.desc)
|
|
write(`---\n\n`)
|
|
end
|
|
end
|
|
|
|
local result = table.concat(buffer, "")
|
|
table.clear(buffer)
|
|
return result
|
|
end
|
|
|
|
return writeMarkdown
|