4
4
import sys
5
5
import argparse
6
6
7
+ from arkdoc .generator .utils import extractor
8
+ from arkdoc .parser import Source
7
9
from . import logger
8
10
from .logger_utils import LogLevel
9
11
from .reader import parse_all_in
14
16
EXIT_FAILURE = 1
15
17
16
18
17
- def compute ( args ) -> bool :
19
+ def check_folders ( source_folder ) -> bool :
18
20
global logger
19
21
20
- for folder in args . source_folder :
22
+ for folder in source_folder :
21
23
if not os .path .exists (folder ):
22
24
logger .error (f"Folder `{ folder } ` does not exists" )
23
25
return False
26
+ return True
24
27
25
- if args .dry_run :
26
- logger .level = LogLevel .DEBUG
28
+
29
+ def parse_all (source_folder , dry_run ) -> list :
30
+ global logger
27
31
28
32
parsers = []
29
- for folder in args . source_folder :
33
+ for folder in source_folder :
30
34
parsers += parse_all_in (folder )
31
35
for p in parsers :
32
36
logger .info (f"Parsing { p .filename } ..." )
33
37
p .parse ()
34
38
35
- if args . dry_run :
39
+ if dry_run :
36
40
_ = list (p .extract_documentation ())
37
41
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
+
38
54
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
+
39
74
if args .html :
40
75
gen = HTMLGenerator (parsers , args .html , args .ark_version , args .root_dir )
41
76
gen ()
@@ -57,6 +92,11 @@ def main() -> int:
57
92
action = "store_true" ,
58
93
help = "Run and log everything but don't generate any file" ,
59
94
)
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
+ )
60
100
cli .add_argument ("--html" , type = str , help = "Output folder for the HTML docs" )
61
101
cli .add_argument (
62
102
"--root-dir" , type = str , default = "" , help = "The root dir for the links"
0 commit comments