class RuboCop::Cop::Offense
An offense represents a style violation detected by RuboCop
.
Constants
- COMPARISON_ATTRIBUTES
@api private
- NO_LOCATION
- PseudoSourceRange
Attributes
@api public
@!attribute [r] cop_name
@return [String]
a cop class name without department. i.e. type of the violation.
@example
'LineLength'
@api public
@!attribute [r] corrector
@return [Corrector | nil]
the autocorrection for this offense, or `nil` when not available
@api public
@!attribute [r] location
@return [Parser::Source::Range]
the location where the violation is detected.
@see www.rubydoc.info/gems/parser/Parser/Source/Range
Parser::Source::Range
@api public
@!attribute [r] message
@return [String]
human-readable message
@example
'Line is too long. [90/80]'
@api public
@!attribute [r] severity
@return [RuboCop::Cop::Severity]
@api private
Public Class Methods
@api private
# File lib/rubocop/cop/offense.rb, line 84 def initialize(severity, location, message, cop_name, # rubocop:disable Metrics/ParameterLists status = :uncorrected, corrector = nil) @severity = RuboCop::Cop::Severity.new(severity) @location = location @message = message.freeze @cop_name = cop_name.freeze @status = status @corrector = corrector freeze end
Public Instance Methods
@api public
Returns ‘-1`, `0`, or `+1` if this offense is less than, equal to, or greater than `other`.
@return [Integer]
comparison result
# File lib/rubocop/cop/offense.rb, line 230 def <=>(other) COMPARISON_ATTRIBUTES.each do |attribute| result = public_send(attribute) <=> other.public_send(attribute) return result unless result.zero? end 0 end
@api public
@return [Boolean]
returns `true` if two offenses contain same attributes
# File lib/rubocop/cop/offense.rb, line 211 def ==(other) COMPARISON_ATTRIBUTES.all? do |attribute| public_send(attribute) == other.public_send(attribute) end end
@api private
# File lib/rubocop/cop/offense.rb, line 160 def column location.column end
@api private
# File lib/rubocop/cop/offense.rb, line 170 def column_length if first_line == last_line column_range.count else source_line.length - column end end
@api private
# File lib/rubocop/cop/offense.rb, line 194 def column_range location.column_range end
@api public
@!attribute [r] correctable?
@return [Boolean]
whether this offense can be automatically corrected via autocorrect or a todo.
# File lib/rubocop/cop/offense.rb, line 102 def correctable? @status != :unsupported end
@api public
@!attribute [r] corrected?
@return [Boolean]
whether this offense is automatically corrected via autocorrect or a todo.
# File lib/rubocop/cop/offense.rb, line 113 def corrected? @status == :corrected || @status == :corrected_with_todo end
@api public
@!attribute [r] corrected_with_todo?
@return [Boolean]
whether this offense is automatically disabled via a todo.
# File lib/rubocop/cop/offense.rb, line 123 def corrected_with_todo? @status == :corrected_with_todo end
@api public
@!attribute [r] disabled?
@return [Boolean]
whether this offense was locally disabled with a disable or todo where it occurred.
# File lib/rubocop/cop/offense.rb, line 134 def disabled? @status == :disabled || @status == :todo end
@api private
# File lib/rubocop/cop/offense.rb, line 179 def first_line location.first_line end
# File lib/rubocop/cop/offense.rb, line 219 def hash COMPARISON_ATTRIBUTES.map { |attribute| public_send(attribute) }.hash end
@api public
@return [Parser::Source::Range]
the range of the code that is highlighted
# File lib/rubocop/cop/offense.rb, line 142 def highlighted_area Parser::Source::Range.new(source_line, column, column + column_length) end
@api private
# File lib/rubocop/cop/offense.rb, line 189 def last_column location.last_column end
@api private
# File lib/rubocop/cop/offense.rb, line 184 def last_line location.last_line end
@api private
# File lib/rubocop/cop/offense.rb, line 155 def line location.line end
@api private
Internally we use column number that start at 0, but when outputting column numbers, we want them to start at 1. One reason is that editors, such as Emacs, expect this.
# File lib/rubocop/cop/offense.rb, line 203 def real_column column + 1 end
@api private
# File lib/rubocop/cop/offense.rb, line 165 def source_line location.source_line end
@api private This is just for debugging purpose.
# File lib/rubocop/cop/offense.rb, line 148 def to_s format('%<severity>s:%3<line>d:%3<column>d: %<message>s', severity: severity.code, line: line, column: real_column, message: message) end