bpo-38049: Add command-line interface for the ast module. (GH-15724)
This commit is contained in:
parent
b9f65f01fd
commit
832e864008
|
@ -340,6 +340,42 @@ and classes for traversing abstract syntax trees:
|
||||||
Added the *indent* option.
|
Added the *indent* option.
|
||||||
|
|
||||||
|
|
||||||
|
.. _ast-cli:
|
||||||
|
|
||||||
|
Command-Line Usage
|
||||||
|
------------------
|
||||||
|
|
||||||
|
.. versionadded:: 3.9
|
||||||
|
|
||||||
|
The :mod:`ast` module can be executed as a script from the command line.
|
||||||
|
It is as simple as:
|
||||||
|
|
||||||
|
.. code-block:: sh
|
||||||
|
|
||||||
|
python -m ast [-m <mode>] [-a] [infile]
|
||||||
|
|
||||||
|
The following options are accepted:
|
||||||
|
|
||||||
|
.. program:: ast
|
||||||
|
|
||||||
|
.. cmdoption:: -h, --help
|
||||||
|
|
||||||
|
Show the help message and exit.
|
||||||
|
|
||||||
|
.. cmdoption:: -m <mode>
|
||||||
|
--mode <mode>
|
||||||
|
|
||||||
|
Specify what kind of code must be compiled, like the *mode* argument
|
||||||
|
in :func:`parse`.
|
||||||
|
|
||||||
|
.. cmdoption:: -a, --include-attributes
|
||||||
|
|
||||||
|
Include attributes such as line numbers and column offsets.
|
||||||
|
|
||||||
|
If :file:`infile` is specified its contents are parsed to AST and dumped
|
||||||
|
to stdout. Otherwise, the content is read from stdin.
|
||||||
|
|
||||||
|
|
||||||
.. seealso::
|
.. seealso::
|
||||||
|
|
||||||
`Green Tree Snakes <https://greentreesnakes.readthedocs.io/>`_, an external documentation resource, has good
|
`Green Tree Snakes <https://greentreesnakes.readthedocs.io/>`_, an external documentation resource, has good
|
||||||
|
|
24
Lib/ast.py
24
Lib/ast.py
|
@ -550,3 +550,27 @@ _const_node_type_names = {
|
||||||
bytes: 'Bytes',
|
bytes: 'Bytes',
|
||||||
type(...): 'Ellipsis',
|
type(...): 'Ellipsis',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
import argparse
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser(prog='python -m ast')
|
||||||
|
parser.add_argument('infile', type=argparse.FileType(mode='rb'), nargs='?',
|
||||||
|
default='-',
|
||||||
|
help='the file to parse; defaults to stdin')
|
||||||
|
parser.add_argument('-m', '--mode', default='exec',
|
||||||
|
choices=('exec', 'single', 'eval', 'func_type'),
|
||||||
|
help='specify what kind of code must be parsed')
|
||||||
|
parser.add_argument('-a', '--include-attributes', action='store_true',
|
||||||
|
help='include attributes such as line numbers and '
|
||||||
|
'column offsets')
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
with args.infile as infile:
|
||||||
|
source = infile.read()
|
||||||
|
tree = parse(source, args.infile.name, args.mode, type_comments=True)
|
||||||
|
print(dump(tree, include_attributes=args.include_attributes, indent=3))
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Added command-line interface for the :mod:`ast` module.
|
Loading…
Reference in New Issue