Merge #22493 lua2dox.lua, vim.treesitter tags

This commit is contained in:
Justin M. Keyes 2023-03-03 09:19:29 -05:00 committed by GitHub
commit ef52592cf8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 114 additions and 116 deletions

View File

@ -120,7 +120,7 @@ LSP FUNCTIONS
or |vim.lsp.buf.format()| instead. or |vim.lsp.buf.format()| instead.
TREESITTER FUNCTIONS TREESITTER FUNCTIONS
- *vim.treesitter.language.require_language()* Use |vim.treesitter.language.add()| - *vim.treesitter.language.require_language()* Use |vim.treesitter.add()|
instead. instead.
- *vim.treesitter.get_node_at_pos()* Use |vim.treesitter.get_node()| - *vim.treesitter.get_node_at_pos()* Use |vim.treesitter.get_node()|
instead. instead.

View File

@ -162,11 +162,10 @@ The following new APIs or features were added.
• Treesitter captures can now be transformed by directives. This will allow • Treesitter captures can now be transformed by directives. This will allow
more complicated dynamic language injections. more complicated dynamic language injections.
• |vim.treesitter.query.get_node_text()| now accepts a `metadata` option for • |vim.treesitter.get_node_text()| now accepts a `metadata` option for
writing custom directives using |vim.treesitter.query.add_directive()|. writing custom directives using |vim.treesitter.add_directive()|.
• |vim.treesitter.language.add()| as a new replacement for • |vim.treesitter.add()| replaces `vim.treesitter.language.require_language`.
`vim.treesitter.language.require_language`.
• `require'bit'` is now always available |lua-bit| • `require'bit'` is now always available |lua-bit|
@ -225,8 +224,7 @@ DEPRECATIONS *news-deprecations*
The following functions are now deprecated and will be removed in the next The following functions are now deprecated and will be removed in the next
release. release.
• `vim.treesitter.language.require_language()` has been deprecated in favour • |vim.treesitter.add()| replaces `vim.treesitter.language.require_language()`
of |vim.treesitter.language.add()|.
• |vim.treesitter.get_node_at_pos()| and |vim.treesitter.get_node_at_cursor()| • |vim.treesitter.get_node_at_pos()| and |vim.treesitter.get_node_at_cursor()|
are both deprecated in favor of |vim.treesitter.get_node()|. are both deprecated in favor of |vim.treesitter.get_node()|.

View File

