refactor(lua2dox): format with stylua

This commit is contained in:
Lewis Russell 2022-10-10 12:10:57 +01:00
parent d4e749f1b2
commit a6d889eae1

View File

@ -51,13 +51,13 @@ The effect is that you will get the function documented, but not with the parame
]] ]]
local function class(BaseClass, ClassInitialiser) local function class(BaseClass, ClassInitialiser)
local newClass = {} -- a new class newClass local newClass = {} -- a new class newClass
if not ClassInitialiser and type(BaseClass) == 'function' then if not ClassInitialiser and type(BaseClass) == 'function' then
ClassInitialiser = BaseClass ClassInitialiser = BaseClass
BaseClass = nil BaseClass = nil
elseif type(BaseClass) == 'table' then elseif type(BaseClass) == 'table' then
-- our new class is a shallow copy of the base class! -- our new class is a shallow copy of the base class!
for i,v in pairs(BaseClass) do for i, v in pairs(BaseClass) do
newClass[i] = v newClass[i] = v
end end
newClass._base = BaseClass newClass._base = BaseClass
@ -70,11 +70,11 @@ local function class(BaseClass, ClassInitialiser)
local classMetatable = {} local classMetatable = {}
classMetatable.__call = function(class_tbl, ...) classMetatable.__call = function(class_tbl, ...)
local newInstance = {} local newInstance = {}
setmetatable(newInstance,newClass) setmetatable(newInstance, newClass)
--if init then --if init then
-- init(newInstance,...) -- init(newInstance,...)
if class_tbl.init then if class_tbl.init then
class_tbl.init(newInstance,...) class_tbl.init(newInstance, ...)
else else
-- make sure that any stuff from the base class is initialized! -- make sure that any stuff from the base class is initialized!
if BaseClass and BaseClass.init then if BaseClass and BaseClass.init then
@ -104,7 +104,7 @@ local TCore_Clock = class()
--! \brief get the current time --! \brief get the current time
function TCore_Clock.GetTimeNow() function TCore_Clock.GetTimeNow()
local gettimeofday = os.gettimeofday -- luacheck: ignore 143 Accessing an undefined field of a global variable. local gettimeofday = os.gettimeofday -- luacheck: ignore 143 Accessing an undefined field of a global variable.
if gettimeofday then if gettimeofday then
return gettimeofday() return gettimeofday()
else else
@ -113,7 +113,7 @@ function TCore_Clock.GetTimeNow()
end end
--! \brief constructor --! \brief constructor
function TCore_Clock.init(this,T0) function TCore_Clock.init(this, T0)
if T0 then if T0 then
this.t0 = T0 this.t0 = T0
else else
@ -122,36 +122,34 @@ function TCore_Clock.init(this,T0)
end end
--! \brief get time string --! \brief get time string
function TCore_Clock.getTimeStamp(this,T0) function TCore_Clock.getTimeStamp(this, T0)
local t0 local t0
if T0 then if T0 then
t0 = T0 t0 = T0
else else
t0 = this.t0 t0 = this.t0
end end
return os.date('%c %Z',t0) return os.date('%c %Z', t0)
end end
--! \brief write to stdout --! \brief write to stdout
local function TCore_IO_write(Str) local function TCore_IO_write(Str)
if (Str) then if Str then
io.write(Str) io.write(Str)
end end
end end
--! \brief write to stdout --! \brief write to stdout
local function TCore_IO_writeln(Str) local function TCore_IO_writeln(Str)
if (Str) then if Str then
io.write(Str) io.write(Str)
end end
io.write("\n") io.write('\n')
end end
--! \brief trims a string --! \brief trims a string
local function string_trim(Str) local function string_trim(Str)
return Str:match("^%s*(.-)%s*$") return Str:match('^%s*(.-)%s*$')
end end
--! \brief split a string --! \brief split a string
@ -162,24 +160,23 @@ end
---@return string[] ---@return string[]
local function string_split(Str, Pattern) local function string_split(Str, Pattern)
local splitStr = {} local splitStr = {}
local fpat = "(.-)" .. Pattern local fpat = '(.-)' .. Pattern
local last_end = 1 local last_end = 1
local str, e, cap = string.find(Str,fpat, 1) local str, e, cap = string.find(Str, fpat, 1)
while str do while str do
if str ~= 1 or cap ~= "" then if str ~= 1 or cap ~= '' then
table.insert(splitStr,cap) table.insert(splitStr, cap)
end end
last_end = e+1 last_end = e + 1
str, e, cap = string.find(Str,fpat, last_end) str, e, cap = string.find(Str, fpat, last_end)
end end
if last_end <= #Str then if last_end <= #Str then
cap = string.sub(Str,last_end) cap = string.sub(Str, last_end)
table.insert(splitStr, cap) table.insert(splitStr, cap)
end end
return splitStr return splitStr
end end
--! \class TCore_Commandline --! \class TCore_Commandline
--! \brief reads/parses commandline --! \brief reads/parses commandline
local TCore_Commandline = class() local TCore_Commandline = class()
@ -192,7 +189,7 @@ function TCore_Commandline.init(this)
end end
--! \brief get value --! \brief get value
function TCore_Commandline.getRaw(this,Key,Default) function TCore_Commandline.getRaw(this, Key, Default)
local val = this.argv[Key] local val = this.argv[Key]
if not val then if not val then
val = Default val = Default
@ -209,14 +206,14 @@ local TStream_Read = class()
--! \brief get contents of file --! \brief get contents of file
--! --!
--! \param Filename name of file to read (or nil == stdin) --! \param Filename name of file to read (or nil == stdin)
function TStream_Read.getContents(this,Filename) function TStream_Read.getContents(this, Filename)
assert(Filename) assert(Filename)
-- get lines from file -- get lines from file
-- syphon lines to our table -- syphon lines to our table
--TCore_Debug_show_var('Filename',Filename) --TCore_Debug_show_var('Filename',Filename)
local filecontents={} local filecontents = {}
for line in io.lines(Filename) do for line in io.lines(Filename) do
table.insert(filecontents,line) table.insert(filecontents, line)
end end
if filecontents then if filecontents then
@ -241,7 +238,7 @@ function TStream_Read.getLine(this)
this.currentLine = nil this.currentLine = nil
else else
-- get line -- get line
if this.currentLineNo<=this.contentsLen then if this.currentLineNo <= this.contentsLen then
line = this.filecontents[this.currentLineNo] line = this.filecontents[this.currentLineNo]
this.currentLineNo = this.currentLineNo + 1 this.currentLineNo = this.currentLineNo + 1
else else
@ -252,13 +249,13 @@ function TStream_Read.getLine(this)
end end
--! \brief save line fragment --! \brief save line fragment
function TStream_Read.ungetLine(this,LineFrag) function TStream_Read.ungetLine(this, LineFrag)
this.currentLine = LineFrag this.currentLine = LineFrag
end end
--! \brief is it eof? --! \brief is it eof?
function TStream_Read.eof(this) function TStream_Read.eof(this)
if this.currentLine or this.currentLineNo<=this.contentsLen then if this.currentLine or this.currentLineNo <= this.contentsLen then
return false return false
end end
return true return true
@ -273,32 +270,32 @@ function TStream_Write.init(this)
end end
--! \brief write immediately --! \brief write immediately
function TStream_Write.write(_,Str) function TStream_Write.write(_, Str)
TCore_IO_write(Str) TCore_IO_write(Str)
end end
--! \brief write immediately --! \brief write immediately
function TStream_Write.writeln(_,Str) function TStream_Write.writeln(_, Str)
TCore_IO_writeln(Str) TCore_IO_writeln(Str)
end end
--! \brief write immediately --! \brief write immediately
function TStream_Write.writelnComment(_,Str) function TStream_Write.writelnComment(_, Str)
TCore_IO_write('// ZZ: ') TCore_IO_write('// ZZ: ')
TCore_IO_writeln(Str) TCore_IO_writeln(Str)
end end
--! \brief write to tail --! \brief write to tail
function TStream_Write.writelnTail(this,Line) function TStream_Write.writelnTail(this, Line)
if not Line then if not Line then
Line = '' Line = ''
end end
table.insert(this.tailLine,Line) table.insert(this.tailLine, Line)
end end
--! \brief output tail lines --! \brief output tail lines
function TStream_Write.write_tailLines(this) function TStream_Write.write_tailLines(this)
for _,line in ipairs(this.tailLine) do for _, line in ipairs(this.tailLine) do
TCore_IO_writeln(line) TCore_IO_writeln(line)
end end
TCore_IO_write('// Lua2DoX new eof') TCore_IO_write('// Lua2DoX new eof')
@ -308,9 +305,9 @@ end
local TLua2DoX_filter = class() local TLua2DoX_filter = class()
--! \brief allow us to do errormessages --! \brief allow us to do errormessages
function TLua2DoX_filter.warning(this,Line,LineNo,Legend) function TLua2DoX_filter.warning(this, Line, LineNo, Legend)
this.outStream:writelnTail( this.outStream:writelnTail(
'//! \todo warning! ' .. Legend .. ' (@' .. LineNo .. ')"' .. Line .. '"' '//! \todo warning! ' .. Legend .. ' (@' .. LineNo .. ')"' .. Line .. '"'
) )
end end
@ -319,47 +316,47 @@ end
--! If the string has a comment on the end, this trims it off. --! If the string has a comment on the end, this trims it off.
--! --!
local function TString_removeCommentFromLine(Line) local function TString_removeCommentFromLine(Line)
local pos_comment = string.find(Line,'%-%-') local pos_comment = string.find(Line, '%-%-')
local tailComment local tailComment
if pos_comment then if pos_comment then
Line = string.sub(Line,1,pos_comment-1) Line = string.sub(Line, 1, pos_comment - 1)
tailComment = string.sub(Line,pos_comment) tailComment = string.sub(Line, pos_comment)
end end
return Line,tailComment return Line, tailComment
end end
--! \brief get directive from magic --! \brief get directive from magic
local function getMagicDirective(Line) local function getMagicDirective(Line)
local macro,tail local macro, tail
local macroStr = '[\\@]' local macroStr = '[\\@]'
local pos_macro = string.find(Line,macroStr) local pos_macro = string.find(Line, macroStr)
if pos_macro then if pos_macro then
--! ....\\ macro...stuff --! ....\\ macro...stuff
--! ....\@ macro...stuff --! ....\@ macro...stuff
local line = string.sub(Line,pos_macro+1) local line = string.sub(Line, pos_macro + 1)
local space = string.find(line,'%s+') local space = string.find(line, '%s+')
if space then if space then
macro = string.sub(line,1,space-1) macro = string.sub(line, 1, space - 1)
tail = string_trim(string.sub(line,space+1)) tail = string_trim(string.sub(line, space + 1))
else else
macro = line macro = line
tail = '' tail = ''
end end
end end
return macro,tail return macro, tail
end end
--! \brief check comment for fn --! \brief check comment for fn
local function checkComment4fn(Fn_magic,MagicLines) local function checkComment4fn(Fn_magic, MagicLines)
local fn_magic = Fn_magic local fn_magic = Fn_magic
-- TCore_IO_writeln('// checkComment4fn "' .. MagicLines .. '"') -- TCore_IO_writeln('// checkComment4fn "' .. MagicLines .. '"')
local magicLines = string_split(MagicLines,'\n') local magicLines = string_split(MagicLines, '\n')
local macro,tail local macro, tail
for _, line in ipairs(magicLines) do for _, line in ipairs(magicLines) do
macro,tail = getMagicDirective(line) macro, tail = getMagicDirective(line)
if macro == 'fn' then if macro == 'fn' then
fn_magic = tail fn_magic = tail
-- TCore_IO_writeln('// found fn "' .. fn_magic .. '"') -- TCore_IO_writeln('// found fn "' .. fn_magic .. '"')
@ -371,15 +368,15 @@ local function checkComment4fn(Fn_magic,MagicLines)
return fn_magic return fn_magic
end end
local types = {"number", "string", "table", "list", "boolean", "function"} local types = { 'number', 'string', 'table', 'list', 'boolean', 'function' }
--! \brief run the filter --! \brief run the filter
function TLua2DoX_filter.readfile(this,AppStamp,Filename) function TLua2DoX_filter.readfile(this, AppStamp, Filename)
local inStream = TStream_Read() local inStream = TStream_Read()
local outStream = TStream_Write() local outStream = TStream_Write()
this.outStream = outStream -- save to this obj this.outStream = outStream -- save to this obj
if (inStream:getContents(Filename)) then if inStream:getContents(Filename) then
-- output the file -- output the file
local line local line
local fn_magic -- function name/def from magic comment local fn_magic -- function name/def from magic comment
@ -389,7 +386,7 @@ function TLua2DoX_filter.readfile(this,AppStamp,Filename)
outStream:writelnTail('// #######################') outStream:writelnTail('// #######################')
outStream:writelnTail() outStream:writelnTail()
local state = '' -- luacheck: ignore 231 variable is set but never accessed. local state = '' -- luacheck: ignore 231 variable is set but never accessed.
local offset = 0 local offset = 0
local generic = {} local generic = {}
local l = 0 local l = 0
@ -398,7 +395,7 @@ function TLua2DoX_filter.readfile(this,AppStamp,Filename)
-- TCore_Debug_show_var('inStream',inStream) -- TCore_Debug_show_var('inStream',inStream)
-- TCore_Debug_show_var('line',line ) -- TCore_Debug_show_var('line',line )
l = l + 1 l = l + 1
if string.sub(line,1,2) == '--' then -- it's a comment if string.sub(line, 1, 2) == '--' then -- it's a comment
-- Allow people to write style similar to EmmyLua (since they are basically the same) -- Allow people to write style similar to EmmyLua (since they are basically the same)
-- instead of silently skipping things that start with --- -- instead of silently skipping things that start with ---
if string.sub(line, 3, 3) == '@' then -- it's a magic comment if string.sub(line, 3, 3) == '@' then -- it's a magic comment
@ -414,22 +411,23 @@ function TLua2DoX_filter.readfile(this,AppStamp,Filename)
local magic_split = string_split(magic, ' ') local magic_split = string_split(magic, ' ')
if magic_split[1] == 'param' then if magic_split[1] == 'param' then
for _, type in ipairs(types) do for _, type in ipairs(types) do
magic = magic:gsub("^param%s+([a-zA-Z_?]+)%s+.*%((" .. type .. ")%)", "param %1 %2" ) magic = magic:gsub('^param%s+([a-zA-Z_?]+)%s+.*%((' .. type .. ')%)', 'param %1 %2')
magic = magic:gsub("^param%s+([a-zA-Z_?]+)%s+.*%((" .. type .. "|nil)%)", "param %1 %2" ) magic =
magic:gsub('^param%s+([a-zA-Z_?]+)%s+.*%((' .. type .. '|nil)%)', 'param %1 %2')
end end
magic_split = string_split(magic, ' ') magic_split = string_split(magic, ' ')
elseif magic_split[1] == 'return' then elseif magic_split[1] == 'return' then
for _, type in ipairs(types) do for _, type in ipairs(types) do
magic = magic:gsub("^return%s+.*%((" .. type .. ")%)", "return %1" ) magic = magic:gsub('^return%s+.*%((' .. type .. ')%)', 'return %1')
magic = magic:gsub("^return%s+.*%((" .. type .. "|nil)%)", "return %1" ) magic = magic:gsub('^return%s+.*%((' .. type .. '|nil)%)', 'return %1')
end end
magic_split = string_split(magic, ' ') magic_split = string_split(magic, ' ')
end end
if magic_split[1] == "generic" then if magic_split[1] == 'generic' then
local generic_name, generic_type = line:match("@generic%s*(%w+)%s*:?%s*(.*)") local generic_name, generic_type = line:match('@generic%s*(%w+)%s*:?%s*(.*)')
if generic_type == "" then if generic_type == '' then
generic_type = "any" generic_type = 'any'
end end
generic[generic_name] = generic_type generic[generic_name] = generic_type
else else
@ -440,9 +438,9 @@ function TLua2DoX_filter.readfile(this,AppStamp,Filename)
if magic_split[type_index] then if magic_split[type_index] then
-- fix optional parameters -- fix optional parameters
if magic_split[type_index] and magic_split[2]:find("%?$") then if magic_split[type_index] and magic_split[2]:find('%?$') then
if not magic_split[type_index]:find("nil") then if not magic_split[type_index]:find('nil') then
magic_split[type_index] = magic_split[type_index] .. "|nil" magic_split[type_index] = magic_split[type_index] .. '|nil'
end end
magic_split[2] = magic_split[2]:sub(1, -2) magic_split[2] = magic_split[2]:sub(1, -2)
end end
@ -454,42 +452,44 @@ function TLua2DoX_filter.readfile(this,AppStamp,Filename)
end end
-- surround some types by () -- surround some types by ()
for _, type in ipairs(types) do for _, type in ipairs(types) do
magic_split[type_index] = magic_split[type_index]:gsub("^(" .. type .. "|nil):?$", "(%1)") magic_split[type_index] =
magic_split[type_index] = magic_split[type_index]:gsub("^(" .. type .. "):?$", "(%1)") magic_split[type_index]:gsub('^(' .. type .. '|nil):?$', '(%1)')
magic_split[type_index] =
magic_split[type_index]:gsub('^(' .. type .. '):?$', '(%1)')
end end
end end
magic = table.concat(magic_split, ' ') magic = table.concat(magic_split, ' ')
outStream:writeln('/// @' .. magic) outStream:writeln('/// @' .. magic)
fn_magic = checkComment4fn(fn_magic,magic) fn_magic = checkComment4fn(fn_magic, magic)
end end
elseif string.sub(line,3,3)=='-' then -- it's a nonmagic doc comment elseif string.sub(line, 3, 3) == '-' then -- it's a nonmagic doc comment
local comment = string.sub(line,4) local comment = string.sub(line, 4)
outStream:writeln('/// '.. comment) outStream:writeln('/// ' .. comment)
elseif string.sub(line,3,4)=='[[' then -- it's a long comment elseif string.sub(line, 3, 4) == '[[' then -- it's a long comment
line = string.sub(line,5) -- nibble head line = string.sub(line, 5) -- nibble head
local comment = '' local comment = ''
local closeSquare,hitend,thisComment local closeSquare, hitend, thisComment
while (not hitend) and (not inStream:eof()) do while not hitend and (not inStream:eof()) do
closeSquare = string.find(line,']]') closeSquare = string.find(line, ']]')
if not closeSquare then -- need to look on another line if not closeSquare then -- need to look on another line
thisComment = line .. '\n' thisComment = line .. '\n'
line = inStream:getLine() line = inStream:getLine()
else else
thisComment = string.sub(line,1,closeSquare-1) thisComment = string.sub(line, 1, closeSquare - 1)
hitend = true hitend = true
-- unget the tail of the line -- unget the tail of the line
-- in most cases it's empty. This may make us less efficient but -- in most cases it's empty. This may make us less efficient but
-- easier to program -- easier to program
inStream:ungetLine(string_trim(string.sub(line,closeSquare+2))) inStream:ungetLine(string_trim(string.sub(line, closeSquare + 2)))
end end
comment = comment .. thisComment comment = comment .. thisComment
end end
if string.sub(comment,1,1)=='@' then -- it's a long magic comment if string.sub(comment, 1, 1) == '@' then -- it's a long magic comment
outStream:write('/*' .. comment .. '*/ ') outStream:write('/*' .. comment .. '*/ ')
fn_magic = checkComment4fn(fn_magic,comment) fn_magic = checkComment4fn(fn_magic, comment)
else -- discard else -- discard
outStream:write('/* zz:' .. comment .. '*/ ') outStream:write('/* zz:' .. comment .. '*/ ')
fn_magic = nil fn_magic = nil
@ -504,64 +504,67 @@ function TLua2DoX_filter.readfile(this,AppStamp,Filename)
end end
elseif string.find(line, '^function') or string.find(line, '^local%s+function') then elseif string.find(line, '^function') or string.find(line, '^local%s+function') then
generic = {} generic = {}
state = 'in_function' -- it's a function state = 'in_function' -- it's a function
local pos_fn = string.find(line,'function') local pos_fn = string.find(line, 'function')
-- function -- function
-- ....v... -- ....v...
if pos_fn then if pos_fn then
-- we've got a function -- we've got a function
local fn_type local fn_type
if string.find(line,'^local%s+') then if string.find(line, '^local%s+') then
fn_type = ''--'static ' -- static functions seem to be excluded fn_type = '' --'static ' -- static functions seem to be excluded
else else
fn_type = '' fn_type = ''
end end
local fn = TString_removeCommentFromLine(string_trim(string.sub(line,pos_fn+8))) local fn = TString_removeCommentFromLine(string_trim(string.sub(line, pos_fn + 8)))
if fn_magic then if fn_magic then
fn = fn_magic fn = fn_magic
end end
if string.sub(fn,1,1)=='(' then if string.sub(fn, 1, 1) == '(' then
-- it's an anonymous function -- it's an anonymous function
outStream:writelnComment(line) outStream:writelnComment(line)
else else
-- fn has a name, so is interesting -- fn has a name, so is interesting
-- want to fix for iffy declarations -- want to fix for iffy declarations
local open_paren = string.find(fn,'[%({]') local open_paren = string.find(fn, '[%({]')
if open_paren then if open_paren then
-- we might have a missing close paren -- we might have a missing close paren
if not string.find(fn,'%)') then if not string.find(fn, '%)') then
fn = fn .. ' ___MissingCloseParenHere___)' fn = fn .. ' ___MissingCloseParenHere___)'
end end
end end
-- Big hax -- Big hax
if string.find(fn, ":") then if string.find(fn, ':') then
-- TODO: We need to add a first parameter of "SELF" here -- TODO: We need to add a first parameter of "SELF" here
-- local colon_place = string.find(fn, ":") -- local colon_place = string.find(fn, ":")
-- local name = string.sub(fn, 1, colon_place) -- local name = string.sub(fn, 1, colon_place)
fn = fn:gsub(":", ".", 1) fn = fn:gsub(':', '.', 1)
outStream:writeln("/// @param self") outStream:writeln('/// @param self')
local paren_start = string.find(fn, "(", 1, true) local paren_start = string.find(fn, '(', 1, true)
local paren_finish = string.find(fn, ")", 1, true) local paren_finish = string.find(fn, ')', 1, true)
-- Nothing in between the parens -- Nothing in between the parens
local comma local comma
if paren_finish == paren_start + 1 then if paren_finish == paren_start + 1 then
comma = "" comma = ''
else else
comma = ", " comma = ', '
end end
fn = string.sub(fn, 1, paren_start) .. "self" .. comma .. string.sub(fn, paren_start + 1) fn = string.sub(fn, 1, paren_start)
.. 'self'
.. comma
.. string.sub(fn, paren_start + 1)
end end
-- add vanilla function -- add vanilla function
outStream:writeln(fn_type .. 'function ' .. fn .. '{}') outStream:writeln(fn_type .. 'function ' .. fn .. '{}')
end end
else else
this:warning(inStream:getLineNo(),'something weird here') this:warning(inStream:getLineNo(), 'something weird here')
end end
fn_magic = nil -- mustn't indavertently use it again fn_magic = nil -- mustn't indavertently use it again
@ -572,8 +575,8 @@ function TLua2DoX_filter.readfile(this,AppStamp,Filename)
-- fn_magic = nil -- mustn't indavertently use it again -- fn_magic = nil -- mustn't indavertently use it again
else else
state = '' -- unknown state = '' -- unknown
if #line>0 then -- we don't know what this line means, so just comment it out if #line > 0 then -- we don't know what this line means, so just comment it out
outStream:writeln('// zz: ' .. line) outStream:writeln('// zz: ' .. line)
else else
outStream:writeln() -- keep this line blank outStream:writeln() -- keep this line blank
@ -601,8 +604,7 @@ function TApp.init(this)
end end
function TApp.getRunStamp(this) function TApp.getRunStamp(this)
return this.name .. ' (' .. this.version .. ') ' return this.name .. ' (' .. this.version .. ') ' .. this.timestamp
.. this.timestamp
end end
function TApp.getVersion(this) function TApp.getVersion(this)
@ -639,8 +641,7 @@ else
local filename = argv1 local filename = argv1
local filter = TLua2DoX_filter() local filter = TLua2DoX_filter()
filter:readfile(appStamp,filename) filter:readfile(appStamp, filename)
end end
--eof --eof