【问题标题】:Is there a way to do incremental linting with RuboCop?有没有办法使用 RuboCop 进行增量 linting?
【发布时间】:2020-09-11 06:12:03
【问题描述】:

我有一个已维护多年的 Ruby 代码库。当我使用 RuboCop 检查代码风格时,它会给我带来成千上万的冒犯。有没有办法使用 RuboCop 只检查新添加的代码或新修改的代码,并且只报告该代码的违规行为?

【问题讨论】:

  • 您可以将要检查的文件传递给rubocop。如果您使用 git,您可以轻松检索已修改/新文件的列表。当然,这仍然会检查整个文件。

标签: ruby rubocop


【解决方案1】:

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 的工作。您的报告系统应该有记录“基线”的方法,并且只报告与该基线的偏差。

【讨论】:

    【解决方案2】:

    我发现pronto-rubocop 可以完成这项工作

    【讨论】:

      猜你喜欢
      • 2023-01-15
      • 2023-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-14
      • 2021-09-21
      • 1970-01-01
      相关资源
      最近更新 更多