使用IContract库定义的lint协定。
pyicontract-lint的Python项目详细描述
皮棉
pyicontract lint lints在python代码中使用 icontract library。
执行以下检查:
Description | Identifier |
---|---|
A preconditions expects a subset of function’s arguments. | pre-invalid-arg |
A snapshot expects at most an argument element of the function’s arguments. | snapshot-invalid-arg |
If a snapshot is defined on a function, a postcondition must be defined as well. | snapshot-wo-post |
A ^{tt1}$ function must be defined in the contract. | snapshot-wo-capture |
A postcondition expects a subset of function’s arguments. | post-invalid-arg |
If a function returns None, a postcondition should not expect ^{tt2}$ as argument. | post-result-none |
If a postcondition expects ^{tt2}$ argument, the function should not expect it. | post-result-conflict |
If a postcondition expects ^{tt4}$ argument, the function should not expect it. | post-old-conflict |
An invariant should only expect ^{tt5}$ argument. | inv-invalid-arg |
A ^{tt6}$ must be defined in the contract. | no-condition |
File must be valid Python code. | invalid-syntax |
用法
pyicontract lint分析代码并尝试使用 astroid library。因此,您需要确保导入的模块位于 PYTHONPATH在调用pyicontract lint之前。
设置环境后,使用位置参数列表作为路径调用pyicontract lint:
pyicontract-lint \ /path/to/some/directory/some-file.py \ /path/to/some/directory/another-file.py
您还可以在目录上调用它。pyicontract lint将递归搜索*.py文件(包括 子目录)并验证文件:
pyicontract-lint \
/path/to/some/directory
默认情况下,pyicontract lint以人类可读的详细格式输出错误。如果您喜欢json,请提供它 --format参数:
pyicontract-lint \ --format json \ /path/to/some/directory
如果一个或多个检查失败,返回代码将为非零。如果需要,可以指定--dont_panic参数 即使一个或多个检查失败,返回代码也为零:
pyicontract-lint \ --dont_panic \ /path/to/some/directory
要禁用对文件的任何pyicontract lint检查,请在文件的另一行添加# pyicontract-lint: disabled。 当您递归地对目录中的文件进行lint操作并希望排除某些文件时,这非常有用。
模块icontract_lint
如果要以编程方式使用pycontract lint,则在icontract_lint模块中提供该api。
icontract_line模块的主要入口点是:
- check_file(...):lint单个文件,
- check_recursively(...):lint一个目录和
- check_paths(...):lint文件和目录。
输出由函数output_verbose(...)和output_json(...)生成。
下面是一个示例代码,它对给定路径的列表进行lint操作并生成详细的输出:
importpathlibimportsysimporticontract_linterrors=icontract_lint.check_paths(paths=[pathlib.Path('/some/directory/file.py'),pathlib.Path('/yet/yet/another/directory'),pathlib.Path('/another/directory/another_file.py'),pathlib.Path('/yet/another/directory'),])output_verbose(errors=errors,stream=sys.stdout)
模块的完整文档可在 readthedocs。
安装
- 使用pip: 安装pyicontract lint
pip3 install pyicontract-lint
开发
- 查看存储库。
- 在存储库根目录中,创建虚拟环境:
python3 -m venv venv3
- 激活虚拟环境:
source venv3/bin/activate
- 安装开发依赖项:
pip3 install -e .[dev]
- 我们用毒物测试和包装分发。运行:
tox
- 我们还提供了一组预提交检查,lint和检查代码的格式。从激活的 具有开发依赖关系的虚拟环境:
./precommit.py
- 预提交脚本还可以自动格式化代码:
./precommit.py --overwrite