class RuboCop::Cop::Cop
@deprecated Use Cop::Base
instead Legacy
scaffold for Cops. See docs.rubocop.org/rubocop/v1_upgrade_notes.html
Monkey-patch Cop
for tests to provide easy access to messages and highlights.
Constants
- Correction
@deprecated
Attributes
offenses[R]
Public Class Methods
all()
click to toggle source
@deprecated Use Registry.all
# File lib/rubocop/cop/cop.rb, line 56 def self.all warn Rainbow(<<~WARNING).yellow, uplevel: 1 `Cop.all` is deprecated. Use `Registry.all` instead. WARNING Registry.all end
inherited(_subclass)
click to toggle source
Calls superclass method
RuboCop::Cop::Base::inherited
# File lib/rubocop/cop/cop.rb, line 25 def self.inherited(_subclass) super warn Rainbow(<<~WARNING).yellow, uplevel: 1 Inheriting from `RuboCop::Cop::Cop` is deprecated. Use `RuboCop::Cop::Base` instead. For more information, see https://docs.rubocop.org/rubocop/v1_upgrade_notes.html. WARNING end
joining_forces()
click to toggle source
# File lib/rubocop/cop/cop.rb, line 37 def self.joining_forces return unless method_defined?(:join_force?) cop = new Force.all.select { |force_class| cop.join_force?(force_class) } end
qualified_cop_name(name, origin)
click to toggle source
@deprecated Use Registry.qualified_cop_name
# File lib/rubocop/cop/cop.rb, line 65 def self.qualified_cop_name(name, origin) warn Rainbow(<<~WARNING).yellow, uplevel: 1 `Cop.qualified_cop_name` is deprecated. Use `Registry.qualified_cop_name` instead. WARNING Registry.qualified_cop_name(name, origin) end
registry()
click to toggle source
@deprecated Use Registry.global
# File lib/rubocop/cop/cop.rb, line 47 def self.registry warn Rainbow(<<~WARNING).yellow, uplevel: 1 `Cop.registry` is deprecated. Use `Registry.global` instead. WARNING Registry.global end
support_autocorrect?()
click to toggle source
# File lib/rubocop/cop/cop.rb, line 33 def self.support_autocorrect? method_defined?(:autocorrect) end
Public Instance Methods
add_offense(node_or_range, location: :expression, message: nil, severity: nil, &block)
click to toggle source
Calls superclass method
RuboCop::Cop::Base#add_offense
# File lib/rubocop/cop/cop.rb, line 73 def add_offense(node_or_range, location: :expression, message: nil, severity: nil, &block) @v0_argument = node_or_range range = find_location(node_or_range, location) # Since this range may be generated from Ruby code embedded in some # template file, we convert it to location info in the original file. range = range_for_original(range) if block.nil? && !self.class.support_autocorrect? super(range, message: message, severity: severity) else super(range, message: message, severity: severity) do |corrector| emulate_v0_callsequence(corrector, &block) end end end
begin_investigation(processed_source, offset: 0, original: processed_source)
click to toggle source
Called before any investigation @api private
Calls superclass method
RuboCop::Cop::Base#begin_investigation
# File lib/rubocop/cop/cop.rb, line 129 def begin_investigation(processed_source, offset: 0, original: processed_source) super @offenses = current_offenses @last_corrector = @current_corrector # We need to keep track of the original source and offset, # because `processed_source` here may be an embedded code in it. @current_offset = offset @current_original = original end
corrections()
click to toggle source
@deprecated
# File lib/rubocop/cop/cop.rb, line 105 def corrections warn Rainbow(<<~WARNING).yellow, uplevel: 1 `Cop#corrections` is deprecated. WARNING return [] unless @last_corrector Legacy::CorrectionsProxy.new(@last_corrector) end
find_location(node, loc)
click to toggle source
# File lib/rubocop/cop/cop.rb, line 90 def find_location(node, loc) # Location can be provided as a symbol, e.g.: `:keyword` loc.is_a?(Symbol) ? node.loc.public_send(loc) : loc end
highlights()
click to toggle source
# File lib/rubocop/rspec/cop_helper.rb, line 94 def highlights offenses.sort.map { |o| o.location.source } end
messages()
click to toggle source
# File lib/rubocop/rspec/cop_helper.rb, line 90 def messages offenses.sort.map(&:message) end
on_investigation_end()
click to toggle source
Called after all on_… have been called
Calls superclass method
RuboCop::Cop::Base#on_investigation_end
# File lib/rubocop/cop/cop.rb, line 122 def on_investigation_end investigate_post_walk(processed_source) if respond_to?(:investigate_post_walk) super end
on_new_investigation()
click to toggle source
Called before all on_… have been called
Calls superclass method
RuboCop::Cop::Base#on_new_investigation
# File lib/rubocop/cop/cop.rb, line 116 def on_new_investigation investigate(processed_source) if respond_to?(:investigate) super end
support_autocorrect?()
click to toggle source
@deprecated Use class method
# File lib/rubocop/cop/cop.rb, line 96 def support_autocorrect? warn Rainbow(<<~WARNING).yellow, uplevel: 1 `support_autocorrect?` is deprecated. Use `cop.class.support_autocorrect?`. WARNING self.class.support_autocorrect? end
Private Instance Methods
apply_correction(corrector)
click to toggle source
Calls superclass method
RuboCop::Cop::Base#apply_correction
# File lib/rubocop/cop/cop.rb, line 147 def apply_correction(corrector) suppress_clobbering { super } end
callback_argument(_range)
click to toggle source
Override Base
# File lib/rubocop/cop/cop.rb, line 143 def callback_argument(_range) @v0_argument end
correction_lambda()
click to toggle source
# File lib/rubocop/cop/cop.rb, line 164 def correction_lambda return unless self.class.support_autocorrect? dedupe_on_node(@v0_argument) { autocorrect(@v0_argument) } end
dedupe_on_node(node) { || ... }
click to toggle source
# File lib/rubocop/cop/cop.rb, line 170 def dedupe_on_node(node) @corrected_nodes ||= {}.compare_by_identity yield unless @corrected_nodes.key?(node) ensure @corrected_nodes[node] = true end
emulate_v0_callsequence(corrector) { |corrector| ... }
click to toggle source
Just for legacy
# File lib/rubocop/cop/cop.rb, line 152 def emulate_v0_callsequence(corrector) lambda = correction_lambda yield corrector if block_given? unless corrector.empty? raise 'Your cop must inherit from Cop::Base and extend AutoCorrector' end return unless lambda suppress_clobbering { lambda.call(corrector) } end
range_for_original(range)
click to toggle source
# File lib/rubocop/cop/cop.rb, line 183 def range_for_original(range) ::Parser::Source::Range.new( @current_original.buffer, range.begin_pos + @current_offset, range.end_pos + @current_offset ) end
suppress_clobbering() { || ... }
click to toggle source
# File lib/rubocop/cop/cop.rb, line 177 def suppress_clobbering yield rescue ::Parser::ClobberingError # ignore Clobbering errors end