OILS / devtools / pyann_driver.py View on Github | oils.pub

129 lines, 77 significant
1#!/usr/bin/env python2
2"""
3pyann_driver.py: Collect types
4"""
5import unittest
6
7from pyannotate_runtime import collect_types
8
9#from asdl import typed_arith_parse_test
10from asdl import format_test
11from core import comp_ui_test
12from osh import arith_parse_test
13from osh import bool_parse_test
14from osh import cmd_parse_test
15from osh import word_parse_test
16from asdl.util import log
17
18import glob
19
20
21def TopLevel():
22 """Copy some metaprogramming that only happens at the top level."""
23 # from core/meta.py
24 from core.meta import (_ID_TO_KIND_INTEGERS, BOOL_ARG_TYPES,
25 TEST_UNARY_LOOKUP, TEST_BINARY_LOOKUP,
26 TEST_OTHER_LOOKUP, types_asdl)
27 from core import id_kind_def
28
29 ID_SPEC = id_kind_def.IdSpec(_ID_TO_KIND_INTEGERS, BOOL_ARG_TYPES)
30
31 id_kind_def.AddKinds(ID_SPEC)
32 id_kind_def.AddBoolKinds(ID_SPEC,
33 types_asdl.bool_arg_type_e) # must come second
34 id_kind_def.SetupTestBuiltin(ID_SPEC, TEST_UNARY_LOOKUP,
35 TEST_BINARY_LOOKUP, TEST_OTHER_LOOKUP,
36 types_asdl.bool_arg_type_e)
37
38 from osh import arith_parse
39 spec = arith_parse.MakeShellSpec()
40
41
42def Match():
43 from frontend.match import _MatchOshToken_Slow, _MatchTokenSlow
44 from frontend import lexer_def
45 MATCHER = _MatchOshToken_Slow(lexer_def.LEXER_DEF)
46 ECHO_MATCHER = _MatchTokenSlow(lexer_def.ECHO_E_DEF)
47 GLOB_MATCHER = _MatchTokenSlow(lexer_def.GLOB_DEF)
48 PS1_MATCHER = _MatchTokenSlow(lexer_def.PS1_DEF)
49 HISTORY_MATCHER = _MatchTokenSlow(lexer_def.HISTORY_DEF)
50
51
52def Arith():
53 from osh.arith_parse import MakeShellSpec
54 SPEC = MakeShellSpec()
55
56
57def UnitTests():
58 loader = unittest.TestLoader()
59
60 g = glob.glob
61 py = g('asdl/*_test.py')
62
63 #py = g('lazylex/*_test.py') + g('doctools/*_test.py')
64 #py = g('frontend/*_test.py') + g('osh/*_test.py') + g('core/*_test.py') + g('')
65 # hangs
66 #py.remove('core/process_test.py')
67
68 modules = []
69 for p in py:
70 log('p %s', p)
71 mod_name = p[:-3].replace('/', '.')
72 print(mod_name)
73 modules.append(__import__(mod_name, fromlist=['.']))
74
75 for m in modules:
76 print(m)
77
78 suites = [loader.loadTestsFromModule(m) for m in modules]
79
80 suite = unittest.TestSuite()
81 for s in suites:
82 suite.addTest(s)
83
84 runner = unittest.TextTestRunner()
85
86 collect_types.init_types_collection()
87 with collect_types.collect():
88 runner.run(suite)
89
90 collect_types.dump_stats('type_info.json')
91
92
93def Doctools():
94 from doctools import help_gen
95 from doctools import oils_doc
96
97 collect_types.init_types_collection()
98 with collect_types.collect():
99 help_gen.main([
100 '', 'cards-from-chapters', '_devbuild/help',
101 '_tmp/code-blocks/help_meta.py', '_gen/frontend/help_meta',
102 '_release/VERSION/doc/ref/chap-front-end.html'
103 ])
104 #oils_doc.main([])
105
106 collect_types.dump_stats('type_info.json')
107
108
109def AsdlCompiler():
110 from asdl import asdl_main
111
112 collect_types.init_types_collection()
113 with collect_types.collect():
114 #asdl_main.main(['', 'mypy', 'frontend/syntax.asdl'])
115 #asdl_main.main(['', 'cpp', 'frontend/syntax.asdl', '_tmp'])
116 asdl_main.main(['', 'metrics', 'frontend/syntax.asdl'])
117 asdl_main.main(['', 'closure', 'frontend/syntax.asdl', 'command'])
118
119 collect_types.dump_stats('type_info.json')
120
121
122def main():
123 #UnitTests()
124 #Doctools()
125 AsdlCompiler()
126
127
128if __name__ == '__main__':
129 main()