flm01/mote/v1/openwrt/package/luci/host/usr/lib/lua/luadoc/doclet/formatter.lua

85 lines
2.5 KiB
Lua

-------------------------------------------------------------------------------
-- Doclet to format source code according to LuaDoc standard tags. This doclet
-- (re)write .lua files adding missing standard tags. Texts are formatted to
-- 80 columns and function parameters are added based on code analysis.
--
-- @release $Id: formatter.lua 3941 2008-12-23 21:39:38Z jow $
-------------------------------------------------------------------------------
local util = require "luadoc.util"
local assert, ipairs, pairs, type = assert, ipairs, pairs, type
local string = require"string"
local table = require"table"
module "luadoc.doclet.formatter"
options = {
output_dir = "./",
}
-------------------------------------------------------------------------------
-- Assembly the output filename for an input file.
-- TODO: change the name of this function
function out_file (filename)
local h = filename
h = options.output_dir..h
return h
end
-------------------------------------------------------------------------------
-- Generate a new lua file for each input lua file. If the user does not
-- specify a different output directory input files will be rewritten.
-- @param doc documentation table
function start (doc)
local todo = "<TODO>"
-- Process files
for i, file_doc in ipairs(doc.files) do
-- assembly the filename
local filename = out_file(file_doc.name)
luadoc.logger:info(string.format("generating file `%s'", filename))
-- TODO: confirm file overwrite
local f = posix.open(filename, "w")
assert(f, string.format("could not open `%s' for writing", filename))
for _, block in ipairs(file_doc.doc) do
-- write reorganized comments
f:write(string.rep("-", 80).."\n")
-- description
f:write(util.comment(util.wrap(block.description, 77)))
f:write("\n")
if block.class == "function" then
-- parameters
table.foreachi(block.param, function (_, param_name)
f:write(util.comment(util.wrap(string.format("@param %s %s", param_name, block.param[param_name] or todo), 77)))
f:write("\n")
end)
-- return
if type(block.ret) == "table" then
table.foreachi(block.ret, function (_, ret)
f:write(util.comment(util.wrap(string.format("@return %s", ret), 77)).."\n")
end)
else
f:write(util.comment(util.wrap(string.format("@return %s", block.ret or todo), 77)).."\n")
end
end
-- TODO: usage
-- TODO: see
-- write code
for _, line in ipairs(block.code) do
f:write(line.."\n")
end
end
f:close()
end
end