确保抽象语法树在提交时保持不变。
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伯莎阿姨
特此免费授予获得本软件副本和相关文档文件(以下简称“软件”)的任何人使用本软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再授权和/或出售本软件副本的权利,并在符合以下条件的情况下,允许向其提供软件的人员这样做:
上述版权声明和本许可声明应包含在软件的所有副本或实质性部分中。
<软件>提供“原样”,无任何担保,明示或默示,包括但不限于适销性、适合特定用途和不侵权的保证。在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,无论是在合同诉讼、侵权诉讼或其他诉讼中,由软件或软件的使用或其他交易引起的、由软件引起的或与之相关的。