使用asts监视和管理关于python代码的可深度定制的度量
codewatch的Python项目详细描述
概述
使用asts监视和管理关于python代码的可深度定制的度量。
codewatch允许您编写简单的python代码来跟踪关于代码库状态的统计信息,并在这些统计信息上编写类似lint的断言。使用此选项可以逐步提高和改进代码库的质量,增加有问题代码的可见性,鼓励使用新模式,同时阻止旧模式,强制执行编码样式指南,或防止某些类型的回归错误。
代码监视的功能:
- 遍历项目目录
- 将代码解析为ast节点并调用访问者函数
- 访问者函数运行并填充统计字典
- 调用所有访问者函数后,将调用断言函数
- 您的断言函数可以对stats字典中的数据进行断言,将度量保存到仪表板,或任何您可以想到的内容
安装
Python:2.7、3.6、3.7
在终端中执行以下操作:
pip install codewatch
用法
codewatch codewatch_config_module
codewatch_config_module
是一个模块,应该包含访问者、断言和过滤器(如果需要的话)
访客
您应该使用@visit
装饰器。
传入节点是一个astroid节点,它遵循类似于ast.Node
fromcodewatchimportvisitdef_count_import(stats):stats.increment('total_imports_num')@visit('import')defcount_import(node,stats,_rel_file_path):_count_import(stats)@visit('importFrom')defcount_import_from(node,stats,_rel_file_path):_count_import(stats)
这将构建一个包含如下内容的统计字典:
{"total_imports_num":763}
断言
再次在codewatch_config_module
中,您可以使用@assertion
装饰器针对这个stat字典添加断言
fromcodewatchimportassertion@assertion()defnumber_of_imports_not_too_high(stats):threshold=700actual=stats.get('total_imports_num')err='There were {} total imports detected which exceeds threshold of {}'.format(actual,threshold)assertactual<=threshold,err
在这种情况下,断言将失败,因为763是newStat
,消息是:
There were 763 total imports detected which exceeds threshold of 700
将被打印
过滤器
您可以添加以下可选的筛选器:
- 目录过滤器(默认为跳过测试和迁移目录)
# visit all directoriesdefdirectory_filter(_dir_name):returnTrue
- 文件过滤器(默认情况下仅包括python文件,并跳过测试文件)
# visit all filesdeffile_filter(_file_name):returnTrue
调整这些过滤器以满足您的需要。
贡献
贡献者
感谢这些了不起的人emoji key:
Josh Doncaster Marsiglio ? | Rohit Jain ? | Chris Abiad ? | Francois Campbell ? | Monica Moore ? | Jay Crumb ? | Jake Bolam ? |
---|---|---|---|---|---|---|
Shouvik D'Costa ? | Siavash Bidgoly ? | Noah Negin-Ulster ? | Vardan Nadkarni ? | greenkeeper[bot] ? |
我们欢迎社会各界的贡献,无论是顶级帽匠还是非顶级帽匠。查看我们的contributing guidelines了解更多详细信息。
学分
特别感谢Carol Skelly捐赠了“tophat”github组织。