@ -272,9 +272,8 @@ The following predicates are built in:
Each predicate has a `not-` prefixed predicate that is just the negation of Each predicate has a `not-` prefixed predicate that is just the negation of
the predicate. the predicate.
Further predicates can be added via |vim.treesitter.query.add_predicate()|. Further predicates can be added via |vim.treesitter.add_predicate()|.
Use |vim.treesitter.query.list_predicates()| to list all available Use |vim.treesitter.list_predicates()| to list all available predicates.
predicates.
TREESITTER QUERY DIRECTIVES *treesitter-directives* TREESITTER QUERY DIRECTIVES *treesitter-directives*
@ -316,9 +315,8 @@ The following directives are built in:
((identifier) @constant (#offset! @constant 0 1 0 -1)) ((identifier) @constant (#offset! @constant 0 1 0 -1))
< <
Further directives can be added via |vim.treesitter.query.add_directive()|. Further directives can be added via |vim.treesitter.add_directive()|.
Use |vim.treesitter.query.list_directives()| to list all available Use |vim.treesitter.list_directives()| to list all available directives.
directives.
TREESITTER QUERY MODELINES *treesitter-query-modeline* TREESITTER QUERY MODELINES *treesitter-query-modeline*
@ -690,7 +688,7 @@ stop({bufnr}) *vim.treesitter.stop()*
============================================================================== ==============================================================================
Lua module: vim.treesitter.language *lua-treesitter-language* Lua module: vim.treesitter.language *lua-treesitter-language*
add({lang}, {opts}) *vim.treesitter.language.add()* add({lang}, {opts}) *vim.treesitter.add()*
Asserts that a parser for the language {lang} is installed. Asserts that a parser for the language {lang} is installed.
Parsers are searched in the `parser` runtime directory, or the provided Parsers are searched in the `parser` runtime directory, or the provided
@ -708,14 +706,14 @@ add({lang}, {opts}) *vim.treesitter.language.add()*
• symbol_name (string|nil) Internal symbol name for the • symbol_name (string|nil) Internal symbol name for the
language to load language to load
get_lang({filetype}) *vim.treesitter.language.get_lang()* get_lang({filetype}) *vim.treesitter.get_lang()*
Parameters: ~ Parameters: ~
• {filetype} (string) • {filetype} (string)
Return: ~ Return: ~
(string|nil) (string|nil)
inspect_language({lang}) *vim.treesitter.language.inspect_language()* inspect_language({lang}) *vim.treesitter.inspect_language()*
Inspects the provided language. Inspects the provided language.
Inspecting provides some useful information on the language like node Inspecting provides some useful information on the language like node
@ -727,7 +725,7 @@ inspect_language({lang}) *vim.treesitter.language.inspect_language()*
Return: ~ Return: ~
(table) (table)
register({lang}, {filetype}) *vim.treesitter.language.register()* register({lang}, {filetype}) *vim.treesitter.register()*
Register a lang to be used for a filetype (or list of filetypes). Register a lang to be used for a filetype (or list of filetypes).
Parameters: ~ Parameters: ~
@ -738,7 +736,7 @@ register({lang}, {filetype}) *vim.treesitter.language.register()*
============================================================================== ==============================================================================
Lua module: vim.treesitter.query *lua-treesitter-query* Lua module: vim.treesitter.query *lua-treesitter-query*
*vim.treesitter.query.add_directive()* *vim.treesitter.add_directive()*
add_directive({name}, {handler}, {force}) add_directive({name}, {handler}, {force})
Adds a new directive to be used in queries Adds a new directive to be used in queries
@ -760,7 +758,7 @@ add_directive({name}, {handler}, {force})
the predicate `{ "#set!", "conceal", "-" }` the predicate `{ "#set!", "conceal", "-" }`
• {force} (boolean|nil) • {force} (boolean|nil)
*vim.treesitter.query.add_predicate()* *vim.treesitter.add_predicate()*
add_predicate({name}, {handler}, {force}) add_predicate({name}, {handler}, {force})
Adds a new predicate to be used in queries Adds a new predicate to be used in queries
@ -768,11 +766,11 @@ add_predicate({name}, {handler}, {force})
• {name} (string) Name of the predicate, without leading # • {name} (string) Name of the predicate, without leading #
• {handler} function(match:table<string,|TSNode|>, pattern:string, • {handler} function(match:table<string,|TSNode|>, pattern:string,
bufnr:number, predicate:string[]) bufnr:number, predicate:string[])
• see |vim.treesitter.query.add_directive()| for argument • see |vim.treesitter.add_directive()| for argument
meanings meanings
• {force} (boolean|nil) • {force} (boolean|nil)
*vim.treesitter.query.get_node_text()* *vim.treesitter.get_node_text()*
get_node_text({node}, {source}, {opts}) get_node_text({node}, {source}, {opts})
Gets the text corresponding to a given node Gets the text corresponding to a given node
@ -785,12 +783,12 @@ get_node_text({node}, {source}, {opts})
true) true)
• metadata (table) Metadata of a specific capture. This • metadata (table) Metadata of a specific capture. This
would be set to `metadata[capture_id]` when using would be set to `metadata[capture_id]` when using
|vim.treesitter.query.add_directive()|. |vim.treesitter.add_directive()|.
Return: ~ Return: ~
(string[]|string|nil) (string[]|string|nil)
get_query({lang}, {query_name}) *vim.treesitter.query.get_query()* get_query({lang}, {query_name}) *vim.treesitter.get_query()*
Returns the runtime query {query_name} for {lang}. Returns the runtime query {query_name} for {lang}.
Parameters: ~ Parameters: ~
@ -800,7 +798,7 @@ get_query({lang}, {query_name}) *vim.treesitter.query.get_query()*
Return: ~ Return: ~
Query|nil Parsed query Query|nil Parsed query
*vim.treesitter.query.get_query_files()* *vim.treesitter.get_query_files()*
get_query_files({lang}, {query_name}, {is_included}) get_query_files({lang}, {query_name}, {is_included})
Gets the list of files used to make up a query Gets the list of files used to make up a query
@ -814,19 +812,19 @@ get_query_files({lang}, {query_name}, {is_included})
string[] query_files List of files to load for given query and string[] query_files List of files to load for given query and
language language
list_directives() *vim.treesitter.query.list_directives()* list_directives() *vim.treesitter.list_directives()*
Lists the currently available directives to use in queries. Lists the currently available directives to use in queries.
Return: ~ Return: ~
string[] List of supported directives. string[] List of supported directives.
list_predicates() *vim.treesitter.query.list_predicates()* list_predicates() *vim.treesitter.list_predicates()*
Lists the currently available predicates to use in queries. Lists the currently available predicates to use in queries.
Return: ~ Return: ~
string[] List of supported predicates. string[] List of supported predicates.
parse_query({lang}, {query}) *vim.treesitter.query.parse_query()* parse_query({lang}, {query}) *vim.treesitter.parse_query()*
Parse {query} as a string. (If the query is in a file, the caller should Parse {query} as a string. (If the query is in a file, the caller should
read the contents into a string before calling). read the contents into a string before calling).
@ -915,8 +913,7 @@ Query:iter_matches({self}, {node}, {source}, {start}, {stop})
(fun(): integer, table<integer,TSNode>, table): pattern id, match, (fun(): integer, table<integer,TSNode>, table): pattern id, match,
metadata metadata
*vim.treesitter.query.set_query()* set_query({lang}, {query_name}, {text}) *vim.treesitter.set_query()*
set_query({lang}, {query_name}, {text})
Sets the runtime query named {query_name} for {lang} Sets the runtime query named {query_name} for {lang}
This allows users to override any runtime files and/or configuration set This allows users to override any runtime files and/or configuration set
@ -931,17 +928,6 @@ set_query({lang}, {query_name}, {text})
============================================================================== ==============================================================================
Lua module: vim.treesitter.highlighter *lua-treesitter-highlighter* Lua module: vim.treesitter.highlighter *lua-treesitter-highlighter*
new({tree}, {opts}) *vim.treesitter.highlighter.new()*
Creates a new highlighter using
Parameters: ~
• {tree} |LanguageTree| parser object to use for highlighting
• {opts} (table|nil) Configuration of the highlighter:
• queries table overwrite queries used by the highlighter
Return: ~
TSHighlighter Created highlighter object
TSHighlighter:destroy({self}) *TSHighlighter:destroy()* TSHighlighter:destroy({self}) *TSHighlighter:destroy()*
Removes all internal references to the highlighter Removes all internal references to the highlighter
@ -1103,21 +1089,4 @@ LanguageTree:trees({self}) *LanguageTree:trees()*
Parameters: ~ Parameters: ~
• {self} • {self}
new({source}, {lang}, {opts}) *vim.treesitter.languagetree.new()*
A |LanguageTree| holds the treesitter parser for a given language {lang}
used to parse a buffer. As the buffer may contain injected languages, the LanguageTree needs to store parsers for these child languages as well (which in turn
may contain child languages themselves, hence the name).
Parameters: ~
• {source} (integer|string) Buffer or a string of text to parse
• {lang} (string) Root language this tree represents
• {opts} (table|nil) Optional keyword arguments:
• injections table Mapping language to injection query
strings. This is useful for overriding the built-in
runtime file searching for the injection language query
per language.
Return: ~
|LanguageTree| parser object
vim:tw=78:ts=8:sw=4:sts=4:et:ft=help:norl: vim:tw=78:ts=8:sw=4:sts=4:et:ft=help:norl:

