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 department. 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 179 def <=>(other) COMPARISON_ATTRIBUTES.each do |attribute| result = send(attribute) <=> other.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 158 def ==(other) COMPARISON_ATTRIBUTES.all? do |attribute| send(attribute) == other.send(attribute) end end
@api private
# File lib/rubocop/cop/offense.rb, line 112 def column location.column end
@api private
# File lib/rubocop/cop/offense.rb, line 122 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 141 def column_range location.column_range 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 ? false : @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
@api private
# File lib/rubocop/cop/offense.rb, line 131 def first_line location.first_line end
# File lib/rubocop/cop/offense.rb, line 166 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 Parser::Source::Range.new(source_line, column, column + column_length) end
@api private
# File lib/rubocop/cop/offense.rb, line 136 def last_line location.last_line end
@api private
# File lib/rubocop/cop/offense.rb, line 107 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 150 def real_column column + 1 end
@api private
# File lib/rubocop/cop/offense.rb, line 117 def source_line location.source_line end
@api private This is just for debugging purpose.
# File lib/rubocop/cop/offense.rb, line 101 def to_s format('%s:%3d:%3d: %s', severity.code, line, real_column, message) end