【发布时间】:2020-09-11 06:12:03
【问题描述】:
我有一个已维护多年的 Ruby 代码库。当我使用 RuboCop 检查代码风格时,它会给我带来成千上万的冒犯。有没有办法使用 RuboCop 只检查新添加的代码或新修改的代码,并且只报告该代码的违规行为?
【问题讨论】:
-
您可以将要检查的文件传递给
rubocop。如果您使用 git,您可以轻松检索已修改/新文件的列表。当然,这仍然会检查整个文件。
我有一个已维护多年的 Ruby 代码库。当我使用 RuboCop 检查代码风格时,它会给我带来成千上万的冒犯。有没有办法使用 RuboCop 只检查新添加的代码或新修改的代码,并且只报告该代码的违规行为?
【问题讨论】:
rubocop。如果您使用 git,您可以轻松检索已修改/新文件的列表。当然,这仍然会检查整个文件。
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 列表,并一一删除排除项,并在您有时间时一一修复违规行为。
但是请注意,排除项是基于文件的,而不是基于行的,因此您只能全局禁用 cops 或按文件禁用。当您对现有文件进行更改时,您新添加的代码也会禁用这些 cops,因此最好先启用文件 linting 并修复所有现有攻击。
还请注意,您可能必须使用--exclude-limit COUNT 选项,因为如果有多个COUNT 文件具有相同的攻击,Rubocop 将全局禁用它。默认值为 15,因此您应该将其设置为高于项目中文件总数的值。
另一个有用的参数是
rubocop --safe-auto-correct --disable-uncorrectable
这将安全地自动更正所有安全自动更正的罪行,并添加 cmets 以禁用警察以处理不可更正的罪行。
但是,我认为这实际上并不是 Rubocop 的工作。您的报告系统应该有记录“基线”的方法,并且只报告与该基线的偏差。
【讨论】:
我发现pronto-rubocop 可以完成这项工作
【讨论】: