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 department.
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 179
def <=>(other)
  COMPARISON_ATTRIBUTES.each do |attribute|
    result = send(attribute) <=> other.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 158
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 112
def column
  location.column
end
column_length() click to toggle source

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

@api private

# File lib/rubocop/cop/offense.rb, line 141
def column_range
  location.column_range
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 ? false : @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: ==
first_line() click to toggle source

@api private

# File lib/rubocop/cop/offense.rb, line 131
def first_line
  location.first_line
end
hash() click to toggle source
# File lib/rubocop/cop/offense.rb, line 166
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
  Parser::Source::Range.new(source_line,
                            column,
                            column + column_length)
end
last_line() click to toggle source

@api private

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

@api private

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

@api private

# File lib/rubocop/cop/offense.rb, line 117
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 101
def to_s
  format('%s:%3d:%3d: %s',
         severity.code, line, real_column, message)
end