50 lines
1.1 KiB
Ruby
50 lines
1.1 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module RuboCop
|
||
|
class CopTodo
|
||
|
attr_accessor :previously_disabled
|
||
|
|
||
|
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
|
||
|
end
|
||
|
|
||
|
def record(file, offense_count)
|
||
|
@files << file
|
||
|
@offense_count += offense_count
|
||
|
end
|
||
|
|
||
|
def autocorrectable?
|
||
|
@cop_class&.support_autocorrect?
|
||
|
end
|
||
|
|
||
|
def to_yaml
|
||
|
yaml = []
|
||
|
yaml << '---'
|
||
|
yaml << '# Cop supports --auto-correct.' 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 << ' Exclude:'
|
||
|
yaml.concat files.sort.map { |file| " - '#{file}'" }
|
||
|
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
|