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调用AmazonAWSAPI?   Java中的渗流   java在dao端使用逻辑不是一个好的实践吗?   java Swing绘制网格。韦尔德结果   java如何设置PlusOneButton对话框的共享选项的默认文本   java如何在firebase存储中管理多个上载/下载?   java Wicket在多个位置显示相同的文本   java使用j2me通过蓝牙从一个手机向另一个手机发送短信   java为什么不让DialogWait框自动关闭?   java Visual Studio代码JDBC访问Derby数据库   在java中如何根据日期从文件夹中获取文件   java如何从数据库加载多个数据   java匿名类和同步以及“this”   java无法使用Selenium上载文件   java多线程JAXR调用parallelStream还是Futures?   获取要编译的Netbeans Java程序   java检查二叉树是否为有效BST的函数中的“min”和“max”是什么?   java有人能解释为什么这段代码只在构造函数中工作吗?   java如何将多种类型的用户重定向到各自的活动?