Skip to content

Commit

Permalink
Add a DisableComment Cop
Browse files Browse the repository at this point in the history
  • Loading branch information
koddsson committed Nov 21, 2024
1 parent 9dad99b commit b282854
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 0 deletions.
1 change: 1 addition & 0 deletions Library/Homebrew/rubocops/all.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
require_relative "../extend/blank"
require_relative "blank"
require_relative "compact_blank"
require_relative "disable_comment"
require_relative "extend/mutable_constant_exclude_unfreezable"
require_relative "io_read"
require_relative "move_to_extend_os"
Expand Down
32 changes: 32 additions & 0 deletions Library/Homebrew/rubocops/disable_comment.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# typed: strict
# frozen_string_literal: true

module RuboCop
module Cop
# Checks if rubocop disable comments have a clarifying comment preceding them.
class DisableComment < Base
MSG = "Add a clarifying comment to the RuboCop disable comment"

def on_new_investigation
super

processed_source.comments.each do |comment|
next unless disable_comment?(comment)
next if comment?(processed_source[comment.loc.line - 2])

add_offense(comment)
end
end

private

def disable_comment?(comment)
comment.text.start_with? "# rubocop:disable"
end

def comment?(line)
line.strip.start_with? "#"
end
end
end
end
36 changes: 36 additions & 0 deletions Library/Homebrew/test/rubocops/disable_comment_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# frozen_string_literal: true

require "rubocops/disable_comment"

RSpec.describe RuboCop::Cop::DisableComment, :config do
shared_examples "offense" do |source, correction, message|
it "registers an offense and corrects" do
expect_offense(<<~RUBY, source:, message:)
#{source}
^{source} #{message}
RUBY

expect_correction(<<~RUBY)
#{correction}
RUBY
end
end

it "register a offencse" do
expect_offense(<<~RUBY)
def something; end
# rubocop:disable Naming/AccessorMethodName
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Add a clarifying comment to the RuboCop disable comment
def get_decrypted_io; end
RUBY
end

it "doesn't register an offencse" do
expect_no_offenses(<<~RUBY)
def something; end
# This is a upstream name that we cannot change.
# rubocop:disable Naming/AccessorMethodName
def get_decrypted_io; end
RUBY
end
end

0 comments on commit b282854

Please sign in to comment.