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
Instance Attribute Summary collapse
-
#cop_name ⇒ String
readonly
A cop class name without department.
-
#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
- #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) ⇒ Offense
constructor
private
A new instance of Offense.
- #last_column ⇒ Object private
- #last_line ⇒ Object private
- #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.
- #source_line ⇒ Object private
-
#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.
58 59 60 61 62 63 64 65 66 |
# File 'lib/rubocop/cop/offense.rb', line 58 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 department. i.e. type of the violation.
52 53 54 |
# File 'lib/rubocop/cop/offense.rb', line 52 def cop_name @cop_name end |
#corrected ⇒ Boolean (readonly) Also known as: corrected?
Returns whether this offense is automatically corrected.
74 75 76 |
# File 'lib/rubocop/cop/offense.rb', line 74 def corrected @status == :corrected end |
#disabled? ⇒ Boolean (readonly)
Returns whether this offense was locally disabled where it occurred.
85 86 87 |
# File 'lib/rubocop/cop/offense.rb', line 85 def disabled? @status == :disabled end |
#location ⇒ Parser::Source::Range (readonly)
Returns the location where the violation is detected.
29 30 31 |
# File 'lib/rubocop/cop/offense.rb', line 29 def location @location end |
#message ⇒ String (readonly)
Returns human-readable message.
40 41 42 |
# File 'lib/rubocop/cop/offense.rb', line 40 def @message end |
#severity ⇒ RuboCop::Cop::Severity (readonly)
18 19 20 |
# File 'lib/rubocop/cop/offense.rb', line 18 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.
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`.
185 186 187 188 189 190 191 |
# File 'lib/rubocop/cop/offense.rb', line 185 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
164 165 166 167 168 |
# File 'lib/rubocop/cop/offense.rb', line 164 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.
113 114 115 |
# File 'lib/rubocop/cop/offense.rb', line 113 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.
123 124 125 126 127 128 129 |
# File 'lib/rubocop/cop/offense.rb', line 123 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.
147 148 149 |
# File 'lib/rubocop/cop/offense.rb', line 147 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.
132 133 134 |
# File 'lib/rubocop/cop/offense.rb', line 132 def first_line location.first_line end |
#hash ⇒ Object
172 173 174 175 176 |
# File 'lib/rubocop/cop/offense.rb', line 172 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.
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_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.
142 143 144 |
# File 'lib/rubocop/cop/offense.rb', line 142 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.
137 138 139 |
# File 'lib/rubocop/cop/offense.rb', line 137 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.
108 109 110 |
# File 'lib/rubocop/cop/offense.rb', line 108 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.
156 157 158 |
# File 'lib/rubocop/cop/offense.rb', line 156 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.
118 119 120 |
# File 'lib/rubocop/cop/offense.rb', line 118 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.
101 102 103 104 105 |
# File 'lib/rubocop/cop/offense.rb', line 101 def to_s format('%<severity>s:%3<line>d:%3<column>d: %<message>s', severity: severity.code, line: line, column: real_column, message: ) end |