Git Lint
项目描述
Git-Lint
Git-lint是一种逐步改进源代码的工具。
动机
通常,将编码风格强加给现有项目可能是一个噩梦。一些原因可能包括
代码库已经一团糟,工具的输出令人眼花缭乱。
开发者没有信心更改他们不拥有的行。
或者他们根本不知道该使用什么工具。
功能
此工具通过提供一个仅对修改过的文件进行lint的单一工具来解决上述所有3个问题。对于每种文件类型,它可能使用不止一个linter或工具。此外,默认情况下,它只报告添加或修改的行的问题。
当前linter
CSS
SCSS
Python
PHP
Javascript
JPEG
通过Jpegtran自定义
PNG
RST
JSON
通过python json.tool模块
YAML
INI
通过ConfigParser模块自定义
HTML
Ruby
Java
PMD(需要将脚本run.sh放置在您的PATH中)
Coffeescript
C++
示例使用
以下是最简单的调用方式,详细信息请查看帮助
$ git lint Linting file: src/html/main.js Line 13, E:0110: Line too long (328 characters). Line 31, E:0001: Extra space at end of line src/html/main.js: line 75, col 11, ['location'] is better written in dot notation. Linting file: src/html/main.css src/html/main.css: line 1, col 135, Warning - Duplicate property 'margin' found. Linting file: api.py api.py:6: [C0301(line-too-long), ] Line too long (87/80) api.py:6: [R0913(too-many-arguments), callMethod] Too many arguments (6/5) api.py:6: [C0103(invalid-name), callMethod] Invalid function name "callMethod"
默认情况下,git lint仅报告修改行的问题(除了一些检查整个文件是否合理的linters外)。要强制显示linters的所有输出,请使用-f选项。
安装
您可以使用以下命令安装、升级或卸载git-lint
$ pip install git-lint $ pip install --upgrade git-lint $ pip uninstall git-lint
配置
Git-lint附带一个默认配置,其中包括上述所有linters。如果您不喜欢这个列表,可以编写自己的配置并将其放入名为.gitlint.yaml的文件中,并将其放置在您的存储库根目录下。您可以将文件https://github.com/sk-/git-lint/blob/master/gitlint/configs/config.yaml复制到您的存储库中,并对其进行修改。
如果您添加了新的linters或向任何命令添加了新的标志,请与我们分享,这样我们就可以整合这些更改。
配置支持命令、要求和参数的两种变量
{REPO_HOME}:您的存储库的根目录。
{DEFAULT_CONFIGS}:默认配置文件的存储位置。
如果您需要在命令中包含如{}或{foo}之类的字符串,则需要将花括号加倍,如{{}}或{{foo}}。
Git配置
git-lint为git提供了一个预提交钩子。要为您存储库安装它,请执行以下操作
$ ln -s `which pre-commit.git-lint.sh` $PATH_TO_YOUR_REPO/.git/hooks/pre-commit
或者,如果您想全局安装它,请执行以下操作
$ ln -s `which pre-commit.git-lint.sh` /usr/share/git-core/templates/hooks/pre-commit
Mercurial配置
要使Mercurial中具有更好名称的git-lint可用,您必须在您的.hgrc配置文件中添加以下内容
[alias] lint = !git-lint $@
要添加预提交钩子,请添加以下内容
[hooks] pretxncommit.hglint = pre-commit.hg-lint.sh > `tty`
上面的钩子有一个用于显示命令输出的hack。此外,由于Mercurial(据我所知)不提供跳过钩子的方法,如果您想强制提交具有linters警告的提交,请按以下方式执行提交命令
$ NO_VERIFY=1 hg commit ...
请注意,Mercurial大量使用提交来利用其所有命令/扩展。我发现,在执行常见的操作如rebase或shelve时,设置任何类型的预提交钩子都会阻碍您的操作。
限制
在某些情况下,更改将触发另一行的警告。遗憾的是,git-lint无法处理这些情况,因为它仅报告已修改的行。要完全支持这种情况,需要运行linters两次,并仅报告新行。这种情况最常见的情况是未使用的导入或变量。例如,我们有以下代码片段
import foo foo.bar()
如果您删除第二行,git-lint不会抱怨,因为警告是针对第1行,该行未被修改。
Python版本
支持Python 2.7,并且它也应适用于Python 3.2、3.3和3.4。由于缺乏subprocess.check_output,不支持Python 2.6。
开发
欢迎为此项目提供帮助,因此请随时创建问题或通过http://github.com/sk-/git-lint发送pull请求。
使用nose运行测试,可以使用
$ python setup.py nosetests $ nosetests
此相同的工具在每次提交时都会运行,因此可以在早期捕获错误和样式问题。
添加linters
只需配置文件gitlint/config.yaml。我希望语法是自我解释的。(致自己的信:不要如此懒惰,为这个写一份正式的文档。)
待办事项和可能的功能
支持将目录作为参数
提供man页,以便“git help lint”和“git lint –help”工作。我已有一个将用法转换为man页面的脚本,但我仍需要弄清楚如何在系统上安装它。
允许在设置代码检查器时运行命令或函数?现在可以通过运行一个包含代码检查器的bash脚本来实现。这样做的理由是一些代码检查器,如jshint,只允许选项在配置文件中。目前,这通过“linters”文件夹中的脚本来实现。
根据整个文件名或命令返回的文件类型来决定使用哪个代码检查器。
提供更好的输出着色选项,也许还可以禁用它。同时检测颜色是否受支持或是否是tty。
增加对更多版本控制系统(svn、perforce)的支持。这应该很容易,只需实现gitlint/git.py或gitlint/hg.py中定义的函数即可。
支持Windows。
贡献者
变更日志
v0.1.2 (2018-05-24)
修复创建缓存目录时的竞争条件。
v0.1.1 (2018-05-15)
修复Python 3中futures依赖项无法正确工作的问题。
v0.1.0 (2018-02-26)
修复由于默认编码导致的某些系统中的设置问题。
更改版本以使用语义版本控制。如果版本是语义的,则此发布将仅是补丁。
v0.0.9 (2018-01-22)
修复pip安装和包中版本不匹配的问题。
添加多线程支持
v0.0.8 (2015-10-14)
修复git预提交钩子(感谢Rovanion Luckey)
修复问题#64,#67
v0.0.7 (2015-06-28)
更好地支持Python 3
移除对Python 3.2的支持
输出按行和列号排序
错误修复:问题#49,#50,#54,#62
添加coffelint支持
改进默认设置
v0.0.6 (2014-09-08)
添加mercurial支持
在Travis上运行端到端测试
v0.0.5 (2014-05-09)
添加代码检查器:ruby-lint,rubocop,checkstyle,pmd
可以在配置中指定变量 %(REPO_HOME)s 和 %(DEFAULT_CONFIGS)s
添加默认pylintrc配置
v0.0.4 (2014-05-08)
添加代码检查器:html,tidy,scss
添加覆盖默认配置的方法
Python3改进
v0.0.3 (2014-02-02)
修复过滤器语法问题
修复git解析器问题
添加代码检查器(YAML,Ini,PHP),并改进PNG和JPEG的代码检查器。
改进pylint配置。
改进phpcs配置。
检查程序是否可用,如果不可用则显示安装信息。
缓存代码检查器的输出,以便后续调用更快。
v0.0.2 (2013-10-20)
修复安装程序问题
v0.0.1 (2013-10-20)
初始提交,包含基本功能。主要发布以收集对功能和计划的想法的反馈。