问题描述
我有一个已维护多年的Ruby代码库。当我使用RuboCop来检查代码样式时,它会给我成千上万的冒犯。有没有办法使用RuboCop来仅检查新添加的代码或新修改的代码,并仅报告该代码的违规行为?
解决方法
Rubocop可通过多种方式帮助您。
如果您运行
rubocop --auto-gen-config
Rubocop将为您生成两个配置文件:几乎为空的.rubocop.yml
,其中仅包含一个密钥:
inherit_from: .rubocop_todo.yml
还有一个.rubocop_todo.yml
,它会基于文件逐个禁用代码库中发现的所有违法行为:
# This configuration was generated by
# `rubocop --auto-gen-config`
# on 2020-09-11 06:20:56 UTC using RuboCop version 0.90.0.
# The point is for the user to remove these configuration records
# one by one as the offenses are removed from the code base.
# Note that changes in the inspected code,or installation of new
# versions of RuboCop,may require this file to be generated again.
# Offense count: 1
# Cop supports --auto-correct.
Layout/SpaceAfterMethodName:
Exclude:
- 'test.rb'
# Offense count: 1
# Cop supports --auto-correct.
# Configuration parameters: AllowUnusedKeywordArguments,IgnoreEmptyMethods,IgnoreNotImplementedMethods.
Lint/UnusedMethodArgument:
Exclude:
- 'test.rb'
此文件用于两件事:
-
如果您组织的样式指南与默认的Rubocop配置不同,则可以将TODO中的攻击内容剪切并粘贴到“真实”配置文件中,并在全局范围内永久禁用它。
-
您可以将TODO文件用作实际的TODO列表,并一一删除排除项,并在有时间的时候一一修复违规。
但是,请注意,排除项是基于文件的,而不是基于行的,因此您只能全局或按文件禁用警察。当您对现有文件进行更改时,新添加的代码还将禁用那些警察,因此,最好先对文件进行掉毛并修复所有现有的违规行为。
还请注意,您可能必须使用--exclude-limit COUNT
选项,因为如果有多个COUNT
文件具有相同的冒犯行为,那么Rubocop只会全局禁用它。默认值为15,因此应将其设置为大于项目中文件总数的值。
另一个有用的参数是
rubocop --safe-auto-correct --disable-uncorrectable
这将安全地自动更正所有可以自动更正的犯罪,并添加注释以使警察无法进行不可更正的犯罪。
但是,我认为这实际上并不是Rubocop的工作。您的报告系统应该有一种记录“基准”的方法,并且只能报告与该基准的偏差。
,我发现pronto-rubocop可以胜任