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]
the cop name as a String for which this offense is for.
@example
'Layout/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
Source
# File lib/rubocop/cop/offense.rb, line 83 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
@api private
Public Instance Methods
Source
# File lib/rubocop/cop/offense.rb, line 229 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
Returns ‘-1`, `0`, or `+1` if this offense is less than, equal to, or greater than `other`.
@return [Integer]
comparison result
Source
# File lib/rubocop/cop/offense.rb, line 210 def ==(other) COMPARISON_ATTRIBUTES.all? do |attribute| public_send(attribute) == other.public_send(attribute) end end
@api public
@return [Boolean]
returns `true` if two offenses contain same attributes
Source
# File lib/rubocop/cop/offense.rb, line 159 def column location.column end
@api private
Source
# File lib/rubocop/cop/offense.rb, line 169 def column_length if first_line == last_line column_range.count else source_line.length - column end end
@api private
Source
# File lib/rubocop/cop/offense.rb, line 193 def column_range location.column_range end
@api private
Source
# File lib/rubocop/cop/offense.rb, line 101 def correctable? @status != :unsupported end
@api public
@!attribute [r] correctable?
@return [Boolean]
whether this offense can be automatically corrected via autocorrect. This includes todo comments, for example when requested with `--disable-uncorrectable`.
Source
# File lib/rubocop/cop/offense.rb, line 112 def corrected? @status == :corrected || @status == :corrected_with_todo end
@api public
@!attribute [r] corrected?
@return [Boolean]
whether this offense is automatically corrected via autocorrect or a todo.
Source
# File lib/rubocop/cop/offense.rb, line 122 def corrected_with_todo? @status == :corrected_with_todo end
@api public
@!attribute [r] corrected_with_todo?
@return [Boolean]
whether this offense is automatically disabled via a todo.
Source
# File lib/rubocop/cop/offense.rb, line 133 def disabled? @status == :disabled || @status == :todo end
@api public
@!attribute [r] disabled?
@return [Boolean]
whether this offense was locally disabled with a disable or todo where it occurred.
Source
# File lib/rubocop/cop/offense.rb, line 178 def first_line location.first_line end
@api private
Source
# File lib/rubocop/cop/offense.rb, line 218 def hash COMPARISON_ATTRIBUTES.map { |attribute| public_send(attribute) }.hash end
Source
# File lib/rubocop/cop/offense.rb, line 141 def highlighted_area Parser::Source::Range.new(source_line, column, column + column_length) end
@api public
@return [Parser::Source::Range]
the range of the code that is highlighted
Source
# File lib/rubocop/cop/offense.rb, line 188 def last_column location.last_column end
@api private
Source
# File lib/rubocop/cop/offense.rb, line 183 def last_line location.last_line end
@api private
Source
# File lib/rubocop/cop/offense.rb, line 202 def real_column column + 1 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.
Source
# File lib/rubocop/cop/offense.rb, line 164 def source_line location.source_line end
@api private
Source
# File lib/rubocop/cop/offense.rb, line 147 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
@api private This is just for debugging purpose.