Prepare for python 3.0: minimize "types" module where possible (gbrandl).
[docutils.git] / test / test_readers / test_python / showparse
blobd4d9a226407fe01a3da261e863267458b8b5be32
1 #! /usr/bin/env python
3 """
4 This is a tool for exploring abstract syntax trees generated by
5 ``parser.suite()`` from test data in
6 docutils/test/test_readers/test_python/test_parser or stdin.
8 Usage::
10 showparse <key> <index>
12 showparse < <module.py>
14 Where ``<key>`` is the key to the ``totest`` dictionary, and ``<index>`` is
15 the index of the list ``totest[key]``. If no arguments are given, stdin is
16 used for input.
17 """
19 import sys
20 import parser
21 import token
22 import symbol
23 import pprint
24 import test_parser
26 names = token.tok_name.copy()
27 names.update(symbol.sym_name)
29 def name_elements(ast):
30 if ast:
31 name = names[ast[0]]
32 ast[0] = '%s (%s)' % (name, ast[0])
33 for node in ast[1:]:
34 if type(node) is list:
35 name_elements(node)
37 if len(sys.argv) > 1:
38 key, caseno = sys.argv[1:]
39 print 'totest["%s"][%s][0]:\n' % (key, caseno)
40 input_text = test_parser.totest[key][int(caseno)][0]
41 else:
42 input_text = sys.stdin.read()
43 print input_text
44 module = parser.suite(input_text)
45 ast = parser.ast2list(module, line_info=1)
46 name_elements(ast)
47 pprint.pprint(ast)