44import sys
55import argparse
66
7+ from arkdoc .generator .utils import extractor
8+ from arkdoc .parser import Source
79from . import logger
810from .logger_utils import LogLevel
911from .reader import parse_all_in
1416EXIT_FAILURE = 1
1517
1618
17- def compute ( args ) -> bool :
19+ def check_folders ( source_folder ) -> bool :
1820 global logger
1921
20- for folder in args . source_folder :
22+ for folder in source_folder :
2123 if not os .path .exists (folder ):
2224 logger .error (f"Folder `{ folder } ` does not exists" )
2325 return False
26+ return True
2427
25- if args .dry_run :
26- logger .level = LogLevel .DEBUG
28+
29+ def parse_all (source_folder , dry_run ) -> list :
30+ global logger
2731
2832 parsers = []
29- for folder in args . source_folder :
33+ for folder in source_folder :
3034 parsers += parse_all_in (folder )
3135 for p in parsers :
3236 logger .info (f"Parsing { p .filename } ..." )
3337 p .parse ()
3438
35- if args . dry_run :
39+ if dry_run :
3640 _ = list (p .extract_documentation ())
3741
42+ return parsers
43+
44+ def compute (args ) -> bool :
45+ global logger
46+
47+ if not check_folders (args .source_folder ):
48+ return False
49+ if args .dry_run :
50+ logger .level = LogLevel .DEBUG
51+
52+ parsers = parse_all (args .source_folder , args .dry_run )
53+
3854 if not args .dry_run :
55+ if args .extract_func_names :
56+ functions = []
57+ for p in parsers :
58+ prefix = os .path .splitext (os .path .basename (p .filename ))[0 ].lower ()
59+ for doc in p .extract_documentation ():
60+ if doc .source == Source .ArkScript :
61+ kw , name , * args = doc .signature ()
62+ if kw == "$" :
63+ # macro!
64+ functions .append (name )
65+ else :
66+ functions .append (prefix + ":" + name )
67+ elif doc .source == Source .Cpp :
68+ data , _ = extractor ({"name" : "" }, doc )
69+ functions .append (data ["name" ])
70+ print ("\n " .join (functions ))
71+ # early exit if the flag is present
72+ return True
73+
3974 if args .html :
4075 gen = HTMLGenerator (parsers , args .html , args .ark_version , args .root_dir )
4176 gen ()
@@ -57,6 +92,11 @@ def main() -> int:
5792 action = "store_true" ,
5893 help = "Run and log everything but don't generate any file" ,
5994 )
95+ cli .add_argument (
96+ "--extract-func-names" ,
97+ action = "store_true" ,
98+ help = "Extract only the function names, print them on separate lines and exit" ,
99+ )
60100 cli .add_argument ("--html" , type = str , help = "Output folder for the HTML docs" )
61101 cli .add_argument (
62102 "--root-dir" , type = str , default = "" , help = "The root dir for the links"
0 commit comments