使用asts监视和管理关于python代码的可深度定制的度量

codewatch的Python项目详细描述


versioncodecovBuildsGreenkeeper badge

Slack workspaceAll ContributorsLicenseMaturity badge - level 1

概述

使用asts监视和管理关于python代码的可深度定制的度量。

codewatch允许您编写简单的python代码来跟踪关于代码库状态的统计信息,并在这些统计信息上编写类似lint的断言。使用此选项可以逐步提高和改进代码库的质量,增加有问题代码的可见性,鼓励使用新模式,同时阻止旧模式,强制执行编码样式指南,或防止某些类型的回归错误。

代码监视的功能:

  1. 遍历项目目录
  2. 将代码解析为ast节点并调用访问者函数
  3. 访问者函数运行并填充统计字典
  4. 调用所有访问者函数后,将调用断言函数
  5. 您的断言函数可以对stats字典中的数据进行断言,将度量保存到仪表板,或任何您可以想到的内容

安装

Python:2.7、3.6、3.7

在终端中执行以下操作:

pip install codewatch

用法

codewatch codewatch_config_module

codewatch_config_module是一个模块,应该包含访问者、断言和过滤器(如果需要的话)

访客

您应该使用@visit装饰器。 传入节点是一个astroid节点,它遵循类似于ast.Node

的api。
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

将被打印

过滤器

您可以添加以下可选的筛选器:

  1. 目录过滤器(默认为跳过测试和迁移目录)
# visit all directoriesdefdirectory_filter(_dir_name):returnTrue
  1. 文件过滤器(默认情况下仅包括python文件,并跳过测试文件)
# visit all filesdeffile_filter(_file_name):returnTrue

调整这些过滤器以满足您的需要。

贡献

the Contributing docs

贡献者

感谢这些了不起的人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组织。

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

推荐PyPI第三方库


热门话题
将输入迷宫文件中的字符存储到2d数组(Java)   Vaadin中的java CDi未注入:NullPointerException   两个java日期之间的差异   java如何使用@patch使用jpa存储库更新单个字段   java GeoWebCache和osmdroid   Java:如何让对象侦听器在不同的类中工作?   对象的java子集   安全性无法在Java中设置客户端X509身份验证   java如何在安卓中将唯一的单词绑定到字符串   java如何读取txt并通过管道对其进行分隔   java如何避免if   java JSP带有一个HTML表,需要更新该表   java HashMap<String,Value>。remove()通过使用字符串同步。在钥匙上,这有用吗?还是这个坏代码?   java我的继承有问题