class RuboCop::Cop::Offense

An offense represents a style violation detected by RuboCop.

Constants

COMPARISON_ATTRIBUTES

@api private

Attributes

cop_name[R]

@api public

@!attribute [r] #cop_name

@return [String]

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

@example

'LineLength'
location[R]

@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
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) click to toggle source

@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

<=>(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 156
def <=>(other)
  COMPARISON_ATTRIBUTES.each do |attribute|
    result = send(attribute) <=> other.send(attribute)
    return result unless result == 0
  end
  0
end
==(other) click to toggle source

@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
Also aliased as: eql?
column() click to toggle source

@api private

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

@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
Also aliased as: corrected?
corrected?()
Alias for: corrected
disabled?() click to toggle source

@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
eql?(other)
Alias for: ==
hash() click to toggle source
# File lib/rubocop/cop/offense.rb, line 143
def hash
  COMPARISON_ATTRIBUTES.reduce(0) do |hash, attribute|
    hash ^ send(attribute).hash
  end
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 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
line() click to toggle source

@api private

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

@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