astmonkey是一组使用python ast的工具。
astmonke的Python项目详细描述
astmonkey是一组使用python ast的工具。
安装
您可以从pypi安装astmonkey:
$ pip install astmonkey
如果要进行最新更改,应克隆此存储库并使用setup.py:
$ git clone https://github.com/mutpy/astmonkey.git $ cd astmonkey $ python setup.py install
visitors.sourcegeneratornodevisitor
这个访问者允许ast到python的代码生成。它最初是由 armin ronacher(2008,许可证bsd)作为codegen.py模块。astmonkey版本 修复了一些错误,代码覆盖率很高。
示例用法:
import ast from astmonkey import visitors code = 'x = (y + 1)' node = ast.parse(code) generated_code = visitors.to_source(node) assert(code == generated_code)
transformers.parentChildNodeTransformer
此转换器向ast中的每个节点添加几个字段:
- parent-链接到父节点,
- parents-所有父节点的列表(只有ast.expr_context节点有多个父节点,其他原因是这是一个元素列表),
- parent_field-父节点(包括子节点)中字段的名称,
- parent_field_index-父节点字段索引(如果是列表)。
- children-链接到子节点。
示例用法:
import ast from astmonkey import transformers node = ast.parse('x = 1') node = transformers.ParentChildNodeTransformer().visit(node) assert(node == node.body[0].parent) assert(node.body[0].parent_field == 'body') assert(node.body[0].parent_field_index == 0) assert(node.body[0] in node.children)
visitors.graphnodevisitor
这个访问者从python ast(通过pydot)创建graphviz图。使用前 GraphNodeVisitor您需要将父链接添加到树节点(使用 ParentChildNodeTransformer)。
示例用法:
import ast from astmonkey import visitors, transformers node = ast.parse('def foo(x):\n\treturn x + 1') node = transformers.ParentChildNodeTransformer().visit(node) visitor = visitors.GraphNodeVisitor() visitor.visit(node) visitor.graph.write_png('graph.png')
生成了graph.png(如果要生成 图像):
utils.is_docstring
此例程检查目标节点是否为docstring。使用前 is_docstring您需要将父链接添加到树节点(使用 ParentChildNodeTransformer)。
示例用法:
import ast from astmonkey import utils, transformers node = ast.parse('def foo(x):\n\t"""doc"""') node = transformers.ParentChildNodeTransformer().visit(node) docstring_node = node.body[0].body[0].value assert(not utils.is_docstring(node)) assert(utils.is_docstring(docstring_node))
许可证
版权所有【2013】【Konrad Ha_as】
根据apache许可证2.0版(以下简称“许可证”)授权; 除非符合许可证,否则您不能使用此文件。 您可以在
http://www.apache.org/licenses/LICENSE-2.0
除非适用法律要求或书面同意,否则软件 根据许可证分发是按“原样”分发的, 无任何明示或默示的保证或条件。 有关管理权限的特定语言和 许可下的限制。