View File

@ -58,7 +58,9 @@ function TSHighlighterQuery:query()
return self._query return self._query
end end
--- Creates a new highlighter using @param tree ---@private
---
--- Creates a highlighter for `tree`.
--- ---
---@param tree LanguageTree parser object to use for highlighting ---@param tree LanguageTree parser object to use for highlighting
---@param opts (table|nil) Configuration of the highlighter: ---@param opts (table|nil) Configuration of the highlighter:

View File

@ -38,18 +38,16 @@ local LanguageTree = {}
LanguageTree.__index = LanguageTree LanguageTree.__index = LanguageTree
--- A |LanguageTree| holds the treesitter parser for a given language {lang} used --- @private
--- to parse a buffer. As the buffer may contain injected languages, the LanguageTree
--- needs to store parsers for these child languages as well (which in turn may contain
--- child languages themselves, hence the name).
--- ---
---@param source (integer|string) Buffer or a string of text to parse --- |LanguageTree| contains a tree of parsers: the root treesitter parser for {lang} and any
---@param lang string Root language this tree represents --- "injected" language parsers, which themselves may inject other languages, recursively.
---@param opts (table|nil) Optional keyword arguments: ---
--- - injections table Mapping language to injection query strings. ---@param source (integer|string) Buffer or text string to parse
--- This is useful for overriding the built-in ---@param lang string Root language of this tree
--- runtime file searching for the injection language ---@param opts (table|nil) Optional arguments:
--- query per language. --- - injections table Map of language to injection query strings. Overrides the
--- built-in runtime file searching for language injections.
---@return LanguageTree parser object ---@return LanguageTree parser object
function LanguageTree.new(source, lang, opts) function LanguageTree.new(source, lang, opts)
language.add(lang) language.add(lang)

