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]

a cop class name without department.
i.e. type of the violation.

@example

'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 84
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 230
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 211
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 160
def column
  location.column
end
column_length() click to toggle source

@api private

# File lib/rubocop/cop/offense.rb, line 170
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 194
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 or a todo.
# File lib/rubocop/cop/offense.rb, line 102
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 113
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 123
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 134
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 179
def first_line
  location.first_line
end
hash() click to toggle source
# File lib/rubocop/cop/offense.rb, line 219
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 142
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 189
def last_column
  location.last_column
end
last_line() click to toggle source

@api private

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

@api private

# File lib/rubocop/cop/offense.rb, line 155
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 203
def real_column
  column + 1
end
source_line() click to toggle source

@api private

# File lib/rubocop/cop/offense.rb, line 165
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 148
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