diff options
Diffstat (limited to 'rubocop/cop_todo.rb')
-rw-r--r-- | rubocop/cop_todo.rb | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/rubocop/cop_todo.rb b/rubocop/cop_todo.rb new file mode 100644 index 00000000000..42e2f9fbe13 --- /dev/null +++ b/rubocop/cop_todo.rb @@ -0,0 +1,49 @@ +# 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 |