View File

@ -273,8 +273,7 @@ end
---@param opts (table|nil) Optional parameters. ---@param opts (table|nil) Optional parameters.
--- - concat: (boolean) Concatenate result in a string (default true) --- - concat: (boolean) Concatenate result in a string (default true)
--- - metadata (table) Metadata of a specific capture. This would be --- - metadata (table) Metadata of a specific capture. This would be
--- set to `metadata[capture_id]` when using --- set to `metadata[capture_id]` when using |vim.treesitter.add_directive()|.
--- |vim.treesitter.query.add_directive()|.
---@return (string[]|string|nil) ---@return (string[]|string|nil)
function M.get_node_text(node, source, opts) function M.get_node_text(node, source, opts)
opts = opts or {} opts = opts or {}
@ -486,7 +485,7 @@ local directive_handlers = {
--- ---
---@param name string Name of the predicate, without leading # ---@param name string Name of the predicate, without leading #
---@param handler function(match:table<string,TSNode>, pattern:string, bufnr:number, predicate:string[]) ---@param handler function(match:table<string,TSNode>, pattern:string, bufnr:number, predicate:string[])
--- - see |vim.treesitter.query.add_directive()| for argument meanings --- - see |vim.treesitter.add_directive()| for argument meanings
---@param force boolean|nil ---@param force boolean|nil
function M.add_predicate(name, handler, force) function M.add_predicate(name, handler, force)
if predicate_handlers[name] and not force then if predicate_handlers[name] and not force then

View File

@ -265,6 +265,7 @@ CONFIG = {
'query.lua', 'query.lua',
'highlighter.lua', 'highlighter.lua',
'languagetree.lua', 'languagetree.lua',
'playground.lua',
], ],
'files': [ 'files': [
'runtime/lua/vim/treesitter.lua', 'runtime/lua/vim/treesitter.lua',
@ -286,7 +287,7 @@ CONFIG = {
if fstem == 'treesitter' if fstem == 'treesitter'
else f'*{name}()*' else f'*{name}()*'
if name[0].isupper() if name[0].isupper()
else f'*vim.treesitter.{fstem}.{name}()*'), else f'*vim.treesitter.{name}()*'),
'module_override': {}, 'module_override': {},
'append_only': [], 'append_only': [],
} }
@ -1171,10 +1172,12 @@ def main(doxygen_config, args):
msg_report() msg_report()
def filter_source(filename): def filter_source(filename, keep_tmpfiles):
output_dir = out_dir.format(target='lua2dox')
name, extension = os.path.splitext(filename) name, extension = os.path.splitext(filename)
if extension == '.lua': if extension == '.lua':
p = subprocess.run([str(nvim), '-l', lua2dox, filename], stdout=subprocess.PIPE) args = [str(nvim), '-l', lua2dox, filename] + (['--outdir', output_dir] if keep_tmpfiles else [])
p = subprocess.run(args, stdout=subprocess.PIPE)
op = ('?' if 0 != p.returncode else p.stdout.decode('utf-8')) op = ('?' if 0 != p.returncode else p.stdout.decode('utf-8'))
print(op) print(op)
else: else:
@ -1197,7 +1200,7 @@ def parse_args():
ap.add_argument('source_filter', nargs='*', ap.add_argument('source_filter', nargs='*',
help="Filter source file(s)") help="Filter source file(s)")
ap.add_argument('-k', '--keep-tmpfiles', action='store_true', ap.add_argument('-k', '--keep-tmpfiles', action='store_true',
help="Keep temporary files") help="Keep temporary files (tmp-xx-doc/ directories, including tmp-lua2dox-doc/ for lua2dox.lua quasi-C output)")
ap.add_argument('-t', '--target', ap.add_argument('-t', '--target',
help=f'One of ({targets}), defaults to "all"') help=f'One of ({targets}), defaults to "all"')
return ap.parse_args() return ap.parse_args()
@ -1245,8 +1248,13 @@ if __name__ == "__main__":
log.setLevel(args.log_level) log.setLevel(args.log_level)
log.addHandler(logging.StreamHandler()) log.addHandler(logging.StreamHandler())
# When invoked as a filter, args won't be passed, so use an env var.
if args.keep_tmpfiles:
os.environ['NVIM_KEEP_TMPFILES'] = '1'
keep_tmpfiles = ('NVIM_KEEP_TMPFILES' in os.environ)
if len(args.source_filter) > 0: if len(args.source_filter) > 0:
filter_source(args.source_filter[0]) filter_source(args.source_filter[0], keep_tmpfiles)
else: else:
main(Doxyfile, args) main(Doxyfile, args)

