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.
%i[line column cop_name message severity].freeze
- NO_LOCATION =
PseudoSourceRange.new(1, 0, '', 0, 0).freeze
Instance Attribute Summary collapse
-
#cop_name ⇒ String
readonly
The cop name as a String for which this offense is for.
-
#correctable? ⇒ Boolean
readonly
Whether this offense can be automatically corrected via autocorrect.
-
#corrected? ⇒ Boolean
readonly
Whether this offense is automatically corrected via autocorrect or a todo.
-
#corrected_with_todo? ⇒ Boolean
readonly
Whether this offense is automatically disabled via a todo.
-
#corrector ⇒ Corrector | nil
readonly
The autocorrection for this offense, or ‘nil` when not available.
-
#disabled? ⇒ Boolean
readonly
Whether this offense was locally disabled with a disable or todo 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
- #column_length ⇒ Object private
- #column_range ⇒ Object private
- #first_line ⇒ 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, corrector = nil) ⇒ Offense
constructor
private
A new instance of Offense.
- #last_column ⇒ Object private
- #last_line ⇒ Object private
- #line ⇒ Object private
- #marshal_dump ⇒ Object
- #marshal_load(array) ⇒ Object
-
#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.
- #source_line ⇒ Object private
-
#to_s ⇒ Object
private
This is just for debugging purpose.
Constructor Details
#initialize(severity, location, message, cop_name, status = :uncorrected, corrector = nil) ⇒ 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.
90 91 92 93 94 95 96 97 98 99 |
# File 'lib/rubocop/cop/offense.rb', line 90 def initialize(severity, location, , cop_name, # rubocop:disable Metrics/ParameterLists status = :uncorrected, corrector = nil) @severity = RuboCop::Cop::Severity.new(severity) @location = location @message = .freeze @cop_name = cop_name.freeze @status = status @corrector = corrector freeze end |
Instance Attribute Details
#cop_name ⇒ String (readonly)
Returns the cop name as a String for which this offense is for.
50 51 52 |
# File 'lib/rubocop/cop/offense.rb', line 50 def cop_name @cop_name end |
#correctable? ⇒ Boolean (readonly)
Returns whether this offense can be automatically corrected via autocorrect. This includes todo comments, for example when requested with ‘–disable-uncorrectable`.
116 117 118 |
# File 'lib/rubocop/cop/offense.rb', line 116 def correctable? @status != :unsupported end |
#corrected? ⇒ Boolean (readonly)
Returns whether this offense is automatically corrected via autocorrect or a todo.
127 128 129 |
# File 'lib/rubocop/cop/offense.rb', line 127 def corrected? @status == :corrected || @status == :corrected_with_todo end |
#corrected_with_todo? ⇒ Boolean (readonly)
Returns whether this offense is automatically disabled via a todo.
137 138 139 |
# File 'lib/rubocop/cop/offense.rb', line 137 def corrected_with_todo? @status == :corrected_with_todo end |
#corrector ⇒ Corrector | nil (readonly)
Returns the autocorrection for this offense, or ‘nil` when not available.
61 62 63 |
# File 'lib/rubocop/cop/offense.rb', line 61 def corrector @corrector end |
#disabled? ⇒ Boolean (readonly)
Returns whether this offense was locally disabled with a disable or todo where it occurred.
148 149 150 |
# File 'lib/rubocop/cop/offense.rb', line 148 def disabled? @status == :disabled || @status == :todo end |
#location ⇒ Parser::Source::Range (readonly)
Returns the location where the violation is detected.
28 29 30 |
# File 'lib/rubocop/cop/offense.rb', line 28 def location @location end |
#message ⇒ String (readonly)
Returns human-readable message.
39 40 41 |
# File 'lib/rubocop/cop/offense.rb', line 39 def @message end |
#severity ⇒ RuboCop::Cop::Severity (readonly)
17 18 19 |
# File 'lib/rubocop/cop/offense.rb', line 17 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.
53 54 55 |
# File 'lib/rubocop/cop/offense.rb', line 53 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`.
245 246 247 248 249 250 251 |
# File 'lib/rubocop/cop/offense.rb', line 245 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 ‘true` if two offenses contain same attributes
226 227 228 229 230 |
# File 'lib/rubocop/cop/offense.rb', line 226 def ==(other) COMPARISON_ATTRIBUTES.all? do |attribute| public_send(attribute) == other.public_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.
175 176 177 |
# File 'lib/rubocop/cop/offense.rb', line 175 def column location.column end |
#column_length ⇒ 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.
185 186 187 188 189 190 191 |
# File 'lib/rubocop/cop/offense.rb', line 185 def column_length if first_line == last_line column_range.count else source_line.length - column end end |
#column_range ⇒ 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.
209 210 211 |
# File 'lib/rubocop/cop/offense.rb', line 209 def column_range location.column_range end |
#first_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.
194 195 196 |
# File 'lib/rubocop/cop/offense.rb', line 194 def first_line location.first_line end |
#hash ⇒ Object
234 235 236 |
# File 'lib/rubocop/cop/offense.rb', line 234 def hash COMPARISON_ATTRIBUTES.map { |attribute| public_send(attribute) }.hash end |
#highlighted_area ⇒ Parser::Source::Range
Returns the range of the code that is highlighted.
156 157 158 159 |
# File 'lib/rubocop/cop/offense.rb', line 156 def highlighted_area source_buffer = Parser::Source::Buffer.new(location.source_buffer.name, source: source_line) Parser::Source::Range.new(source_buffer, column, column + column_length) end |
#last_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.
204 205 206 |
# File 'lib/rubocop/cop/offense.rb', line 204 def last_column location.last_column end |
#last_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.
199 200 201 |
# File 'lib/rubocop/cop/offense.rb', line 199 def last_line location.last_line 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.
170 171 172 |
# File 'lib/rubocop/cop/offense.rb', line 170 def line location.line end |
#marshal_dump ⇒ Object
101 102 103 |
# File 'lib/rubocop/cop/offense.rb', line 101 def marshal_dump [@severity, @location, @message, @cop_name, @status] end |
#marshal_load(array) ⇒ Object
105 106 107 |
# File 'lib/rubocop/cop/offense.rb', line 105 def marshal_load(array) @severity, @location, @message, @cop_name, @status = array 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.
218 219 220 |
# File 'lib/rubocop/cop/offense.rb', line 218 def real_column column + 1 end |
#source_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.
180 181 182 |
# File 'lib/rubocop/cop/offense.rb', line 180 def source_line location.source_line 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.
163 164 165 166 167 |
# File 'lib/rubocop/cop/offense.rb', line 163 def to_s format('%<severity>s:%3<line>d:%3<column>d: %<message>s', severity: severity.code, line: line, column: real_column, message: ) end |