确保抽象语法树在提交时保持不变。

astdiff的Python项目详细描述


astdiff

比较git存储库中的两个提交,以确保没有语义更改。

使用此工具可以证实格式化工具不会更改代码。如果astdiff返回0,则抽象语法 提交中更改的文件的树是相同的。

安装

使用pip

pip install astdiff

开发安装

要审核或修改代码,请在开发模式下安装astdiff。该工具使用poetry来管理依赖项 以及构建pip可安装的包。

$ git clone https://github.com/auntbertha/astdiff.git
$ cd astdiff
$ poetry develop
$ poetry run pytest

要构建新包:

$ poetry build

从目录dist/中分发轮子或tarball。

用法

astdiff最基本的用途是检查重新格式化工具没有更改代码的含义。当它是 调用时没有参数astdiff将工作树与当前分支的头进行比较:

$ astdiff
Running: git diff --name-only 9d3219ba027d5a56040d23eb9ee3d23f7a410ad5
Checking astdiff/astdiff.py ... ok
✨ All files are equivalent! ✨
$ echo$?0

astdiff如果AST相同,则返回0,否则返回1。消息被打印为标准错误。

astdiff还可以检查给定的提交、给定的提交和工作树,或任何一对提交。它接受 提交的名称与git的方式相同。

使用-h--help获取帮助:

$ astdiff -h
Usage: astdiff.py [OPTIONS][COMMITS]...

  Compare the AST of all changed files between commits.

  With no arguments, compare between HEAD and the working tree.
  With one argument COMMIT, compare between COMMIT~1 and COMMIT.
  With two arguments, COMMIT1 and COMMIT2, compare between those two.

  (COMMIT2 can be a dot '.' to compare between COMMIT1 and the working tree)

Options:
  -h, --help  Show this message and exit.

算法

asts的比较是一个非常简单的递归函数,它首先以预先排序的深度遍历树。 搜索。它可以被审计以验证其正确性:astdiff.compare_ast

许可证

麻省理工学院执照

版权所有©2018伯莎阿姨

特此免费授予获得本软件副本和相关文档文件(以下简称“软件”)的任何人使用本软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再授权和/或出售本软件副本的权利,并在符合以下条件的情况下,允许向其提供软件的人员这样做:

上述版权声明和本许可声明应包含在软件的所有副本或实质性部分中。

<软件>提供“原样”,无任何担保,明示或默示,包括但不限于适销性、适合特定用途和不侵权的保证。在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,无论是在合同诉讼、侵权诉讼或其他诉讼中,由软件或软件的使用或其他交易引起的、由软件引起的或与之相关的。

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

推荐PyPI第三方库


热门话题
java如何加载JNI。具有依赖项的动态库文件,但未获得未满足的链接错误?   java ResultSet元数据未返回第一行   无法从java xml解析器中的当前节点获取节点列表   java如何从for循环值创建单个数组   java如何在没有arrayList的情况下查找对象   java ItemizedOverlayWithFocus在聚焦osmdroid时显示另一个覆盖   java使用迭代器进行“向下”迭代的优雅方式   java如何使用OnListItemClick为listview和AlertDialog使用单独的arraylist?   arraylist读取txt文件Java中存储的数组   javascript IE 11与RicoLive Grid 2.2框架不兼容   java我能得到水豚的maven依赖性吗?   简单Escp Java:PrintPreviewPane在JDK7中不起作用   java取出给定字符串的一部分,并将所取部分作为变量返回?   java如何替换“instanceof”函数中的变量   来自url的Java utf8编码   java方法获取类Gregorianalendar?   安卓如何在java 7中使用AndroidStudio和DDMS监视器   java测试在JUnit4下运行,但不是在JUnit5下运行-编译干净,但执行0测试   java无法使用Azure服务总线发送消息