datarockets-style 0.8.1 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.github/ISSUE_TEMPLATE/update-dependencies.md +1 -0
- data/.gitignore +3 -0
- data/.rubocop.yml +1 -1
- data/CHANGELOG.md +68 -2
- data/Gemfile +1 -1
- data/Gemfile.lock +60 -42
- data/README.md +2 -2
- data/RELEASING.md +16 -0
- data/bin/console +1 -1
- data/config/base.yml +116 -1
- data/config/rails.yml +2 -2
- data/config/rspec.yml +3 -0
- data/datarockets-style.gemspec +6 -6
- data/doc/STYLE_GUIDE.md +40 -0
- data/doc/STYLE_GUIDE_RSPEC.md +4 -0
- data/lib/datarockets_style.rb +12 -0
- data/lib/datarockets_style/cop/layout/array_alignment_extended.rb +81 -0
- data/lib/datarockets_style/cop/style/nested_interpolation.rb +35 -0
- data/lib/{datarockets/style → datarockets_style}/formatter/todo_list_formatter.rb +3 -2
- data/lib/datarockets_style/formatter/todo_list_formatter/report_summary.rb +55 -0
- data/lib/datarockets_style/version.rb +3 -0
- metadata +32 -21
- data/lib/datarockets/style.rb +0 -14
- data/lib/datarockets/style/cop/layout/array_alignment_extended.rb +0 -83
- data/lib/datarockets/style/cop/style/nested_interpolation.rb +0 -37
- data/lib/datarockets/style/formatter/todo_list_formatter/report_summary.rb +0 -57
- data/lib/datarockets/style/version.rb +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 7ef40260e95ced035f4c8f86b18c807997a4e79228c72e75a880477fecb8030e
|
4
|
+
data.tar.gz: b35d77e092533855df4092585e8af229653859c6cce685bed399f50880d5bc49
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a8b0a2bcb81d48837a708f337e3f37baba4e26d86f1be42fa02c12f441e18286b1164996a0a0026f870886a887c7664300683de2b80dee0e7fc6c4721934fce2
|
7
|
+
data.tar.gz: 0dd7f1c7bd2a72a7cbebe4fb5eaf4b399f53d014b0ecfe701be979917e09e7bc7467367d0dced76d25f9a76ad369b88da746285774e092b0078eea180209c913
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -2,7 +2,73 @@
|
|
2
2
|
|
3
3
|
The format is described in [Contributing notes](CONTRIBUTING.md#changelog-entry-format).
|
4
4
|
|
5
|
-
## master
|
5
|
+
## master
|
6
|
+
|
7
|
+
## 1.1.0 (2021-02-09)
|
8
|
+
|
9
|
+
### Changed
|
10
|
+
|
11
|
+
* Setup `EnforcedStyleForMultiline` for `Style/TrailingCommaInHashLiteral` rule. ([@r.dubrovsky][])
|
12
|
+
* Update rubocop to ```1.9.1```.([@paydaylight][])
|
13
|
+
* Update rubocop-rails requirement to ```>= 2.8.0, < 2.10.0```. ([@paydaylight][])
|
14
|
+
* Update rubocop-rspec to `2.2.0`. ([@paydaylight][])
|
15
|
+
* Change ```Datarockets::Style``` module to ```DatarocketsStyle```. ([@paydaylight][])
|
16
|
+
|
17
|
+
### Fixed
|
18
|
+
|
19
|
+
* [#177](https://github.com/datarockets/datarockets-style/issues/177) set ```Layout/MultilineOperationIndentation``` to indented ([@paydaylight][])
|
20
|
+
|
21
|
+
## 1.0.0 (2020-11-10)
|
22
|
+
|
23
|
+
### Changed
|
24
|
+
|
25
|
+
* Update rubocop to `1.2.0`.
|
26
|
+
* Update rubocop-rails to `2.8.1`.
|
27
|
+
* Update rubocop-rspec tp `2.0.0`.
|
28
|
+
|
29
|
+
## 0.11.0 (2020-11-07)
|
30
|
+
|
31
|
+
### Changed
|
32
|
+
|
33
|
+
* Update rubocop to '0.93.1'. ([@r.dubrovsky][])
|
34
|
+
* Enable new cops `Lint/BinaryOperatorWithIdenticalOperands`, `Lint/DuplicateRescueException`, `Lint/EmptyConditionalBody`, `Lint/FloatComparison`, `Lint/MissingSuper
|
35
|
+
`, `Lint/OutOfRangeRegexpRef`, `Lint/SelfAssignment`, `Lint/TopLevelReturnWithArgument`, `Lint/UnreachableLoop`, `Style/ExplicitBlockArgument`, `Style/GlobalStdStream`, `Style/OptionalBooleanParameter`, `Style/SingleArgumentDig`, `Style/SoleNestedConditional` and `Style/StringConcatenation` in version `0.89`.
|
36
|
+
* Allow to add all new lints automatically.
|
37
|
+
* Add auto-correctable count notification.
|
38
|
+
* Fix tests
|
39
|
+
* Update rubocop-rails to `2.7.1`.
|
40
|
+
* Update rubocop-rspec tp `1.43.2`.
|
41
|
+
* Disable `RSpec/MultipleMemoizedHelpers` cop.
|
42
|
+
|
43
|
+
## 0.10.0 (2020-07-17)
|
44
|
+
|
45
|
+
### Changed
|
46
|
+
|
47
|
+
* Update rubocop to `0.88.0`. ([@r.dubrovsky][])
|
48
|
+
* Enable new cops `Lint/MixedRegexpCaptureTypes`, `Style/RedundantRegexpCharacterClass` and `Style/RedundantRegexpEscape`. Cops were added in version `0.85`.
|
49
|
+
* Enable new cop `Style/RedundantFetchBlock`. Cop was added in version `0.86`.
|
50
|
+
* Enable new cops `Style/AccessorGrouping`, `Style/BisectedAttrAccessor` and `Style/RedundantAssignment`. Cops were added in version `0.87`.
|
51
|
+
* Enable new cops `Lint/DuplicateElsifCondition`, `Style/ArrayCoercion`, `Style/CaseLikeIf`, `Style/HashAsLastArrayItem`, `Style/HashLikeCase` and `Style/RedundantFileExtensionInRequire`. Cops were added in version `0.88`.
|
52
|
+
* Update rubocop-rails to `2.6.0`.
|
53
|
+
* Update rubocop-rspec to `1.42.0`.
|
54
|
+
|
55
|
+
* Setup `no_braces` rule for `Style/HashAsLastArrayItem` cop which added in the rubocop version `0.88`.
|
56
|
+
|
57
|
+
## 0.9.0 (2020-05-27)
|
58
|
+
|
59
|
+
### Changed
|
60
|
+
|
61
|
+
* **(Breaking)** Drop support for Ruby 2.3. ([@r.dubrovsky][])
|
62
|
+
|
63
|
+
* Update rubocop to `0.84.0`. ([@r.dubrovsky][])
|
64
|
+
* Enable new cops `Lint/RaiseException` and `Lint/StructNewOverride`. Cops were added in version `0.81`.
|
65
|
+
* Enable new cops `Layout/SpaceAroundMethodCallOperator` and `Style/ExponentialNotation`. Cops were added in version `0.82`.
|
66
|
+
* Enable new cops `Layout/EmptyLinesAroundAttributeAccessor` and `Style/SlicingWithRange`. Cops were added in version `0.83`.
|
67
|
+
* Enable new cop `Lint/DeprecatedOpenSSLConstant`. Cop was added in version `0.84`.
|
68
|
+
|
69
|
+
* Update rubocop-rails to `2.5.2`.
|
70
|
+
* Update rubocop-rspec to `1.39`.
|
71
|
+
* Update `activesupport` for fixing security issues.
|
6
72
|
|
7
73
|
## 0.8.1 (2020-03-02)
|
8
74
|
|
@@ -155,4 +221,4 @@ The format is described in [Contributing notes](CONTRIBUTING.md#changelog-entry-
|
|
155
221
|
[@v.kuzmik]: https://github.com/TheBlackArroVV/
|
156
222
|
[@a.branzeanu]: https://github.com/texpert
|
157
223
|
[@nikitasakov]: https://github.com/nikitasakov
|
158
|
-
|
224
|
+
[@paydaylight]: https://github.com/paydaylight
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,61 +1,79 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
datarockets-style (
|
5
|
-
rubocop (
|
6
|
-
rubocop-rails (
|
7
|
-
rubocop-rspec (~>
|
4
|
+
datarockets-style (1.1.0)
|
5
|
+
rubocop (>= 1.2, < 2.0)
|
6
|
+
rubocop-rails (>= 2.8.0, < 2.10.0)
|
7
|
+
rubocop-rspec (~> 2.0)
|
8
8
|
|
9
9
|
GEM
|
10
10
|
remote: https://rubygems.org/
|
11
11
|
specs:
|
12
|
-
|
13
|
-
|
12
|
+
activesupport (6.1.1)
|
13
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
14
|
+
i18n (>= 1.6, < 2)
|
15
|
+
minitest (>= 5.1)
|
16
|
+
tzinfo (~> 2.0)
|
17
|
+
zeitwerk (~> 2.3)
|
18
|
+
ast (2.4.2)
|
19
|
+
byebug (11.1.3)
|
14
20
|
coderay (1.1.2)
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
pry
|
21
|
+
concurrent-ruby (1.1.7)
|
22
|
+
diff-lcs (1.4.4)
|
23
|
+
i18n (1.8.7)
|
24
|
+
concurrent-ruby (~> 1.0)
|
25
|
+
method_source (1.0.0)
|
26
|
+
minitest (5.14.3)
|
27
|
+
parallel (1.20.1)
|
28
|
+
parser (3.0.0.0)
|
29
|
+
ast (~> 2.4.1)
|
30
|
+
pry (0.13.1)
|
31
|
+
coderay (~> 1.1)
|
32
|
+
method_source (~> 1.0)
|
33
|
+
pry-byebug (3.9.0)
|
25
34
|
byebug (~> 11.0)
|
26
|
-
pry (~> 0.
|
27
|
-
rack (2.2.
|
35
|
+
pry (~> 0.13.0)
|
36
|
+
rack (2.2.3)
|
28
37
|
rainbow (3.0.0)
|
29
|
-
rake (13.0.
|
38
|
+
rake (13.0.3)
|
39
|
+
regexp_parser (2.0.3)
|
30
40
|
rexml (3.2.4)
|
31
|
-
rspec (3.
|
32
|
-
rspec-core (~> 3.
|
33
|
-
rspec-expectations (~> 3.
|
34
|
-
rspec-mocks (~> 3.
|
35
|
-
rspec-core (3.
|
36
|
-
rspec-support (~> 3.
|
37
|
-
rspec-expectations (3.
|
41
|
+
rspec (3.10.0)
|
42
|
+
rspec-core (~> 3.10.0)
|
43
|
+
rspec-expectations (~> 3.10.0)
|
44
|
+
rspec-mocks (~> 3.10.0)
|
45
|
+
rspec-core (3.10.0)
|
46
|
+
rspec-support (~> 3.10.0)
|
47
|
+
rspec-expectations (3.10.0)
|
38
48
|
diff-lcs (>= 1.2.0, < 2.0)
|
39
|
-
rspec-support (~> 3.
|
40
|
-
rspec-mocks (3.
|
49
|
+
rspec-support (~> 3.10.0)
|
50
|
+
rspec-mocks (3.10.0)
|
41
51
|
diff-lcs (>= 1.2.0, < 2.0)
|
42
|
-
rspec-support (~> 3.
|
43
|
-
rspec-support (3.
|
44
|
-
rubocop (
|
45
|
-
jaro_winkler (~> 1.5.1)
|
52
|
+
rspec-support (~> 3.10.0)
|
53
|
+
rspec-support (3.10.0)
|
54
|
+
rubocop (1.9.1)
|
46
55
|
parallel (~> 1.10)
|
47
|
-
parser (>=
|
56
|
+
parser (>= 3.0.0.0)
|
48
57
|
rainbow (>= 2.2.2, < 4.0)
|
58
|
+
regexp_parser (>= 1.8, < 3.0)
|
49
59
|
rexml
|
60
|
+
rubocop-ast (>= 1.2.0, < 2.0)
|
50
61
|
ruby-progressbar (~> 1.7)
|
51
|
-
unicode-display_width (>= 1.4.0, <
|
52
|
-
rubocop-
|
62
|
+
unicode-display_width (>= 1.4.0, < 3.0)
|
63
|
+
rubocop-ast (1.4.1)
|
64
|
+
parser (>= 2.7.1.5)
|
65
|
+
rubocop-rails (2.9.1)
|
66
|
+
activesupport (>= 4.2.0)
|
53
67
|
rack (>= 1.1)
|
54
|
-
rubocop (>= 0.
|
55
|
-
rubocop-rspec (1.
|
56
|
-
rubocop (
|
57
|
-
|
58
|
-
|
68
|
+
rubocop (>= 0.90.0, < 2.0)
|
69
|
+
rubocop-rspec (2.1.0)
|
70
|
+
rubocop (~> 1.0)
|
71
|
+
rubocop-ast (>= 1.1.0)
|
72
|
+
ruby-progressbar (1.11.0)
|
73
|
+
tzinfo (2.0.4)
|
74
|
+
concurrent-ruby (~> 1.0)
|
75
|
+
unicode-display_width (2.0.0)
|
76
|
+
zeitwerk (2.4.2)
|
59
77
|
|
60
78
|
PLATFORMS
|
61
79
|
ruby
|
@@ -64,7 +82,7 @@ DEPENDENCIES
|
|
64
82
|
datarockets-style!
|
65
83
|
pry-byebug
|
66
84
|
rake (~> 13.0)
|
67
|
-
rspec (~> 3.
|
85
|
+
rspec (~> 3.10)
|
68
86
|
|
69
87
|
BUNDLED WITH
|
70
|
-
1.
|
88
|
+
2.1.4
|
data/README.md
CHANGED
@@ -10,14 +10,14 @@ Add this line to your application's Gemfile:
|
|
10
10
|
|
11
11
|
```ruby
|
12
12
|
group :test, :development do
|
13
|
-
gem 'datarockets-style'
|
13
|
+
gem 'datarockets-style', '~> 1.0.0'
|
14
14
|
end
|
15
15
|
```
|
16
16
|
|
17
17
|
Or, for a Ruby library, add this to your gemspec:
|
18
18
|
|
19
19
|
```ruby
|
20
|
-
spec.add_development_dependency 'datarockets-style'
|
20
|
+
spec.add_development_dependency 'datarockets-style', '~> 1.0.0'
|
21
21
|
```
|
22
22
|
|
23
23
|
And then execute:
|
data/RELEASING.md
CHANGED
@@ -15,3 +15,19 @@ gem push *built_file*
|
|
15
15
|
* Announce the new release,
|
16
16
|
making sure to say "thank you" to the contributors
|
17
17
|
who helped shape this version!
|
18
|
+
|
19
|
+
## Versioning stragety
|
20
|
+
|
21
|
+
As versioning strategy, we're using SemVer: `MAJOR.MINOR.PATCH`
|
22
|
+
|
23
|
+
A `MAJOR` version must be incremented if there are any backward-incompatible breaking changes included in a release. This has the benefit of making it easy for anyone to quickly identify if a new version will work differently than a previous one.
|
24
|
+
|
25
|
+
Usually, we'll increment it on updating major versions of rubocop dependencies. Ideally, it should be synchronized with the major verion of `rubocop`.
|
26
|
+
|
27
|
+
The `MINOR` version must be incremented if backward-compatible functionality is introduced. In the strictest sense, this means you should be able to upgrade to a new minor version without experiencing any breaking changes.
|
28
|
+
|
29
|
+
Usually, we'll increment it on changing the list of cops, updating minor versions of dependencies.
|
30
|
+
|
31
|
+
The `PATCH` version is meant for backward-compatible bug fixes. You should expect no new functionality with a new patch version, only improvements.
|
32
|
+
|
33
|
+
Usually, we'll use it for updating patch versions of dependencies or fixing bugs of the last version. Changed rules of cops in most cases should be added to minor version.
|
data/bin/console
CHANGED
data/config/base.yml
CHANGED
@@ -1,4 +1,7 @@
|
|
1
|
-
require:
|
1
|
+
require: datarockets_style
|
2
|
+
|
3
|
+
AllCops:
|
4
|
+
NewCops: enable
|
2
5
|
|
3
6
|
Bundler/DuplicatedGem:
|
4
7
|
Enabled: true
|
@@ -29,6 +32,9 @@ Layout/ParameterAlignment:
|
|
29
32
|
EnforcedStyle: with_fixed_indentation
|
30
33
|
IndentationWidth: 2
|
31
34
|
|
35
|
+
Layout/EmptyLinesAroundAttributeAccessor:
|
36
|
+
Enabled: true
|
37
|
+
|
32
38
|
Layout/EndAlignment:
|
33
39
|
EnforcedStyleAlignWith: variable
|
34
40
|
|
@@ -44,25 +50,101 @@ Layout/FirstHashElementIndentation:
|
|
44
50
|
Layout/MultilineMethodCallIndentation:
|
45
51
|
EnforcedStyle: indented
|
46
52
|
|
53
|
+
Layout/MultilineOperationIndentation:
|
54
|
+
EnforcedStyle: indented
|
55
|
+
|
56
|
+
Layout/SpaceAroundMethodCallOperator:
|
57
|
+
Enabled: true
|
58
|
+
|
47
59
|
Layout/SpaceInsideHashLiteralBraces:
|
48
60
|
EnforcedStyle: no_space
|
49
61
|
EnforcedStyleForEmptyBraces: no_space
|
50
62
|
|
63
|
+
Lint/BinaryOperatorWithIdenticalOperands:
|
64
|
+
Enabled: true
|
65
|
+
|
66
|
+
Lint/DeprecatedOpenSSLConstant:
|
67
|
+
Enabled: true
|
68
|
+
|
69
|
+
Lint/DuplicateElsifCondition:
|
70
|
+
Enabled: true
|
71
|
+
|
72
|
+
Lint/DuplicateRescueException:
|
73
|
+
Enabled: true
|
74
|
+
|
75
|
+
Lint/EmptyConditionalBody:
|
76
|
+
Enabled: true
|
77
|
+
|
78
|
+
Lint/FloatComparison:
|
79
|
+
Enabled: true
|
80
|
+
|
81
|
+
Lint/MissingSuper:
|
82
|
+
Enabled: true
|
83
|
+
|
84
|
+
Lint/MixedRegexpCaptureTypes:
|
85
|
+
Enabled: true
|
86
|
+
|
87
|
+
Lint/OutOfRangeRegexpRef:
|
88
|
+
Enabled: true
|
89
|
+
|
90
|
+
Lint/RaiseException:
|
91
|
+
Enabled: true
|
92
|
+
|
93
|
+
Lint/SelfAssignment:
|
94
|
+
Enabled: true
|
95
|
+
|
96
|
+
Lint/StructNewOverride:
|
97
|
+
Enabled: true
|
98
|
+
|
99
|
+
Lint/TopLevelReturnWithArgument:
|
100
|
+
Enabled: true
|
101
|
+
|
102
|
+
Lint/UnreachableLoop:
|
103
|
+
Enabled: true
|
104
|
+
|
51
105
|
Naming/MemoizedInstanceVariableName:
|
52
106
|
EnforcedStyleForLeadingUnderscores: required
|
53
107
|
|
54
108
|
Naming/RescuedExceptionsVariableName:
|
55
109
|
PreferredName: error
|
56
110
|
|
111
|
+
Style/AccessorGrouping:
|
112
|
+
Enabled: true
|
113
|
+
|
114
|
+
Style/ArrayCoercion:
|
115
|
+
Enabled: true
|
116
|
+
|
117
|
+
Style/BisectedAttrAccessor:
|
118
|
+
Enabled: true
|
119
|
+
|
120
|
+
Style/CaseLikeIf:
|
121
|
+
Enabled: true
|
122
|
+
|
57
123
|
Style/ClassAndModuleChildren:
|
58
124
|
EnforcedStyle: nested
|
59
125
|
|
60
126
|
Style/EmptyMethod:
|
61
127
|
EnforcedStyle: expanded
|
62
128
|
|
129
|
+
Style/ExplicitBlockArgument:
|
130
|
+
Enabled: true
|
131
|
+
|
132
|
+
Style/ExponentialNotation:
|
133
|
+
Enabled: true
|
134
|
+
|
135
|
+
Style/GlobalStdStream:
|
136
|
+
Enabled: true
|
137
|
+
|
138
|
+
Style/HashAsLastArrayItem:
|
139
|
+
Enabled: true
|
140
|
+
EnforcedStyle: no_braces
|
141
|
+
|
63
142
|
Style/HashEachMethods:
|
64
143
|
Enabled: true
|
65
144
|
|
145
|
+
Style/HashLikeCase:
|
146
|
+
Enabled: true
|
147
|
+
|
66
148
|
Style/HashTransformKeys:
|
67
149
|
Enabled: true
|
68
150
|
|
@@ -75,5 +157,38 @@ Style/FrozenStringLiteralComment:
|
|
75
157
|
Style/NestedInterpolation:
|
76
158
|
Enabled: true
|
77
159
|
|
160
|
+
Style/OptionalBooleanParameter:
|
161
|
+
Enabled: true
|
162
|
+
|
163
|
+
Style/RedundantAssignment:
|
164
|
+
Enabled: true
|
165
|
+
|
166
|
+
Style/RedundantFetchBlock:
|
167
|
+
Enabled: true
|
168
|
+
|
169
|
+
Style/RedundantFileExtensionInRequire:
|
170
|
+
Enabled: true
|
171
|
+
|
172
|
+
Style/RedundantRegexpCharacterClass:
|
173
|
+
Enabled: true
|
174
|
+
|
175
|
+
Style/RedundantRegexpEscape:
|
176
|
+
Enabled: true
|
177
|
+
|
178
|
+
Style/SingleArgumentDig:
|
179
|
+
Enabled: true
|
180
|
+
|
181
|
+
Style/SlicingWithRange:
|
182
|
+
Enabled: true
|
183
|
+
|
184
|
+
Style/SoleNestedConditional:
|
185
|
+
Enabled: true
|
186
|
+
|
187
|
+
Style/StringConcatenation:
|
188
|
+
Enabled: true
|
189
|
+
|
78
190
|
Style/StringLiterals:
|
79
191
|
EnforcedStyle: double_quotes
|
192
|
+
|
193
|
+
Style/TrailingCommaInHashLiteral:
|
194
|
+
EnforcedStyleForMultiline: comma
|
data/config/rails.yml
CHANGED
data/config/rspec.yml
CHANGED
data/datarockets-style.gemspec
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
lib = File.expand_path("lib", __dir__)
|
2
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
-
require "
|
3
|
+
require "datarockets_style/version"
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = "datarockets-style"
|
7
|
-
spec.version =
|
7
|
+
spec.version = DatarocketsStyle::VERSION
|
8
8
|
spec.authors = ["Roman Dubrovsky"]
|
9
9
|
spec.email = ["r.dubrovsky@datarockets.com"]
|
10
10
|
|
@@ -12,7 +12,7 @@ Gem::Specification.new do |spec|
|
|
12
12
|
spec.homepage = "https://github.com/datarockets/datarockets-style"
|
13
13
|
spec.license = "MIT"
|
14
14
|
|
15
|
-
spec.required_ruby_version = ">= 2.
|
15
|
+
spec.required_ruby_version = ">= 2.4.0"
|
16
16
|
|
17
17
|
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
18
18
|
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
@@ -30,7 +30,7 @@ Gem::Specification.new do |spec|
|
|
30
30
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
31
31
|
spec.require_paths = ["lib"]
|
32
32
|
|
33
|
-
spec.add_dependency "rubocop", "
|
34
|
-
spec.add_dependency "rubocop-rails", "
|
35
|
-
spec.add_dependency "rubocop-rspec", "~>
|
33
|
+
spec.add_dependency "rubocop", ">= 1.2 ", "< 2.0"
|
34
|
+
spec.add_dependency "rubocop-rails", ">= 2.8.0", "< 2.10.0"
|
35
|
+
spec.add_dependency "rubocop-rspec", "~> 2.0"
|
36
36
|
end
|
data/doc/STYLE_GUIDE.md
CHANGED
@@ -392,6 +392,46 @@ def foo
|
|
392
392
|
end
|
393
393
|
```
|
394
394
|
|
395
|
+
* <a name="style-trailing-comma-in-hash-literal"></a>
|
396
|
+
Requires a comma after the last item in a hash.
|
397
|
+
<sup>[[link](#style-trailing-comma-in-hash-literal)]</sup>
|
398
|
+
|
399
|
+
```ruby
|
400
|
+
# bad
|
401
|
+
a = { foo: 1, bar: 2, }
|
402
|
+
|
403
|
+
# good
|
404
|
+
a = { foo: 1, bar: 2 }
|
405
|
+
|
406
|
+
# bad
|
407
|
+
a = {
|
408
|
+
foo: 1, bar: 2,
|
409
|
+
qux: 3,
|
410
|
+
}
|
411
|
+
|
412
|
+
# good
|
413
|
+
a = {
|
414
|
+
foo: 1, bar: 2,
|
415
|
+
qux: 3
|
416
|
+
}
|
417
|
+
|
418
|
+
# bad
|
419
|
+
a = {
|
420
|
+
foo: 1, bar: 2, qux: 3,
|
421
|
+
}
|
422
|
+
|
423
|
+
# good
|
424
|
+
a = {
|
425
|
+
foo: 1, bar: 2, qux: 3
|
426
|
+
}
|
427
|
+
|
428
|
+
# good
|
429
|
+
a = {
|
430
|
+
foo: 1,
|
431
|
+
bar: 2,
|
432
|
+
}
|
433
|
+
```
|
434
|
+
|
395
435
|
* <a name="style-magic-link"></a>
|
396
436
|
There are not any required rules for `frozen_string_literal` magic url.
|
397
437
|
Set up [this cop](https://rubocop.readthedocs.io/en/latest/cops_style/#stylefrozenstringliteralcomment) depends on the project.
|
data/doc/STYLE_GUIDE_RSPEC.md
CHANGED
@@ -15,6 +15,10 @@ This style guide recommends best practices for writing a clear Rspec tests and e
|
|
15
15
|
So there are not any limits for deep or nested groups.
|
16
16
|
<sup>[[link](#rspec-nested-groups)]</sup>
|
17
17
|
|
18
|
+
* <a name="rspec-let-count"></a>
|
19
|
+
We're not limiting a number of `let` blocks in describe and context blocks.
|
20
|
+
<sup>[[link](#rspec-let-count)]</sup>
|
21
|
+
|
18
22
|
* <a name="rspec-subject"></a>
|
19
23
|
Each subject should be named, and we should not use `subject` in our test cases.
|
20
24
|
Prefer to use `is_expected` that `expect(subject_name)` for small tests.
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require "rubocop"
|
2
|
+
require "datarockets_style/formatter/todo_list_formatter"
|
3
|
+
|
4
|
+
require "datarockets_style/version"
|
5
|
+
|
6
|
+
require "datarockets_style/cop/layout/array_alignment_extended"
|
7
|
+
require "datarockets_style/cop/style/nested_interpolation"
|
8
|
+
|
9
|
+
# Top level module for datarockets-style
|
10
|
+
module DatarocketsStyle
|
11
|
+
# Datarickors sharable config
|
12
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module DatarocketsStyle
|
4
|
+
module Cop
|
5
|
+
module Layout
|
6
|
+
# Here we check if the elements of a multi-line array literal are
|
7
|
+
# aligned.
|
8
|
+
#
|
9
|
+
# @example EnforcedStyle: with_first_argument (default)
|
10
|
+
# # good
|
11
|
+
#
|
12
|
+
# array = [1, 2, 3,
|
13
|
+
# 4, 5, 6]
|
14
|
+
# array = ['run',
|
15
|
+
# 'forrest',
|
16
|
+
# 'run']
|
17
|
+
#
|
18
|
+
# # bad
|
19
|
+
#
|
20
|
+
# array = [1, 2, 3,
|
21
|
+
# 4, 5, 6]
|
22
|
+
# array = ['run',
|
23
|
+
# 'forrest',
|
24
|
+
# 'run']
|
25
|
+
#
|
26
|
+
# @example EnforcedStyle: with_fixed_indentation
|
27
|
+
# # good
|
28
|
+
#
|
29
|
+
# array = [1, 2, 3,
|
30
|
+
# 4, 5, 6]
|
31
|
+
#
|
32
|
+
# # bad
|
33
|
+
#
|
34
|
+
# array = [1, 2, 3,
|
35
|
+
# 4, 5, 6]
|
36
|
+
class ArrayAlignmentExtended < RuboCop::Cop::Cop
|
37
|
+
include RuboCop::Cop::Alignment
|
38
|
+
|
39
|
+
ALIGN_PARAMS_MSG = "Align the elements of an array literal if they span more than one line."
|
40
|
+
|
41
|
+
FIXED_INDENT_MSG = "Use one level of indentation for elements " \
|
42
|
+
"following the first line of a multi-line array."
|
43
|
+
|
44
|
+
def on_array(node)
|
45
|
+
return if node.children.size < 2
|
46
|
+
|
47
|
+
check_alignment(node.children, base_column(node, node.children))
|
48
|
+
end
|
49
|
+
|
50
|
+
def autocorrect(node)
|
51
|
+
RuboCop::Cop::AlignmentCorrector.correct(processed_source, node, column_delta)
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
def message(_node)
|
57
|
+
fixed_indentation? ? FIXED_INDENT_MSG : ALIGN_PARAMS_MSG
|
58
|
+
end
|
59
|
+
|
60
|
+
def fixed_indentation?
|
61
|
+
cop_config["EnforcedStyle"] == "with_fixed_indentation"
|
62
|
+
end
|
63
|
+
|
64
|
+
def base_column(node, args)
|
65
|
+
fixed_indentation? ? line_indentation(node) : display_column(args.first.source_range)
|
66
|
+
end
|
67
|
+
|
68
|
+
def line_indentation(node)
|
69
|
+
lineno = target_method_lineno(node)
|
70
|
+
line = node.source_range.source_buffer.source_line(lineno)
|
71
|
+
line_indentation = /\S.*/.match(line).begin(0)
|
72
|
+
line_indentation + configured_indentation_width
|
73
|
+
end
|
74
|
+
|
75
|
+
def target_method_lineno(node)
|
76
|
+
node.loc.line
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module DatarocketsStyle
|
2
|
+
module Cop
|
3
|
+
module Style
|
4
|
+
# This cop checks nested interpolations
|
5
|
+
#
|
6
|
+
# @example
|
7
|
+
#
|
8
|
+
# # bad
|
9
|
+
# "Hello, #{user.blank? ? 'guest' : "dear #{user.name}"}"
|
10
|
+
#
|
11
|
+
# # good
|
12
|
+
# user_name = user.blank? ? 'guest' : "dear #{user.name}"
|
13
|
+
# "Hello, #{user_name}"
|
14
|
+
class NestedInterpolation < RuboCop::Cop::Cop
|
15
|
+
include RuboCop::Cop::Interpolation
|
16
|
+
|
17
|
+
MSG = "Redundant nested interpolation.".freeze
|
18
|
+
|
19
|
+
def on_interpolation(node)
|
20
|
+
node.each_descendant(:dstr) do |descendant_node|
|
21
|
+
detect_double_interpolation(descendant_node)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def detect_double_interpolation(node)
|
28
|
+
node.each_child_node(:begin) do |begin_node|
|
29
|
+
add_offense(begin_node)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -42,9 +42,10 @@ class TodoListFormatter < RuboCop::Formatter::ProgressFormatter
|
|
42
42
|
def finished(inspected_files)
|
43
43
|
report_summary(inspected_files.length,
|
44
44
|
@total_offense_count,
|
45
|
-
@total_correction_count
|
45
|
+
@total_correction_count,
|
46
|
+
@total_correctable_count)
|
46
47
|
output.puts
|
47
48
|
|
48
|
-
|
49
|
+
DatarocketsStyle::Formatter::TodoListFormatter::ReportSummary.new(offense_list).call(output)
|
49
50
|
end
|
50
51
|
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module DatarocketsStyle
|
2
|
+
module Formatter
|
3
|
+
module TodoListFormatter
|
4
|
+
# Get file of pairs: file path and cop name - and prepare report for ToDo list formatter.
|
5
|
+
#
|
6
|
+
# Example of result:
|
7
|
+
#
|
8
|
+
# LineLength
|
9
|
+
# Exclude:
|
10
|
+
# - "really/bad/file.rb" # 100500
|
11
|
+
# - "almost/ok.rb" # 1
|
12
|
+
class ReportSummary
|
13
|
+
attr_reader :offense_list
|
14
|
+
|
15
|
+
FileGroup = Struct.new(:file, :offenses_count) do
|
16
|
+
def print(output)
|
17
|
+
output.puts " - '#{file}' # #{offenses_count}"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
OffenseGroup = Struct.new(:cop_name, :offenses) do
|
22
|
+
def file_groups
|
23
|
+
@_file_groups ||= offenses.group_by(&:file_path).map do |file, offenses|
|
24
|
+
FileGroup.new(file, offenses.length)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def print(output)
|
29
|
+
output.puts("#{cop_name}:")
|
30
|
+
output.puts(" Exclude:")
|
31
|
+
file_groups.sort_by(&:file).each do |file_group|
|
32
|
+
file_group.print(output)
|
33
|
+
end
|
34
|
+
output.puts
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def initialize(offense_list)
|
39
|
+
@offense_list = offense_list
|
40
|
+
end
|
41
|
+
|
42
|
+
def call(output)
|
43
|
+
offense_groups.sort_by(&:cop_name).each { |group| group.print(output) }
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def offense_groups
|
49
|
+
@_offense_groups ||= offense_list.group_by(&:cop_name)
|
50
|
+
.map { |cop_name, offenses| OffenseGroup.new(cop_name, offenses) }
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
metadata
CHANGED
@@ -1,57 +1,69 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: datarockets-style
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Roman Dubrovsky
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubocop
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.2'
|
20
|
+
- - "<"
|
18
21
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0
|
22
|
+
version: '2.0'
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
|
-
- - "
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.2'
|
30
|
+
- - "<"
|
25
31
|
- !ruby/object:Gem::Version
|
26
|
-
version: '0
|
32
|
+
version: '2.0'
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: rubocop-rails
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
30
36
|
requirements:
|
31
|
-
- - "
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: 2.8.0
|
40
|
+
- - "<"
|
32
41
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
42
|
+
version: 2.10.0
|
34
43
|
type: :runtime
|
35
44
|
prerelease: false
|
36
45
|
version_requirements: !ruby/object:Gem::Requirement
|
37
46
|
requirements:
|
38
|
-
- - "
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: 2.8.0
|
50
|
+
- - "<"
|
39
51
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
52
|
+
version: 2.10.0
|
41
53
|
- !ruby/object:Gem::Dependency
|
42
54
|
name: rubocop-rspec
|
43
55
|
requirement: !ruby/object:Gem::Requirement
|
44
56
|
requirements:
|
45
57
|
- - "~>"
|
46
58
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
59
|
+
version: '2.0'
|
48
60
|
type: :runtime
|
49
61
|
prerelease: false
|
50
62
|
version_requirements: !ruby/object:Gem::Requirement
|
51
63
|
requirements:
|
52
64
|
- - "~>"
|
53
65
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
66
|
+
version: '2.0'
|
55
67
|
description:
|
56
68
|
email:
|
57
69
|
- r.dubrovsky@datarockets.com
|
@@ -86,12 +98,12 @@ files:
|
|
86
98
|
- doc/STYLE_GUIDE.md
|
87
99
|
- doc/STYLE_GUIDE_RAILS.md
|
88
100
|
- doc/STYLE_GUIDE_RSPEC.md
|
89
|
-
- lib/
|
90
|
-
- lib/
|
91
|
-
- lib/
|
92
|
-
- lib/
|
93
|
-
- lib/
|
94
|
-
- lib/
|
101
|
+
- lib/datarockets_style.rb
|
102
|
+
- lib/datarockets_style/cop/layout/array_alignment_extended.rb
|
103
|
+
- lib/datarockets_style/cop/style/nested_interpolation.rb
|
104
|
+
- lib/datarockets_style/formatter/todo_list_formatter.rb
|
105
|
+
- lib/datarockets_style/formatter/todo_list_formatter/report_summary.rb
|
106
|
+
- lib/datarockets_style/version.rb
|
95
107
|
- manual/cops_layout.md
|
96
108
|
homepage: https://github.com/datarockets/datarockets-style
|
97
109
|
licenses:
|
@@ -106,15 +118,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
106
118
|
requirements:
|
107
119
|
- - ">="
|
108
120
|
- !ruby/object:Gem::Version
|
109
|
-
version: 2.
|
121
|
+
version: 2.4.0
|
110
122
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
111
123
|
requirements:
|
112
124
|
- - ">="
|
113
125
|
- !ruby/object:Gem::Version
|
114
126
|
version: '0'
|
115
127
|
requirements: []
|
116
|
-
|
117
|
-
rubygems_version: 2.6.14
|
128
|
+
rubygems_version: 3.2.5
|
118
129
|
signing_key:
|
119
130
|
specification_version: 4
|
120
131
|
summary: Datarockets style guides and shared style configs
|
data/lib/datarockets/style.rb
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
require "rubocop"
|
2
|
-
require "datarockets/style/formatter/todo_list_formatter"
|
3
|
-
|
4
|
-
require "datarockets/style/version"
|
5
|
-
|
6
|
-
require "datarockets/style/cop/layout/array_alignment_extended"
|
7
|
-
require "datarockets/style/cop/style/nested_interpolation"
|
8
|
-
|
9
|
-
module Datarockets
|
10
|
-
# Datarickors sharable config
|
11
|
-
module Style
|
12
|
-
# Your code goes here...
|
13
|
-
end
|
14
|
-
end
|
@@ -1,83 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Datarockets
|
4
|
-
module Style
|
5
|
-
module Cop
|
6
|
-
module Layout
|
7
|
-
# Here we check if the elements of a multi-line array literal are
|
8
|
-
# aligned.
|
9
|
-
#
|
10
|
-
# @example EnforcedStyle: with_first_argument (default)
|
11
|
-
# # good
|
12
|
-
#
|
13
|
-
# array = [1, 2, 3,
|
14
|
-
# 4, 5, 6]
|
15
|
-
# array = ['run',
|
16
|
-
# 'forrest',
|
17
|
-
# 'run']
|
18
|
-
#
|
19
|
-
# # bad
|
20
|
-
#
|
21
|
-
# array = [1, 2, 3,
|
22
|
-
# 4, 5, 6]
|
23
|
-
# array = ['run',
|
24
|
-
# 'forrest',
|
25
|
-
# 'run']
|
26
|
-
#
|
27
|
-
# @example EnforcedStyle: with_fixed_indentation
|
28
|
-
# # good
|
29
|
-
#
|
30
|
-
# array = [1, 2, 3,
|
31
|
-
# 4, 5, 6]
|
32
|
-
#
|
33
|
-
# # bad
|
34
|
-
#
|
35
|
-
# array = [1, 2, 3,
|
36
|
-
# 4, 5, 6]
|
37
|
-
class ArrayAlignmentExtended < RuboCop::Cop::Cop
|
38
|
-
include RuboCop::Cop::Alignment
|
39
|
-
|
40
|
-
ALIGN_PARAMS_MSG = "Align the elements of an array literal if they span more than one line."
|
41
|
-
|
42
|
-
FIXED_INDENT_MSG = "Use one level of indentation for elements " \
|
43
|
-
"following the first line of a multi-line array."
|
44
|
-
|
45
|
-
def on_array(node)
|
46
|
-
return if node.children.size < 2
|
47
|
-
|
48
|
-
check_alignment(node.children, base_column(node, node.children))
|
49
|
-
end
|
50
|
-
|
51
|
-
def autocorrect(node)
|
52
|
-
RuboCop::Cop::AlignmentCorrector.correct(processed_source, node, column_delta)
|
53
|
-
end
|
54
|
-
|
55
|
-
private
|
56
|
-
|
57
|
-
def message(_node)
|
58
|
-
fixed_indentation? ? FIXED_INDENT_MSG : ALIGN_PARAMS_MSG
|
59
|
-
end
|
60
|
-
|
61
|
-
def fixed_indentation?
|
62
|
-
cop_config["EnforcedStyle"] == "with_fixed_indentation"
|
63
|
-
end
|
64
|
-
|
65
|
-
def base_column(node, args)
|
66
|
-
fixed_indentation? ? line_indentation(node) : display_column(args.first.source_range)
|
67
|
-
end
|
68
|
-
|
69
|
-
def line_indentation(node)
|
70
|
-
lineno = target_method_lineno(node)
|
71
|
-
line = node.source_range.source_buffer.source_line(lineno)
|
72
|
-
line_indentation = /\S.*/.match(line).begin(0)
|
73
|
-
line_indentation + configured_indentation_width
|
74
|
-
end
|
75
|
-
|
76
|
-
def target_method_lineno(node)
|
77
|
-
node.loc.line
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
@@ -1,37 +0,0 @@
|
|
1
|
-
module Datarockets
|
2
|
-
module Style
|
3
|
-
module Cop
|
4
|
-
module Style
|
5
|
-
# This cop checks nested interpolations
|
6
|
-
#
|
7
|
-
# @example
|
8
|
-
#
|
9
|
-
# # bad
|
10
|
-
# "Hello, #{user.blank? ? 'guest' : "dear #{user.name}"}"
|
11
|
-
#
|
12
|
-
# # good
|
13
|
-
# user_name = user.blank? ? 'guest' : "dear #{user.name}"
|
14
|
-
# "Hello, #{user_name}"
|
15
|
-
class NestedInterpolation < RuboCop::Cop::Cop
|
16
|
-
include RuboCop::Cop::Interpolation
|
17
|
-
|
18
|
-
MSG = "Redundant nested interpolation.".freeze
|
19
|
-
|
20
|
-
def on_interpolation(node)
|
21
|
-
node.each_descendant(:dstr) do |descendant_node|
|
22
|
-
detect_double_interpolation(descendant_node)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
private
|
27
|
-
|
28
|
-
def detect_double_interpolation(node)
|
29
|
-
node.each_child_node(:begin) do |begin_node|
|
30
|
-
add_offense(begin_node)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
@@ -1,57 +0,0 @@
|
|
1
|
-
module Datarockets
|
2
|
-
module Style
|
3
|
-
module Formatter
|
4
|
-
module TodoListFormatter
|
5
|
-
# Get file of pairs: file path and cop name - and prepare report for ToDo list formatter.
|
6
|
-
#
|
7
|
-
# Example of result:
|
8
|
-
#
|
9
|
-
# LineLength
|
10
|
-
# Exclude:
|
11
|
-
# - "really/bad/file.rb" # 100500
|
12
|
-
# - "almost/ok.rb" # 1
|
13
|
-
class ReportSummary
|
14
|
-
attr_reader :offense_list
|
15
|
-
|
16
|
-
FileGroup = Struct.new(:file, :count) do
|
17
|
-
def print(output)
|
18
|
-
output.puts " - '#{file}' # #{count}"
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
OffenseGroup = Struct.new(:cop_name, :offenses) do
|
23
|
-
def file_groups
|
24
|
-
@_file_groups ||= offenses.group_by(&:file_path).map do |file, offenses|
|
25
|
-
FileGroup.new(file, offenses.length)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def print(output)
|
30
|
-
output.puts(cop_name + ":")
|
31
|
-
output.puts(" Exclude:")
|
32
|
-
file_groups.sort_by(&:file).each do |file_group|
|
33
|
-
file_group.print(output)
|
34
|
-
end
|
35
|
-
output.puts
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def initialize(offense_list)
|
40
|
-
@offense_list = offense_list
|
41
|
-
end
|
42
|
-
|
43
|
-
def call(output)
|
44
|
-
offense_groups.sort_by(&:cop_name).each { |group| group.print(output) }
|
45
|
-
end
|
46
|
-
|
47
|
-
private
|
48
|
-
|
49
|
-
def offense_groups
|
50
|
-
@_offense_groups ||= offense_list.group_by(&:cop_name)
|
51
|
-
.map { |cop_name, offenses| OffenseGroup.new(cop_name, offenses) }
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|