datarockets-style 0.7.0 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 4344b6ab0459c0d422d77d2138d4fdd459ec65e4
4
- data.tar.gz: 74cde7a5b535323c47c0ac6670fe79b3a803a27b
2
+ SHA256:
3
+ metadata.gz: 7fafb7c948730c343855a68d07997ccd3810e8167c2a015e8d36bc62f4d131ed
4
+ data.tar.gz: 9949285276625c8fc9c699b0cf81b95d571d33d48cc01d28079bfa389a550398
5
5
  SHA512:
6
- metadata.gz: 89939e5bf7174b4be6c2cee93d9d19d26232cb034b19818a6bf2ac87cf557f39cf72834c67a812edd92845cf757e97eb51faf9f668484a0d3a38baa72757432a
7
- data.tar.gz: da83a217a19f55e2721f496cc1de35d752cc1699e52f9b5a7557986d67b5e43eadd0ecb6e4c300795f6c67f35d2aff4cca8bab7417b65b0feaa8538a8385959b
6
+ metadata.gz: 257dfbd765bb44afca6141ad304c8be3140d7b3755b8a39755a5a5d335cc01422cad573ddbd5aab99067a65703b7933a073f53bd7b0a276f8340f42a31a426a5
7
+ data.tar.gz: 54a27bdd31588eda01c775ec316886fc835f29d714b5a848f858ba828a73e8c845ea2e524231bf8dd31779bc1fb788e90e28b44de0ba94eb1574d957b97a2a31
@@ -14,3 +14,4 @@ To-Do list:
14
14
  - [ ] update dependencies to the latest version
15
15
  - [ ] investigate how it changes and affect our current styles and cops
16
16
  - [ ] check the required ruby version
17
+ - [ ] enable pending cops
data/.gitignore CHANGED
@@ -4,3 +4,5 @@
4
4
  /_yardoc/
5
5
  /pkg/
6
6
  /tmp/
7
+
8
+ .byebug_history
@@ -7,4 +7,9 @@ inherit_mode:
7
7
  - Exclude
8
8
 
9
9
  AllCops:
10
- TargetRubyVersion: 2.3
10
+ TargetRubyVersion: 2.4
11
+
12
+ # for checking cops with interpolation
13
+ Lint/InterpolationCheck:
14
+ Exclude:
15
+ - 'spec/**/*.rb'
@@ -2,7 +2,76 @@
2
2
 
