class RuboCop::Cop::Offense
An offense represents a style violation detected by RuboCop.
Constants
- COMPARISON_ATTRIBUTES
@api private
Attributes
@api public
@!attribute [r] #cop_name
@return [String]
a cop class name without namespace. i.e. type of the violation.
@example
'LineLength'
@api public
@!attribute [r] location
@return [Parser::Source::Range]
the location where the violation is detected.
@see rubydoc.info/github/whitequark/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 58 def initialize(severity, location, message, cop_name, status = :uncorrected) @severity = RuboCop::Cop::Severity.new(severity) @location = location @message = message.freeze @cop_name = cop_name.freeze @status = status 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 156 def <=>(other) COMPARISON_ATTRIBUTES.each do |attribute| result = send(attribute) <=> other.send(attribute) return result unless result == 0 end 0 end
@api public
@return [Boolean]
returns %x`true` if two offenses contain same attributes
# File lib/rubocop/cop/offense.rb, line 135 def ==(other) COMPARISON_ATTRIBUTES.all? do |attribute| send(attribute) == other.send(attribute) end end
@api private
# File lib/rubocop/cop/offense.rb, line 118 def column location.column end
@api public
@!attribute [r] corrected
@return [Boolean]
whether this offense is automatically corrected.
# File lib/rubocop/cop/offense.rb, line 74 def corrected @status == :unsupported ? nil : @status == :corrected end
@api public
@!attribute [r] disabled?
@return [Boolean]
whether this offense was locally disabled where it occurred
# File lib/rubocop/cop/offense.rb, line 85 def disabled? @status == :disabled end
# File lib/rubocop/cop/offense.rb, line 143 def hash COMPARISON_ATTRIBUTES.reduce(0) do |hash, attribute| hash ^ send(attribute).hash end end
@api public
@return [Parser::Source::Range]
the range of the code that is highlighted
# File lib/rubocop/cop/offense.rb, line 93 def highlighted_area column_length = if location.first_line == location.last_line location.column_range.count else location.source_line.length - location.column end Parser::Source::Range.new(location.source_line, location.column, location.column + column_length) end
@api private
# File lib/rubocop/cop/offense.rb, line 113 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 127 def real_column column + 1 end
@api private This is just for debugging purpose.
# File lib/rubocop/cop/offense.rb, line 107 def to_s format('%s:%3d:%3d: %s', severity.code, line, real_column, message) end