astmonkey是一组使用python ast的工具。

astmonke的Python项目详细描述


Python VersionsBuild StatusCoverage StatusCode Climate

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(如果要生成 图像):

examples/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

除非适用法律要求或书面同意,否则软件 根据许可证分发是按“原样”分发的, 无任何明示或默示的保证或条件。 有关管理权限的特定语言和 许可下的限制。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java编码具有多个父节点的唯一节点   java如何在Flatter中将图像保存到gallery?   java代码无法读取文件   java如何修复分组密码实现错误   java SpringBoot如何向其他URL发送响应   java将布局与viewPager重叠   java在活动之间共享ArrayList   铸造(Java)为什么是数学。ceil(15/10)是1.0而不是2.0?   java Android Emulator未启动,并出现以下错误   从http协议读取并放入字符串数组(Android/Java)   文件上载事件之前的java Richfaces文件上载组件   java无法部署/EJB项目   java为什么对空引用调用方法会成功编译?   用Java加载外部Jar文件   java Rsocket服务器异常:目标“”没有处理程序(目标未从客户端传递到服务器)