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 57 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 178 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 157 def ==(other) COMPARISON_ATTRIBUTES.all? do |attribute| send(attribute) == other.send(attribute) end end
@api private
# File lib/rubocop/cop/offense.rb, line 111 def column location.column end
@api private
# File lib/rubocop/cop/offense.rb, line 121 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 140 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 73 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 84 def disabled? @status == :disabled end
@api private
# File lib/rubocop/cop/offense.rb, line 130 def first_line location.first_line end
# File lib/rubocop/cop/offense.rb, line 165 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 92 def highlighted_area Parser::Source::Range.new(source_line, column, column + column_length) end
@api private
# File lib/rubocop/cop/offense.rb, line 135 def last_line location.last_line end
@api private
# File lib/rubocop/cop/offense.rb, line 106 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 149 def real_column column + 1 end
@api private
# File lib/rubocop/cop/offense.rb, line 116 def source_line location.source_line end
@api private This is just for debugging purpose.
# File lib/rubocop/cop/offense.rb, line 100 def to_s format('%s:%3d:%3d: %s', severity.code, line, real_column, message) end