Class: Rubocop::Cop::Offense

Inherits:
Object
  • Object
show all
Includes:
Comparable
Defined in:
lib/rubocop/cop/offense.rb

Overview

An offense represents a style violation detected by RuboCop.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(severity, location, message, cop_name, corrected = false) ⇒ Offense

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a new instance of Offense.



66
67
68
69
70
71
72
73
74
75
# File 'lib/rubocop/cop/offense.rb', line 66

def initialize(severity, location, message, cop_name, corrected = false)
  @severity = Rubocop::Cop::Severity.new(severity)
  @location = location.freeze
  @line = location.line.freeze
  @column = location.column.freeze
  @message = message.freeze
  @cop_name = cop_name.freeze
  @corrected = corrected.freeze
  freeze
end

Instance Attribute Details

#columnObject (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



63
64
65
# File 'lib/rubocop/cop/offense.rb', line 63

def column
  @column
end

#cop_nameString (readonly)

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

Examples:

'LineLength'

Returns:

  • (String)

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



48
49
50
# File 'lib/rubocop/cop/offense.rb', line 48

def cop_name
  @cop_name
end

#correctedBoolean (readonly) Also known as: corrected?

Returns whether this offense is automatically corrected.

Returns:

  • (Boolean)

    whether this offense is automatically corrected.



56
57
58
# File 'lib/rubocop/cop/offense.rb', line 56

def corrected
  @corrected
end

#lineObject (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



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

def line
  @line
end

#locationParser::Source::Range (readonly)

Returns the location where the violation is detected.

Returns:

  • (Parser::Source::Range)

    the location where the violation is detected.

See Also:



25
26
27
# File 'lib/rubocop/cop/offense.rb', line 25

def location
  @location
end

#messageString (readonly)

Returns human-readable message.

Examples:

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

Returns:

  • (String)

    human-readable message



36
37
38
# File 'lib/rubocop/cop/offense.rb', line 36

def message
  @message
end

#severityRubocop::Cop::Severity (readonly)



14
15
16
# File 'lib/rubocop/cop/offense.rb', line 14

def severity
  @severity
end

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



110
111
112
113
114
115
116
# File 'lib/rubocop/cop/offense.rb', line 110

def <=>(other)
  [:line, :column, :cop_name, :message].each do |attribute|
    result = send(attribute) <=> other.send(attribute)
    return result unless result == 0
  end
  0
end

#==(other) ⇒ Boolean

Returns true if two offenses contain same attributes

Returns:

  • (Boolean)

    returns true if two offenses contain same attributes



97
98
99
100
101
# File 'lib/rubocop/cop/offense.rb', line 97

def ==(other)
  severity == other.severity && line == other.line &&
    column == other.column && message == other.message &&
    cop_name == other.cop_name
end

#real_columnObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

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.



89
90
91
# File 'lib/rubocop/cop/offense.rb', line 89

def real_column
  column + 1
end

#to_sObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

This is just for debugging purpose.



79
80
81
82
# File 'lib/rubocop/cop/offense.rb', line 79

def to_s
  format('%s:%3d:%3d: %s',
         severity.code, line, real_column, message)
end