docs/.lune/writer.luau

138 lines
2.9 KiB
Text
Raw Permalink Normal View History

2023-07-22 13:25:44 +01:00
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
2023-07-22 13:25:44 +01:00
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) .. "`")
2023-07-22 13:25:44 +01:00
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
2023-07-22 13:25:44 +01:00
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 = {}
2023-07-22 13:25:44 +01:00
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)
2023-07-22 13:25:44 +01:00
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