Skip to content
代码片段 群组 项目
  • Peter Leitzen's avatar
    2063753a
    RuboCop TODO formatter: Retain HAML exclusions · 2063753a
    Peter Leitzen 创作于
    HAML files (ending with `.html.haml.rb`) added (manually) to
    `.rubocop_todo/**/*.yml` now are retained and not removed.
    
    This is useful because `haml-lint` (which use RuboCop rules) cannot
    exclude HAML files per RuboCop. So, we tend to disable whole cop rules in
    `haml-lint.yml`.
    
    With this change we can now start enabling "temporarily" disabled cop
    rules in add HAML files as TODOs.
    未验证
    2063753a
    历史
    RuboCop TODO formatter: Retain HAML exclusions
    Peter Leitzen 创作于
    HAML files (ending with `.html.haml.rb`) added (manually) to
    `.rubocop_todo/**/*.yml` now are retained and not removed.
    
    This is useful because `haml-lint` (which use RuboCop rules) cannot
    exclude HAML files per RuboCop. So, we tend to disable whole cop rules in
    `haml-lint.yml`.
    
    With this change we can now start enabling "temporarily" disabled cop
    rules in add HAML files as TODOs.
代码所有者
将用户和群组指定为特定文件更改的核准人。 了解更多。
cop_todo.rb 1.47 KiB
# frozen_string_literal: true

require_relative 'formatter/graceful_formatter'

module RuboCop
  class CopTodo
    attr_accessor :previously_disabled, :grace_period

    attr_reader :cop_name, :files, :offense_count

    def initialize(cop_name)
      @cop_name = cop_name
      @files = Set.new
      @offense_count = 0
      @cop_class = self.class.find_cop_by_name(cop_name)
      @previously_disabled = false
      @grace_period = false
    end

    def record(file, offense_count)
      @files << file
      @offense_count += offense_count
    end

    def add_files(files)
      @files.merge(files)
    end

    def autocorrectable?
      @cop_class&.support_autocorrect?
    end

    def generate?
      previously_disabled || grace_period || files.any?
    end

    def to_yaml
      yaml = []
      yaml << '---'
      yaml << '# Cop supports --autocorrect.' if autocorrectable?
      yaml << "#{cop_name}:"

      if previously_disabled
        yaml << "  # Offense count: #{offense_count}"
        yaml << '  # Temporarily disabled due to too many offenses'
        yaml << '  Enabled: false'
      end

      yaml << "  #{RuboCop::Formatter::GracefulFormatter.grace_period_key_value}" if grace_period

      if files.any?
        yaml << '  Exclude:'
        yaml.concat files.sort.map { |file| "    - '#{file}'" }
      end

      yaml << ''

      yaml.join("\n")
    end

    def self.find_cop_by_name(cop_name)
      RuboCop::Cop::Registry.global.find_by_cop_name(cop_name)
    end
  end
end