lib/rubocop/cop/style/double_cop_disable_directive.rb
# frozen_string_literal: true
# rubocop:disable Lint/RedundantCopDisableDirective
# rubocop:disable Style/DoubleCopDisableDirective
module RuboCop
module Cop
module Style
# Detects double disable comments on one line. This is mostly to catch
# automatically generated comments that need to be regenerated.
#
# @example
# # bad
# def f # rubocop:disable Style/For # rubocop:disable Metrics/AbcSize
# end
#
# # good
# # rubocop:disable Metrics/AbcSize
# def f # rubocop:disable Style/For
# end
# # rubocop:enable Metrics/AbcSize
#
# # if both fit on one line
# def f # rubocop:disable Style/For, Metrics/AbcSize
# end
#
class DoubleCopDisableDirective < Base
extend AutoCorrector
# rubocop:enable Style/For, Style/DoubleCopDisableDirective
# rubocop:enable Lint/RedundantCopDisableDirective, Metrics/AbcSize
MSG = 'More than one disable comment on one line.'
def on_new_investigation
processed_source.comments.each do |comment|
next unless comment.text.scan(/# rubocop:(?:disable|todo)/).size > 1
add_offense(comment) do |corrector|
corrector.replace(comment, comment.text.gsub(%r{ # rubocop:(disable|todo)}, ','))
end
end
end
end
end
end
end