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.

Constant Summary collapse

COMPARISON_ATTRIBUTES =

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

API:

  • private

[:line, :column, :cop_name,
:message, :severity].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(severity, location, message, cop_name, status = :uncorrected) ⇒ 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.

API:

  • private



58
59
60
61
62
63
64
65
66
# 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

Instance Attribute Details

#cop_nameString (readonly)

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

Examples:

'LineLength'

Returns:

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

API:

  • public



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

def cop_name
  @cop_name
end

#correctedBoolean (readonly) Also known as: corrected?

Returns whether this offense is automatically corrected.

Returns:

  • whether this offense is automatically corrected.

API:

  • public



74
75
76
# File 'lib/rubocop/cop/offense.rb', line 74

def corrected
  @status == :unsupported ? nil : @status == :corrected
end

#disabled?Boolean (readonly)

Returns whether this offense was locally disabled where it occurred.

Returns:

  • whether this offense was locally disabled where it occurred

API:

  • public



85
86
87
# File 'lib/rubocop/cop/offense.rb', line 85

def disabled?
  @status == :disabled
end

#locationParser::Source::Range (readonly)

Returns the location where the violation is detected.

Returns:

  • the location where the violation is detected.

See Also:

API:

  • public



29
30
31
# File 'lib/rubocop/cop/offense.rb', line 29

def location
  @location
end

#messageString (readonly)

Returns human-readable message.

Examples:

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

Returns:

  • human-readable message

API:

  • public



40
41
42
# File 'lib/rubocop/cop/offense.rb', line 40

def message
  @message
end

#severityRuboCop::Cop::Severity (readonly)

Returns:

API:

  • public



18
19
20
# File 'lib/rubocop/cop/offense.rb', line 18

def severity
  @severity
end

#statusObject (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.

API:

  • private



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

def status
  @status
end

Instance Method Details

#<=>(other) ⇒ Integer

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

Returns:

  • comparison result

API:

  • public



179
180
181
182
183
184
185
# 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) ⇒ Boolean Also known as: eql?

Returns true if two offenses contain same attributes

Returns:

  • returns true if two offenses contain same attributes

API:

  • public



158
159
160
161
162
# File 'lib/rubocop/cop/offense.rb', line 158

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

#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.

API:

  • private



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

def column
  location.column
end

#column_lengthObject

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.

API:

  • private



122
123
124
125
126
127
128
# 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_rangeObject

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.

API:

  • private



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

def column_range
  location.column_range
end

#first_lineObject

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.

API:

  • private



131
132
133
# File 'lib/rubocop/cop/offense.rb', line 131

def first_line
  location.first_line
end

#hashObject



166
167
168
169
170
# File 'lib/rubocop/cop/offense.rb', line 166

def hash
  COMPARISON_ATTRIBUTES.reduce(0) do |hash, attribute|
    hash ^ send(attribute).hash
  end
end

#highlighted_areaParser::Source::Range

Returns the range of the code that is highlighted.

Returns:

  • the range of the code that is highlighted

API:

  • public



93
94
95
96
97
# File 'lib/rubocop/cop/offense.rb', line 93

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

#last_lineObject

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.

API:

  • private



136
137
138
# File 'lib/rubocop/cop/offense.rb', line 136

def last_line
  location.last_line
end

#lineObject

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.

API:

  • private



107
108
109
# File 'lib/rubocop/cop/offense.rb', line 107

def line
  location.line
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.

API:

  • private



150
151
152
# File 'lib/rubocop/cop/offense.rb', line 150

def real_column
  column + 1
end

#source_lineObject

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.

API:

  • private



117
118
119
# File 'lib/rubocop/cop/offense.rb', line 117

def source_line
  location.source_line
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.

API:

  • private



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

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