View File

@ -24,11 +24,18 @@ Lua-to-Doxygen converter
Partially from lua2dox Partially from lua2dox
http://search.cpan.org/~alec/Doxygen-Lua-0.02/lib/Doxygen/Lua.pm http://search.cpan.org/~alec/Doxygen-Lua-0.02/lib/Doxygen/Lua.pm
Running RUNNING
------- -------
This script "lua2dox.lua" gets called by "gen_vimdoc.py". This script "lua2dox.lua" gets called by "gen_vimdoc.py".
DEBUGGING/DEVELOPING
---------------------
1. To debug, run gen_vimdoc.py with --keep-tmpfiles:
python3 scripts/gen_vimdoc.py -t treesitter --keep-tmpfiles
2. The filtered result will be written to ./tmp-lua2dox-doc/.lua.c
Doxygen must be on your system. You can experiment like so: Doxygen must be on your system. You can experiment like so:
- Run "doxygen -g" to create a default Doxyfile. - Run "doxygen -g" to create a default Doxyfile.
@ -49,6 +56,9 @@ However I have put in a hack that will insert the "missing" close paren.
The effect is that you will get the function documented, but not with the parameter list you might expect. The effect is that you will get the function documented, but not with the parameter list you might expect.
]] ]]
local _debug_outfile = nil
local _debug_output = {}
local function class() local function class()
local newClass = {} -- a new class newClass local newClass = {} -- a new class newClass
-- the class will be the metatable for all its newInstanceects, -- the class will be the metatable for all its newInstanceects,
@ -71,27 +81,28 @@ local function class()
return newClass return newClass
end end
--! \brief write to stdout -- 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)
if _debug_outfile then
table.insert(_debug_output, Str)
end
end end
end end
--! \brief write to stdout -- write to stdout
local function TCore_IO_writeln(Str) local function TCore_IO_writeln(Str)
if Str then TCore_IO_write(Str)
io.write(Str) TCore_IO_write('\n')
end
io.write('\n')
end end
--! \brief trims a string -- 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 -- split a string
--! --!
--! \param Str --! \param Str
--! \param Pattern --! \param Pattern
@ -117,12 +128,12 @@ local function string_split(Str, Pattern)
end end
------------------------------- -------------------------------
--! \brief file buffer -- file buffer
--! --!
--! an input file buffer --! an input file buffer
local TStream_Read = class() local TStream_Read = class()
--! \brief get contents of file -- 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)
@ -143,12 +154,12 @@ function TStream_Read.getContents(this, Filename)
return filecontents return filecontents
end end
--! \brief get lineno -- get lineno
function TStream_Read.getLineNo(this) function TStream_Read.getLineNo(this)
return this.currentLineNo return this.currentLineNo
end end
--! \brief get a line -- get a line
function TStream_Read.getLine(this) function TStream_Read.getLine(this)
local line local line
if this.currentLine then if this.currentLine then
@ -166,12 +177,12 @@ function TStream_Read.getLine(this)
return line return line
end end
--! \brief save line fragment -- 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? -- 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
@ -179,31 +190,31 @@ function TStream_Read.eof(this)
return true return true
end end
--! \brief output stream -- output stream
local TStream_Write = class() local TStream_Write = class()
--! \brief constructor -- constructor
function TStream_Write.init(this) function TStream_Write.init(this)
this.tailLine = {} this.tailLine = {}
end end
--! \brief write immediately -- 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 -- 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 -- 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 -- 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 = ''
@ -211,7 +222,7 @@ function TStream_Write.writelnTail(this, Line)
table.insert(this.tailLine, Line) table.insert(this.tailLine, Line)
end end
--! \brief output tail lines -- 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)
@ -219,17 +230,17 @@ function TStream_Write.write_tailLines(this)
TCore_IO_write('// Lua2DoX new eof') TCore_IO_write('// Lua2DoX new eof')
end end
--! \brief input filter -- input filter
local TLua2DoX_filter = class() local TLua2DoX_filter = class()
--! \brief allow us to do errormessages -- 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
--! \brief trim comment off end of string -- trim comment off end of string
--! --!
--! 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.
--! --!
@ -243,7 +254,7 @@ local function TString_removeCommentFromLine(Line)
return Line, tailComment return Line, tailComment
end end
--! \brief get directive from magic -- get directive from magic
local function getMagicDirective(Line) local function getMagicDirective(Line)
local macro, tail local macro, tail
local macroStr = '[\\@]' local macroStr = '[\\@]'
@ -264,7 +275,7 @@ local function getMagicDirective(Line)
return macro, tail return macro, tail
end end
--! \brief check comment for fn -- 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 .. '"')
@ -293,8 +304,8 @@ local tagged_types = { 'TSNode', 'LanguageTree' }
-- Document these as 'table' -- Document these as 'table'
local alias_types = { 'Range4', 'Range6' } local alias_types = { 'Range4', 'Range6' }
--! \brief run the filter -- Processes the file and writes filtered output to stdout.
function TLua2DoX_filter.readfile(this, AppStamp, Filename) function TLua2DoX_filter.filter(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
@ -524,10 +535,10 @@ function TLua2DoX_filter.readfile(this, AppStamp, Filename)
end end
end end
--! \brief this application -- this application
local TApp = class() local TApp = class()
--! \brief constructor -- constructor
function TApp.init(this) function TApp.init(this)
this.timestamp = os.date('%c %Z', os.time()) this.timestamp = os.date('%c %Z', os.time())
this.name = 'Lua2DoX' this.name = 'Lua2DoX'
@ -551,8 +562,7 @@ local This_app = TApp()
--main --main
local argv1 = arg[1] if arg[1] == '--help' then
if argv1 == '--help' then
TCore_IO_writeln(This_app:getVersion()) TCore_IO_writeln(This_app:getVersion())
TCore_IO_writeln(This_app:getCopyright()) TCore_IO_writeln(This_app:getCopyright())
TCore_IO_writeln([[ TCore_IO_writeln([[
@ -563,16 +573,30 @@ if argv1 == '--help' then
<filename> : interprets filename <filename> : interprets filename
--version : show version/copyright info --version : show version/copyright info
--help : this help text]]) --help : this help text]])
elseif argv1 == '--version' then elseif arg[1] == '--version' then
TCore_IO_writeln(This_app:getVersion()) TCore_IO_writeln(This_app:getVersion())
TCore_IO_writeln(This_app:getCopyright()) TCore_IO_writeln(This_app:getCopyright())
else else -- It's a filter.
-- it's a filter local filename = arg[1]
local appStamp = This_app:getRunStamp()
local filename = argv1
if arg[2] == '--outdir' then
local outdir = arg[3]
if type(outdir) ~= 'string' or (0 ~= vim.fn.filereadable(outdir) and 0 == vim.fn.isdirectory(outdir)) then
error(('invalid --outdir: "%s"'):format(tostring(outdir)))
end
vim.fn.mkdir(outdir, 'p')
_debug_outfile = string.format('%s/%s.c', outdir, vim.fs.basename(filename))
end
local appStamp = This_app:getRunStamp()
local filter = TLua2DoX_filter() local filter = TLua2DoX_filter()
filter:readfile(appStamp, filename) filter:filter(appStamp, filename)
if _debug_outfile then
local f = assert(io.open(_debug_outfile, 'w'))
f:write(table.concat(_debug_output))
f:close()
end
end end
--eof --eof