Class: RuboCop::Cop::Offense
- Inherits:
-
Object
- Object
- RuboCop::Cop::Offense
- 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.
[:line, :column, :cop_name, :message, :severity].freeze
Instance Attribute Summary collapse
-
#cop_name ⇒ String
readonly
A cop class name without namespace.
-
#corrected ⇒ Boolean
(also: #corrected?)
readonly
Whether this offense is automatically corrected.
-
#disabled? ⇒ Boolean
readonly
Whether this offense was locally disabled where it occurred.
-
#location ⇒ Parser::Source::Range
readonly
The location where the violation is detected.
-
#message ⇒ String
readonly
Human-readable message.
- #severity ⇒ RuboCop::Cop::Severity readonly
- #status ⇒ Object readonly private
Instance Method Summary collapse
-
#<=>(other) ⇒ Integer
Returns ‘-1`, `0` or `+1` if this offense is less than, equal to, or greater than `other`.
-
#==(other) ⇒ Boolean
(also: #eql?)
Returns ‘true` if two offenses contain same attributes.
- #column ⇒ Object private
- #hash ⇒ Object
-
#highlighted_area ⇒ Parser::Source::Range
The range of the code that is highlighted.
-
#initialize(severity, location, message, cop_name, status = :uncorrected) ⇒ Offense
constructor
private
A new instance of Offense.
- #line ⇒ Object private
-
#real_column ⇒ Object
private
Internally we use column number that start at 0, but when outputting column numbers, we want them to start at 1.
-
#to_s ⇒ Object
private
This is just for debugging purpose.
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.
59 60 61 62 63 64 65 66 67 |
# File 'lib/rubocop/cop/offense.rb', line 59 def initialize(severity, location, , cop_name, status = :uncorrected) @severity = RuboCop::Cop::Severity.new(severity) @location = location @message = .freeze @cop_name = cop_name.freeze @status = status freeze end |
Instance Attribute Details
#cop_name ⇒ String (readonly)
Returns a cop class name without namespace. i.e. type of the violation.
53 54 55 |
# File 'lib/rubocop/cop/offense.rb', line 53 def cop_name @cop_name end |
#corrected ⇒ Boolean (readonly) Also known as: corrected?
Returns whether this offense is automatically corrected.
75 76 77 |
# File 'lib/rubocop/cop/offense.rb', line 75 def corrected @status == :unsupported ? nil : @status == :corrected end |
#disabled? ⇒ Boolean (readonly)
Returns whether this offense was locally disabled where it occurred.
86 87 88 |
# File 'lib/rubocop/cop/offense.rb', line 86 def disabled? @status == :disabled end |
#location ⇒ Parser::Source::Range (readonly)
Returns the location where the violation is detected.
30 31 32 |
# File 'lib/rubocop/cop/offense.rb', line 30 def location @location end |
#message ⇒ String (readonly)
Returns human-readable message.
41 42 43 |
# File 'lib/rubocop/cop/offense.rb', line 41 def @message end |
#severity ⇒ RuboCop::Cop::Severity (readonly)
19 20 21 |
# File 'lib/rubocop/cop/offense.rb', line 19 def severity @severity end |
#status ⇒ Object (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.
56 57 58 |
# File 'lib/rubocop/cop/offense.rb', line 56 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`.
157 158 159 160 161 162 163 |
# File 'lib/rubocop/cop/offense.rb', line 157 def <=>(other) COMPARISON_ATTRIBUTES.each do |attribute| result = send(attribute) <=> other.send(attribute) return result unless result == 0 end 0 end |
#==(other) ⇒ Boolean Also known as: eql?
Returns ‘true` if two offenses contain same attributes
136 137 138 139 140 |
# File 'lib/rubocop/cop/offense.rb', line 136 def ==(other) COMPARISON_ATTRIBUTES.all? do |attribute| send(attribute) == other.send(attribute) end end |
#column ⇒ Object
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.
119 120 121 |
# File 'lib/rubocop/cop/offense.rb', line 119 def column location.column end |
#hash ⇒ Object
144 145 146 147 148 |
# File 'lib/rubocop/cop/offense.rb', line 144 def hash COMPARISON_ATTRIBUTES.reduce(0) do |hash, attribute| hash ^ send(attribute).hash end end |
#highlighted_area ⇒ Parser::Source::Range
Returns the range of the code that is highlighted.
94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/rubocop/cop/offense.rb', line 94 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 ⇒ Object
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.
114 115 116 |
# File 'lib/rubocop/cop/offense.rb', line 114 def line location.line end |
#real_column ⇒ Object
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.
128 129 130 |
# File 'lib/rubocop/cop/offense.rb', line 128 def real_column column + 1 end |
#to_s ⇒ Object
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.
108 109 110 111 |
# File 'lib/rubocop/cop/offense.rb', line 108 def to_s format('%s:%3d:%3d: %s', severity.code, line, real_column, ) end |