123456789_123456789_123456789_123456789_123456789_

Class: RuboCop::Cop::Offense

Relationships & Source Files
Namespace Children
Classes:
Super Chains via Extension / Inclusion / Inheritance
Instance Chain:
self, Comparable
Inherits: Object
Defined in: lib/rubocop/cop/offense.rb

Overview

An offense represents a style violation detected by RuboCop.

Constant Summary

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Instance Attribute Details

#cop_nameString (readonly)

Examples:

'LineLength'

Returns:

  • (String)

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

[ GitHub ]

  
# File 'lib/rubocop/cop/offense.rb', line 51

attr_reader :cop_name

#correctable?Boolean (readonly)

Returns:

  • (Boolean)

    whether this offense can be automatically corrected via autocorrect or a todo.

[ GitHub ]

  
# File 'lib/rubocop/cop/offense.rb', line 102

def correctable?
  @status != :unsupported
end

#corrected?Boolean (readonly)

Returns:

  • (Boolean)

    whether this offense is automatically corrected via autocorrect or a todo.

[ GitHub ]

  
# File 'lib/rubocop/cop/offense.rb', line 113

def corrected?
  @status == :corrected || @status == :corrected_with_todo
end

#corrected_with_todo?Boolean (readonly)

Returns:

  • (Boolean)

    whether this offense is automatically disabled via a todo.

[ GitHub ]

  
# File 'lib/rubocop/cop/offense.rb', line 123

def corrected_with_todo?
  @status == :corrected_with_todo
end

#correctorCorrector | nil (readonly)

Returns:

  • (Corrector | nil)

    the autocorrection for this offense, or nil when not available

[ GitHub ]

  
# File 'lib/rubocop/cop/offense.rb', line 62

attr_reader :corrector

#disabled?Boolean (readonly)

Returns:

  • (Boolean)

    whether this offense was locally disabled with a disable or todo where it occurred.

[ GitHub ]

  
# File 'lib/rubocop/cop/offense.rb', line 134

def disabled?
  @status == :disabled || @status == :todo
end

#locationParser::Source::Range (readonly)

Returns:

  • (Parser::Source::Range)

    the location where the violation is detected.

See Also:

[ GitHub ]

  
# File 'lib/rubocop/cop/offense.rb', line 28

attr_reader :location

#messageString (readonly)

Examples:

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

Returns:

  • (String)

    human-readable message

[ GitHub ]

  
# File 'lib/rubocop/cop/offense.rb', line 39

attr_reader :message

#severityRuboCop::Cop::Severity (readonly)

[ GitHub ]

  
# File 'lib/rubocop/cop/offense.rb', line 17

attr_reader :severity

#status (readonly)

This method is for internal use only.
[ GitHub ]

  
# File 'lib/rubocop/cop/offense.rb', line 54

attr_reader :status

Instance Method Details

#<=>(other) ⇒ Integer

Returns -1, 0, or +1 if this offense is less than, equal to, or greater than other.

Returns:

  • (Integer)

    comparison result

[ GitHub ]

  
# 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) ⇒ Boolean Also known as: #eql?

Returns:

  • (Boolean)

    returns true if two offenses contain same attributes

[ GitHub ]

  
# File 'lib/rubocop/cop/offense.rb', line 211

def ==(other)
  COMPARISON_ATTRIBUTES.all? do |attribute|
    public_send(attribute) == other.public_send(attribute)
  end
end

#column

This method is for internal use only.
[ GitHub ]

  
# File 'lib/rubocop/cop/offense.rb', line 160

def column
  location.column
end

#column_length

This method is for internal use only.
[ GitHub ]

  
# 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

This method is for internal use only.
[ GitHub ]

  
# File 'lib/rubocop/cop/offense.rb', line 194

def column_range
  location.column_range
end

#eql?(other)

Alias for #==.

[ GitHub ]

  
# File 'lib/rubocop/cop/offense.rb', line 217

alias eql? ==

#first_line

This method is for internal use only.
[ GitHub ]

  
# File 'lib/rubocop/cop/offense.rb', line 179

def first_line
  location.first_line
end

#hash

[ GitHub ]

  
# File 'lib/rubocop/cop/offense.rb', line 219

def hash
  COMPARISON_ATTRIBUTES.map { |attribute| public_send(attribute) }.hash
end

#highlighted_areaParser::Source::Range

Returns:

  • (Parser::Source::Range)

    the range of the code that is highlighted

[ GitHub ]

  
# File 'lib/rubocop/cop/offense.rb', line 142

def highlighted_area
  Parser::Source::Range.new(source_line, column, column + column_length)
end

#last_column

This method is for internal use only.
[ GitHub ]

  
# File 'lib/rubocop/cop/offense.rb', line 189

def last_column
  location.last_column
end

#last_line

This method is for internal use only.
[ GitHub ]

  
# File 'lib/rubocop/cop/offense.rb', line 184

def last_line
  location.last_line
end

#line

This method is for internal use only.
[ GitHub ]

  
# File 'lib/rubocop/cop/offense.rb', line 155

def line
  location.line
end

#real_column

This method is for internal use only.

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.

[ GitHub ]

  
# File 'lib/rubocop/cop/offense.rb', line 203

def real_column
  column + 1
end

#source_line

This method is for internal use only.
[ GitHub ]

  
# File 'lib/rubocop/cop/offense.rb', line 165

def source_line
  location.source_line
end

#to_s

This method is for internal use only.

This is just for debugging purpose.

[ GitHub ]

  
# 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