class RuboCop::Cop::Offense

An offense represents a style violation detected by RuboCop.

Constants

COMPARISON_ATTRIBUTES

@api private

NO_LOCATION
PseudoSourceRange

Attributes

cop_name[R]

@api public

@!attribute [r] cop_name

@return [String]

the cop name as a String for which this offense is for.

@example

'Layout/LineLength'
corrector[R]

@api public

@!attribute [r] corrector

@return [Corrector | nil]

the autocorrection for this offense, or `nil` when not available
location[R]

@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
message[R]

@api public

@!attribute [r] message

@return [String]

human-readable message

@example

'Line is too long. [90/80]'
severity[R]

@api public

@!attribute [r] severity

@return [RuboCop::Cop::Severity]

status[R]

@api private

Public Class Methods

new(severity, location, message, cop_name, status = :uncorrected, corrector = nil) click to toggle source

@api private

# 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

Public Instance Methods

<=>(other) click to toggle source

@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 229
def <=>(other)
  COMPARISON_ATTRIBUTES.each do |attribute|
    result = public_send(attribute) <=> other.public_send(attribute)
    return result unless result.zero?
  end
  0
end
==(other) click to toggle source

@api public

@return [Boolean]

returns `true` if two offenses contain same attributes
# File lib/rubocop/cop/offense.rb, line 210
def ==(other)
  COMPARISON_ATTRIBUTES.all? do |attribute|
    public_send(attribute) == other.public_send(attribute)
  end
end
Also aliased as: eql?
column() click to toggle source

@api private

# File lib/rubocop/cop/offense.rb, line 159
def column
  location.column
end
column_length() click to toggle source

@api private

# 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
column_range() click to toggle source

@api private

# File lib/rubocop/cop/offense.rb, line 193
def column_range
  location.column_range
end
correctable?() click to toggle source

@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`.
# File lib/rubocop/cop/offense.rb, line 101
def correctable?
  @status != :unsupported
end
corrected?() click to toggle source

@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 112
def corrected?
  @status == :corrected || @status == :corrected_with_todo
end
corrected_with_todo?() click to toggle source

@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 122
def corrected_with_todo?
  @status == :corrected_with_todo
end
disabled?() click to toggle source

@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 133
def disabled?
  @status == :disabled || @status == :todo
end
eql?(other)
Alias for: ==
first_line() click to toggle source

@api private

# File lib/rubocop/cop/offense.rb, line 178
def first_line
  location.first_line
end
hash() click to toggle source
# File lib/rubocop/cop/offense.rb, line 218
def hash
  COMPARISON_ATTRIBUTES.map { |attribute| public_send(attribute) }.hash
end
highlighted_area() click to toggle source

@api public

@return [Parser::Source::Range]

the range of the code that is highlighted
# File lib/rubocop/cop/offense.rb, line 141
def highlighted_area
  Parser::Source::Range.new(source_line, column, column + column_length)
end
last_column() click to toggle source

@api private

# File lib/rubocop/cop/offense.rb, line 188
def last_column
  location.last_column
end
last_line() click to toggle source

@api private

# File lib/rubocop/cop/offense.rb, line 183
def last_line
  location.last_line
end
line() click to toggle source

@api private

# File lib/rubocop/cop/offense.rb, line 154
def line
  location.line
end
real_column() click to toggle source

@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 202
def real_column
  column + 1
end
source_line() click to toggle source

@api private

# File lib/rubocop/cop/offense.rb, line 164
def source_line
  location.source_line
end
to_s() click to toggle source

@api private This is just for debugging purpose.

# 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