3
3
  The format is described in [Contributing notes](CONTRIBUTING.md#changelog-entry-format).
4
4
 
5
- ## master (unreleased)
5
+ ## 0.11.0 (2020-11-07)
6
+
7
+ ### Changed
8
+
9
+ * Update rubocop to '0.93.1'. ([@r.dubrovsky][])
10
+ * Enable new cops `Lint/BinaryOperatorWithIdenticalOperands`, `Lint/DuplicateRescueException`, `Lint/EmptyConditionalBody`, `Lint/FloatComparison`, `Lint/MissingSuper
11
+ `, `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`.
12
+ * Allow to add all new lints automatically.
13
+ * Add auto-correctable count notification.
14
+ * Fix tests
15
+ * Update rubocop-rails to `2.7.1`.
16
+ * Update rubocop-rspec tp `1.43.2`.
17
+ * Disable `RSpec/MultipleMemoizedHelpers` cop.
18
+
19
+ ## 0.10.0 (2020-07-17)
20
+
21
+ ### Changed
22
+
23
+ * Update rubocop to `0.88.0`. ([@r.dubrovsky][])
24
+ * Enable new cops `Lint/MixedRegexpCaptureTypes`, `Style/RedundantRegexpCharacterClass` and `Style/RedundantRegexpEscape`. Cops were added in version `0.85`.
25
+ * Enable new cop `Style/RedundantFetchBlock`. Cop was added in version `0.86`.
26
+ * Enable new cops `Style/AccessorGrouping`, `Style/BisectedAttrAccessor` and `Style/RedundantAssignment`. Cops were added in version `0.87`.
27
+ * Enable new cops `Lint/DuplicateElsifCondition`, `Style/ArrayCoercion`, `Style/CaseLikeIf`, `Style/HashAsLastArrayItem`, `Style/HashLikeCase` and `Style/RedundantFileExtensionInRequire`. Cops were added in version `0.88`.
28
+ * Update rubocop-rails to `2.6.0`.
29
+ * Update rubocop-rspec to `1.42.0`.
30
+
31
+ * Setup `no_braces` rule for `Style/HashAsLastArrayItem` cop which added in the rubocop version `0.88`.
32
+
33
+ ## 0.9.0 (2020-05-27)
34
+
35
+ ### Changed
36
+
37
+ * **(Breaking)** Drop support for Ruby 2.3. ([@r.dubrovsky][])
38
+
39
+ * Update rubocop to `0.84.0`. ([@r.dubrovsky][])
40
+ * Enable new cops `Lint/RaiseException` and `Lint/StructNewOverride`. Cops were added in version `0.81`.
41
+ * Enable new cops `Layout/SpaceAroundMethodCallOperator` and `Style/ExponentialNotation`. Cops were added in version `0.82`.
42
+ * Enable new cops `Layout/EmptyLinesAroundAttributeAccessor` and `Style/SlicingWithRange`. Cops were added in version `0.83`.
43
+ * Enable new cop `Lint/DeprecatedOpenSSLConstant`. Cop was added in version `0.84`.
44
+
45
+ * Update rubocop-rails to `2.5.2`.
46
+ * Update rubocop-rspec to `1.39`.
47
+ * Update `activesupport` for fixing security issues.
48
+
49
+ ## 0.8.1 (2020-03-02)
50
+
51
+ ### Changed
52
+
53
+ * Update rubocop to `0.80.1`.
54
+
55
+ ## 0.8.0 (2020-02-20)
56
+
57
+ ### Added
58
+
59
+ * Add `Style/NestedInterpolation` cop. ([@r.dubrovsky][])
60
+
61
+ ### Changed
62
+
63
+ * Update rubocop to `0.80.0`. ([@r.dubrovsky][])
64
+ * Add `Style/HashEachMethods`, `Style/HashTransformKey`, `Style/HashTransformValues` cops.
65
+ * [#7641](https://github.com/rubocop-hq/rubocop/issues/7641): Remove `Style/BracesAroundHashParameters` cop.
66
+
67
+ * Update rubocop-rspec to `1.38.1`.
68
+ * Add RSpec/RepeatedExampleGroupBody cop. ([@ula][])
69
+ * Add RSpec/RepeatedExampleGroupDescription cop. ([@ula][])
70
+
71
+ * Enable `rubocop-rails` cops for rails config. ([@ula][])
72
+ * Setup `Style/Documentation` for rails config. ([@r.dubrovsky][])
73
+ * Setup `Style/ClassAndModuleChildren` cop. ([@r.dubrovsky][])
74
+ * Enable `RSpec/LetSetup` cop. ([@r.dubrovsky][])
6
75
 
7
76
  ## 0.7.0 (2020-01-27)
8
77
 
@@ -1,30 +1,43 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- datarockets-style (0.7.0)
5
- rubocop (~> 0.76)
6
- rubocop-rspec (~> 1.36)
4
+ datarockets-style (0.11.0)
5
+ rubocop (~> 0.93)
6
+ rubocop-rails (>= 2.6.0, < 2.8.0)
7
+ rubocop-rspec (~> 1.42)
7
8
 
8
9
  GEM
9
10
  remote: https://rubygems.org/
10
11
  specs:
11
- ast (2.4.0)
12
- byebug (11.0.1)
12
+ activesupport (6.0.3.4)
13
+ concurrent-ruby (~> 1.0, >= 1.0.2)
14
+ i18n (>= 0.7, < 2)
15
+ minitest (~> 5.1)
16
+ tzinfo (~> 1.1)
17
+ zeitwerk (~> 2.2, >= 2.2.2)
18
+ ast (2.4.1)
19
+ byebug (11.1.3)
13
20
  coderay (1.1.2)
21
+ concurrent-ruby (1.1.7)
14
22
  diff-lcs (1.3)
15
- jaro_winkler (1.5.4)
16
- method_source (0.9.2)
17
- parallel (1.19.1)
18
- parser (2.7.0.2)
19
- ast (~> 2.4.0)
20
- pry (0.12.2)
21
- coderay (~> 1.1.0)
22
- method_source (~> 0.9.0)
23
- pry-byebug (3.7.0)
23
+ i18n (1.8.5)
24
+ concurrent-ruby (~> 1.0)
25
+ method_source (1.0.0)
26
+ minitest (5.14.2)
27
+ parallel (1.19.2)
28
+ parser (2.7.2.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)
24
34
  byebug (~> 11.0)
25
- pry (~> 0.10)
35
+ pry (~> 0.13.0)
36
+ rack (2.2.3)
26
37
  rainbow (3.0.0)
27
38
  rake (13.0.1)
39
+ regexp_parser (1.8.2)
40
+ rexml (3.2.4)
28
41
  rspec (3.9.0)
29
42
  rspec-core (~> 3.9.0)
30
43
  rspec-expectations (~> 3.9.0)
@@ -38,17 +51,30 @@ GEM
38
51
  diff-lcs (>= 1.2.0, < 2.0)
39
52
  rspec-support (~> 3.9.0)
40
53
  rspec-support (3.9.0)
41
- rubocop (0.79.0)
42
- jaro_winkler (~> 1.5.1)
54
+ rubocop (0.93.1)
43
55
  parallel (~> 1.10)
44
- parser (>= 2.7.0.1)
56
+ parser (>= 2.7.1.5)
45
57
  rainbow (>= 2.2.2, < 4.0)
58
+ regexp_parser (>= 1.8)
59
+ rexml
60
+ rubocop-ast (>= 0.6.0)
46
61
  ruby-progressbar (~> 1.7)
47
- unicode-display_width (>= 1.4.0, < 1.7)
48
- rubocop-rspec (1.37.1)
49
- rubocop (>= 0.68.1)
62
+ unicode-display_width (>= 1.4.0, < 2.0)
63
+ rubocop-ast (1.1.1)
64
+ parser (>= 2.7.1.5)
65
+ rubocop-rails (2.7.1)
66
+ activesupport (>= 4.2.0)
67
+ rack (>= 1.1)
68
+ rubocop (>= 0.87.0)
69
+ rubocop-rspec (1.44.1)
70
+ rubocop (~> 0.87)
71
+ rubocop-ast (>= 0.7.1)
50
72
  ruby-progressbar (1.10.1)
51
- unicode-display_width (1.6.1)
73
+ thread_safe (0.3.6)
74
+ tzinfo (1.2.7)
75
+ thread_safe (~> 0.1)
76
+ unicode-display_width (1.7.0)
77
+ zeitwerk (2.4.1)
52
78
 
53
79
  PLATFORMS
54
80
  ruby
@@ -60,4 +86,4 @@ DEPENDENCIES
60
86
  rspec (~> 3.7)
61
87
 
62
88
  BUNDLED WITH
63
- 1.16.3
89
+ 2.1.4
data/README.md CHANGED
@@ -76,6 +76,11 @@ There are some areas in which there is no clear consensus in datarockets team re
76
76
  In such scenarios, all popular styles are acknowledged and it’s up to you to pick one and apply it consistently.
77
77
  For that just set up these cops before starting of usage.
78
78
 
79
+ #### RSpec/LetSetup
80
+
81
+ [This cop](https://rubocop-rspec.readthedocs.io/en/latest/cops_rspec/#rspecletsetup) is enabled by default and we suggest not to use unreferenced `let` variables in your test cases.
82
+ However, if it feels like the cop should be enabled and tests can't be written w/o them, please create an issue with your cases so that we can re-thinking our solution about enabling this cop.
83
+
79
84
  #### Style/StringLiterals
80
85
 
81
86
  There are two popular styles in the Ruby community, both of which are considered good - single quotes by default and double quotes by default.
@@ -88,6 +93,10 @@ P.S. The string literals in this gem are using double quotes by default.
88
93
 
89
94
  For an existing project, we suggest running rubocop with both styles and choose which has fewer offenses (which is more popular in the current project).
90
95
 
96
+ ### Custom cops
97
+
98
+ We have custom cops. You can find specification for them [here](manual).
99
+
91
100
  ## Formatters
92
101
 
93
102
  ### ToDo list formatter
@@ -1,5 +1,8 @@
1
1
  require: datarockets/style
2
2
 
3
+ AllCops:
4
+ NewCops: enable
5
+
3
6
  Bundler/DuplicatedGem:
4
7
  Enabled: true
5
8
 
@@ -16,28 +19,12 @@ Layout/ArrayAlignmentExtended:
16
19
  Description: >-
17
20
  Align the elements of an array literal if they span more than
18
21
  one line.
19
- # Alignment of elements of a multi-line array.
20
- #
21
- # The `with_first_parameter` style aligns the following lines along the same
22
- # column as the first element.
23
- #
24
- # array = [1, 2, 3,
25
- # 4, 5, 6]
26
- #
27
- # The `with_fixed_indentation` style aligns the following lines with one
28
- # level of indentation relative to the start of the line with start of array.
29
- #
30
- # array = [1, 2, 3,
31
- # 4, 5, 6]
32
22
  EnforcedStyle: with_fixed_indentation
33
23
  SupportedStyles:
34
24
  - with_first_parameter
35
25
  - with_fixed_indentation
36
- # By default, the indentation width from Layout/IndentationWidth is used
37
- # But it can be overridden by setting this parameter
38
26
  IndentationWidth: ~
39
27
 
40
-
41
28
  Layout/HashAlignment:
42
29
  EnforcedLastArgumentHashStyle: always_ignore
43
30
 
@@ -45,6 +32,9 @@ Layout/ParameterAlignment:
45
32
  EnforcedStyle: with_fixed_indentation
46
33
  IndentationWidth: 2
47
34
 
35
+ Layout/EmptyLinesAroundAttributeAccessor:
36
+ Enabled: true
37
+
48
38
  Layout/EndAlignment:
49
39
  EnforcedStyleAlignWith: variable
50
40
 
@@ -60,24 +50,139 @@ Layout/FirstHashElementIndentation:
60
50
  Layout/MultilineMethodCallIndentation:
61
51
  EnforcedStyle: indented
62
52
 
53
+ Layout/SpaceAroundMethodCallOperator:
54
+ Enabled: true
55
+
63
56
  Layout/SpaceInsideHashLiteralBraces:
64
57
  EnforcedStyle: no_space
65
58
  EnforcedStyleForEmptyBraces: no_space
66
59
 
60
+ Lint/BinaryOperatorWithIdenticalOperands:
61
+ Enabled: true
62
+
63
+ Lint/DeprecatedOpenSSLConstant:
64
+ Enabled: true
65
+
66
+ Lint/DuplicateElsifCondition:
67
+ Enabled: true
68
+
69
+ Lint/DuplicateRescueException:
70
+ Enabled: true
71
+
72
+ Lint/EmptyConditionalBody:
73
+ Enabled: true
74
+
75
+ Lint/FloatComparison:
76
+ Enabled: true
77
+
78
+ Lint/MissingSuper:
79
+ Enabled: true
80
+
81
+ Lint/MixedRegexpCaptureTypes:
82
+ Enabled: true
83
+
84
+ Lint/OutOfRangeRegexpRef:
85
+ Enabled: true
86
+
87
+ Lint/RaiseException:
88
+ Enabled: true
89
+
90
+ Lint/SelfAssignment:
91
+ Enabled: true
92
+
93
+ Lint/StructNewOverride:
94
+ Enabled: true
95
+
96
+ Lint/TopLevelReturnWithArgument:
97
+ Enabled: true
98
+
99
+ Lint/UnreachableLoop:
100
+ Enabled: true
101
+
67
102
  Naming/MemoizedInstanceVariableName:
68
103
  EnforcedStyleForLeadingUnderscores: required
69
104
 
70
105
  Naming/RescuedExceptionsVariableName:
71
106
  PreferredName: error
72
107
 
73
- Style/BracesAroundHashParameters:
74
- EnforcedStyle: context_dependent
108
+ Style/AccessorGrouping:
109
+ Enabled: true
110
+
111
+ Style/ArrayCoercion:
112
+ Enabled: true
113
+
114
+ Style/BisectedAttrAccessor:
115
+ Enabled: true
116
+
117
+ Style/CaseLikeIf:
118
+ Enabled: true
119
+
120
+ Style/ClassAndModuleChildren:
121
+ EnforcedStyle: nested
75
122
 
76
123
  Style/EmptyMethod:
77
124
  EnforcedStyle: expanded
78
125
 
126
+ Style/ExplicitBlockArgument:
127
+ Enabled: true
128
+
129
+ Style/ExponentialNotation:
130
+ Enabled: true
131
+
132
+ Style/GlobalStdStream:
133
+ Enabled: true
134
+
135
+ Style/HashAsLastArrayItem:
136
+ Enabled: true
137
+ EnforcedStyle: no_braces
138
+
139
+ Style/HashEachMethods:
140
+ Enabled: true
141
+
142
+ Style/HashLikeCase:
143
+ Enabled: true
144
+
145
+ Style/HashTransformKeys:
146
+ Enabled: true
147
+
148
+ Style/HashTransformValues:
149
+ Enabled: true
150
+
79
151
  Style/FrozenStringLiteralComment:
80
152
  Enabled: false
81
153
 
154
+ Style/NestedInterpolation:
155
+ Enabled: true
156
+
157
+ Style/OptionalBooleanParameter:
158
+ Enabled: true
159
+
160
+ Style/RedundantAssignment:
161
+ Enabled: true
162
+
163
+ Style/RedundantFetchBlock:
164
+ Enabled: true
165
+
166
+ Style/RedundantFileExtensionInRequire:
167
+ Enabled: true
168
+
169
+ Style/RedundantRegexpCharacterClass:
170
+ Enabled: true
171
+
172
+ Style/RedundantRegexpEscape:
173
+ Enabled: true
174
+
175
+ Style/SingleArgumentDig:
176
+ Enabled: true
177
+
178
+ Style/SlicingWithRange:
179
+ Enabled: true
180
+
181
+ Style/SoleNestedConditional:
182
+ Enabled: true
183
+
184
+ Style/StringConcatenation:
185
+ Enabled: true
186
+
82
187
  Style/StringLiterals:
83
188
  EnforcedStyle: double_quotes
@@ -1,3 +1,7 @@
1
+ require: rubocop-rails
2
+
3
+ inherit_from: base.yml
4
+
1
5
  AllCops:
2
6
  Exclude:
3
7
  - "db/**/*"
@@ -10,4 +14,7 @@ AllCops:
10
14
  - "config.ru"
11
15
  - "Rakefile"
12
16
 
13
- inherit_from: base.yml
17
+ Style/Documentation:
18
+ Enabled: true
19
+ Exclude:
20
+ - "app/**/*"
@@ -26,10 +26,13 @@ RSpec/ImplicitSubject:
26
26
  Enabled: false
27
27
 
28
28
  RSpec/LetSetup:
29
- Enabled: false
29
+ Enabled: true
30
30
 
31
31
  RSpec/MessageSpies:
32
32
  EnforcedStyle: have_received
33
33
 
34
+ RSpec/MultipleMemoizedHelpers:
35
+ Enabled: false
36
+
34
37
  RSpec/NestedGroups:
35
38
  Enabled: false
@@ -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.3.0"
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,6 +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", "~> 0.76"
34
- spec.add_dependency "rubocop-rspec", "~> 1.36"
33
+ spec.add_dependency "rubocop", "~> 0.93"
34
+ spec.add_dependency "rubocop-rails", ">= 2.6.0", "< 2.8.0"
35
+ spec.add_dependency "rubocop-rspec", "~> 1.42"
35
36
  end
@@ -35,6 +35,19 @@ This is a small list of differences which we have when compared with community s
35
35
  Adopt a consistent string literal quoting style.
36
36
  <sup>[[link](#style-string-quotes)]</sup>
37
37
 
38
+ * <a name="style-nested-interpolation"></a>
39
+ Avoid using nested interpolation.
40
+ <sup>[[link](#style-nested-interpolation)]</sup>
41
+
42
+ ```ruby
43
+ # bad
44
+ "Hello, #{user.blank? ? 'guest' : "dear #{user.name}"}"
45
+
46
+ # good
47
+ user_name = user.blank? ? 'guest' : "dear #{user.name}"
48
+ "Hello, #{user_name}"
49
+ ```
50
+
38
51
  * <a name="style-hash-aligning"></a>
39
52
  If elements of a hash literal span more than one line, we're aligning them by keys.
40
53
  Also, the first hash key is aligned by an indentation level.
@@ -384,18 +397,3 @@ end
384
397
  Set up [this cop](https://rubocop.readthedocs.io/en/latest/cops_style/#stylefrozenstringliteralcomment) depends on the project.
385
398
  So set up it on the local rubocop config manually.
386
399
  <sup>[[link](#style-magic-link)]</sup>
387
-
388
- * <a name="style-braces-around-hash-params"></a>
389
- Not to use braces around the last hash literal parameter.
390
- But requires braces if the second to last parameter is also a hash literal.
391
- <sup>[[link](#style-braces-around-hash-params)]</sup>
392
-
393
- ```ruby
394
- # bad
395
- some_method(x, y, {a: 1, b: 2})
396
- some_method(x, y, {a: 1, b: 2}, a: 1, b: 2)
397
-
398
- # good
399
- some_method(x, y, a: 1, b: 2)
400
- some_method(x, y, {a: 1, b: 2}, {a: 1, b: 2})
401
- ```
@@ -4,6 +4,32 @@ This style is based on rules from [Ruby Style Guide](docs/STYLE_GUIDE.md). Also,
4
4
 
5
5
  This is a small list of differences which we have when compared with community and our Ruby style guides:
6
6
 
7
- ## TODO
7
+ ## Table of contents
8
+
9
+ * [Style](#Style)
10
+
11
+ ## Style
12
+
13
+ * <a name="documentation"></a>
14
+ Documentation is requeried for all files except `app` directory.
15
+ <sup>[[link](#documentation)]</sup>
16
+
17
+ * <a name="nested-style-and-modules"></a>
18
+ Prefer to use nested style of children definitions at classes and modules.
19
+ <sup>[[link](#nested-style-and-modules)]</sup>
20
+
21
+ ```ruby
22
+ # bad
23
+ class Api::V1::UsersController
24
+ end
25
+
26
+ # good
27
+ module Api
28
+ module V1
29
+ class UsersController
30
+ end
31
+ end
32
+ end
33
+ ```
8
34
 
9
35
  [1]: https://github.com/rubocop-hq/rails-style-guide
@@ -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.
@@ -4,6 +4,7 @@ require "datarockets/style/formatter/todo_list_formatter"
4
4
  require "datarockets/style/version"
5
5
 
6
6
  require "datarockets/style/cop/layout/array_alignment_extended"
7
+ require "datarockets/style/cop/style/nested_interpolation"
7
8
 
8
9
  module Datarockets
9
10
  # Datarickors sharable config
@@ -37,8 +37,7 @@ module Datarockets
37
37
  class ArrayAlignmentExtended < RuboCop::Cop::Cop
38
38
  include RuboCop::Cop::Alignment
39
39
 
40
- ALIGN_PARAMS_MSG = "Align the elements of an array literal if they span more " \
41
- "than one line."
40
+ ALIGN_PARAMS_MSG = "Align the elements of an array literal if they span more than one line."
42
41
 
43
42
  FIXED_INDENT_MSG = "Use one level of indentation for elements " \
44
43
  "following the first line of a multi-line array."
@@ -64,14 +63,14 @@ module Datarockets
64
63
  end
65
64
 
66
65
  def base_column(node, args)
67
- if fixed_indentation?
68
- lineno = target_method_lineno(node)
69
- line = node.source_range.source_buffer.source_line(lineno)
70
- indentation_of_line = /\S.*/.match(line).begin(0)
71
- indentation_of_line + configured_indentation_width
72
- else
73
- display_column(args.first.source_range)
74
- end
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
75
74
  end
76
75
 
77
76
  def target_method_lineno(node)
@@ -0,0 +1,37 @@
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
@@ -42,7 +42,8 @@ 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
  Datarockets::Style::Formatter::TodoListFormatter::ReportSummary.new(offense_list).call(output)
@@ -13,9 +13,9 @@ module Datarockets
13
13
  class ReportSummary
14
14
  attr_reader :offense_list
15
15
 
16
- FileGroup = Struct.new(:file, :count) do
16
+ FileGroup = Struct.new(:file, :offenses_count) do
17
17
  def print(output)
18
- output.puts " - '#{file}' # #{count}"
18
+ output.puts " - '#{file}' # #{offenses_count}"
19
19
  end
20
20
  end
21
21
 
@@ -27,7 +27,7 @@ module Datarockets
27
27
  end
28
28
 
29
29
  def print(output)
30
- output.puts(cop_name + ":")
30
+ output.puts("#{cop_name}:")
31
31
  output.puts(" Exclude:")
32
32
  file_groups.sort_by(&:file).each do |file_group|
33
33
  file_group.print(output)
@@ -1,5 +1,5 @@
1
1
  module Datarockets
2
2
  module Style
3
- VERSION = "0.7.0".freeze
3
+ VERSION = "0.11.0".freeze
4
4
  end
5
5
  end
@@ -0,0 +1,74 @@
1
+ # Layout
2
+
3
+ ## Layout/ArrayAlignmentExtended
4
+
5
+ Enabled by default | Safe | Supports autocorrection | VersionAdded | VersionChanged
6
+ --- | --- | --- | --- | ---
7
+ Enabled | Yes | Yes | 0.7.0 | -
8
+
9
+ Here we check if the elements of a multi-line array literal are
10
+ aligned.
11
+
12
+ ### Examples
13
+
14
+ #### EnforcedStyle: with_fixed_indentation (default)
15
+
16
+ ```ruby
17
+ # good
18
+
19
+ array = [1, 2, 3,
20
+ 4, 5, 6]
21
+
22
+ # bad
23
+
24
+ array = [1, 2, 3,
25
+ 4, 5, 6]
26
+ ```
27
+
28
+ #### EnforcedStyle: with_first_argument
29
+
30
+ ```ruby
31
+ # good
32
+
33
+ array = [1, 2, 3,
34
+ 4, 5, 6]
35
+ array = ['run',
36
+ 'forrest',
37
+ 'run']
38
+
39
+ # bad
40
+
41
+ array = [1, 2, 3,
42
+ 4, 5, 6]
43
+ array = ['run',
44
+ 'forrest',
45
+ 'run']
46
+ ```
47
+
48
+ ### Configurable attributes
49
+
50
+ Name | Default value | Configurable values
51
+ --- | --- | ---
52
+ EnforcedStyle | `with_first_parameter` | `with_first_parameter`, `with_fixed_indentation`
53
+ IndentationWidth | `<none>` | Integer
54
+
55
+ # Style
56
+
57
+ ## Style/NestedInterpolation
58
+
59
+ Enabled by default | Safe | Supports autocorrection | VersionAdded | VersionChanged
60
+ --- | --- | --- | --- | ---
61
+ Enabled | Yes | No | 0.8.0 | -
62
+
63
+ This cop checks nested interpolations
64
+
65
+ ### Example
66
+
67
+ ```ruby
68
+ # bad
69
+ "Hello, #{user.blank? ? 'guest' : "dear #{user.name}"}"
70
+
71
+ # good
72
+ user_name = user.blank? ? 'guest' : "dear #{user.name}"
73
+ "Hello, #{user_name}"
74
+ ```
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: datarockets-style
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.11.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: 2020-01-27 00:00:00.000000000 Z
11
+ date: 2020-11-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubocop
@@ -16,28 +16,48 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.76'
19
+ version: '0.93'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0.76'
26
+ version: '0.93'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rubocop-rails
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 2.6.0
34
+ - - "<"
35
+ - !ruby/object:Gem::Version
36
+ version: 2.8.0
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: 2.6.0
44
+ - - "<"
45
+ - !ruby/object:Gem::Version
46
+ version: 2.8.0
27
47
  - !ruby/object:Gem::Dependency
28
48
  name: rubocop-rspec
29
49
  requirement: !ruby/object:Gem::Requirement
30
50
  requirements:
31
51
  - - "~>"
32
52
  - !ruby/object:Gem::Version
33
- version: '1.36'
53
+ version: '1.42'
34
54
  type: :runtime
35
55
  prerelease: false
36
56
  version_requirements: !ruby/object:Gem::Requirement
37
57
  requirements:
38
58
  - - "~>"
39
59
  - !ruby/object:Gem::Version
40
- version: '1.36'
60
+ version: '1.42'
41
61
  description:
42
62
  email:
43
63
  - r.dubrovsky@datarockets.com
@@ -74,9 +94,11 @@ files:
74
94
  - doc/STYLE_GUIDE_RSPEC.md
75
95
  - lib/datarockets/style.rb
76
96
  - lib/datarockets/style/cop/layout/array_alignment_extended.rb
97
+ - lib/datarockets/style/cop/style/nested_interpolation.rb
77
98
  - lib/datarockets/style/formatter/todo_list_formatter.rb
78
99
  - lib/datarockets/style/formatter/todo_list_formatter/report_summary.rb
79
100
  - lib/datarockets/style/version.rb
101
+ - manual/cops_layout.md
80
102
  homepage: https://github.com/datarockets/datarockets-style
81
103
  licenses:
82
104
  - MIT
@@ -90,15 +112,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
90
112
  requirements:
91
113
  - - ">="
92
114
  - !ruby/object:Gem::Version
93
- version: 2.3.0
115
+ version: 2.4.0
94
116
  required_rubygems_version: !ruby/object:Gem::Requirement
95
117
  requirements:
96
118
  - - ">="
97
119
  - !ruby/object:Gem::Version
98
120
  version: '0'
99
121
  requirements: []
100
- rubyforge_project:
101
- rubygems_version: 2.6.14
122
+ rubygems_version: 3.1.2
102
123
  signing_key:
103
124
  specification_version: 4
104
125
  summary: Datarockets style guides and shared style configs