gitlab-styles 9.1.0 → 10.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/.gitlab-ci.yml +14 -2
  3. data/.rubocop.yml +2 -1
  4. data/.rubocop_todo.yml +12 -0
  5. data/.tests_mapping.yml +10 -0
  6. data/Gemfile +9 -4
  7. data/README.md +9 -8
  8. data/gitlab-styles.gemspec +7 -7
  9. data/lefthook.yml +11 -3
  10. data/lib/gitlab/styles/version.rb +1 -1
  11. data/lib/rubocop/cop/active_record_dependent.rb +0 -5
  12. data/lib/rubocop/cop/active_record_serialize.rb +0 -6
  13. data/lib/rubocop/cop/avoid_return_from_blocks.rb +4 -4
  14. data/lib/rubocop/cop/gem_fetcher.rb +18 -20
  15. data/lib/rubocop/cop/gitlab_security/deep_munge.rb +36 -0
  16. data/lib/rubocop/cop/gitlab_security/json_serialization.rb +133 -0
  17. data/lib/rubocop/cop/gitlab_security/public_send.rb +47 -0
  18. data/lib/rubocop/cop/gitlab_security/redirect_to_params_update.rb +38 -0
  19. data/lib/rubocop/cop/gitlab_security/send_file_params.rb +40 -0
  20. data/lib/rubocop/cop/gitlab_security/sql_injection.rb +41 -0
  21. data/lib/rubocop/cop/gitlab_security/system_command_injection.rb +38 -0
  22. data/lib/rubocop/cop/in_batches.rb +0 -2
  23. data/lib/rubocop/cop/line_break_after_guard_clauses.rb +3 -5
  24. data/lib/rubocop/cop/line_break_around_conditional_block.rb +5 -0
  25. data/lib/rubocop/cop/migration/update_large_table.rb +1 -0
  26. data/lib/rubocop/cop/polymorphic_associations.rb +0 -5
  27. data/lib/rubocop/cop/rails/include_url_helper.rb +0 -2
  28. data/lib/rubocop/cop/redirect_with_status.rb +44 -30
  29. data/lib/rubocop/cop/rspec/empty_line_after_shared_example.rb +1 -1
  30. data/rubocop-bundler.yml +10 -0
  31. data/rubocop-capybara.yml +8 -0
  32. data/rubocop-default.yml +1 -1
  33. data/rubocop-layout.yml +48 -4
  34. data/rubocop-lint.yml +131 -3
  35. data/rubocop-naming.yml +5 -0
  36. data/rubocop-performance.yml +32 -0
  37. data/rubocop-rails.yml +25 -0
  38. data/rubocop-rspec.yml +1 -5
  39. data/rubocop-security.yml +19 -1
  40. data/rubocop-style.yml +18 -3
  41. metadata +38 -29
  42. data/lib/gitlab/styles/rubocop/model_helpers.rb +0 -19
@@ -28,6 +28,11 @@ Performance/Casecmp:
28
28
  Performance/CollectionLiteralInLoop: # (new in 1.8)
29
29
  Enabled: true
30
30
 
31
+ # Identifies places where Concurrent.monotonic_time can be replaced by
32
+ # Process.clock_gettime(Process::CLOCK_MONOTONIC).
33
+ Performance/ConcurrentMonotonicTime:
34
+ Enabled: true
35
+
31
36
  Performance/ConstantRegexp: # (new in 1.9)
32
37
  Enabled: true
33
38
 
@@ -36,6 +41,17 @@ Performance/ConstantRegexp: # (new in 1.9)
36
41
  Performance/DoubleStartEndWith:
37
42
  Enabled: true
38
43
 
44
+ # Identifies usages of map { ... }.flatten and change them to use
45
+ # flat_map { ... } instead.
46
+ Performance/FlatMap:
47
+ Enabled: true
48
+ EnabledForFlattenWithoutParams: true
49
+
50
+ # This cop identifies places where map { …​ }.compact can be replaced by
51
+ # filter_map.
52
+ Performance/MapCompact:
53
+ Enabled: true
54
+
39
55
  Performance/MethodObjectAsBlock: # (new in 1.9)
40
56
  Enabled: true
41
57
 
@@ -52,6 +68,11 @@ Performance/RangeInclude:
52
68
  Performance/RedundantBlockCall:
53
69
  Enabled: true
54
70
 
71
+ # Checks for uses Enumerable#all?, Enumerable#any?, Enumerable#one?, and
72
+ # Enumerable#none? are compared with === or similar methods in block.
73
+ Performance/RedundantEqualityComparisonBlock:
74
+ Enabled: true
75
+
55
76
  # This cop identifies use of `Regexp#match` or `String#match in a context
56
77
  # where the integral return value of `=~` would do just as well.
57
78
  Performance/RedundantMatch:
@@ -73,6 +94,11 @@ Performance/RedundantSortBlock:
73
94
  Performance/RedundantStringChars:
74
95
  Enabled: true
75
96
 
97
+ # Identifies places where split argument can be replaced from a deterministic
98
+ # regexp to a string.
99
+ Performance/RedundantSplitRegexpArgument:
100
+ Enabled: true
101
+
76
102
  # Identifies places where reverse.first(n) and reverse.first can be replaced by last(n).reverse and last.
77
103
  # https://docs.rubocop.org/rubocop-performance/1.8/cops_performance.html#performancereversefirst
78
104
  Performance/ReverseFirst:
@@ -98,6 +124,12 @@ Performance/StartWith:
98
124
  Performance/StringInclude:
99
125
  Enabled: true
100
126
 
127
+ # Identifies places where string identifier argument can be replaced by symbol
128
+ # identifier argument. It prevents the redundancy of the internal
129
+ # string-to-symbol conversion.
130
+ Performance/StringIdentifierArgument:
131
+ Enabled: true
132
+
101
133
  # Use `tr` instead of `gsub` when you are replacing the same number of
102
134
  # characters. Use `delete` instead of `gsub` when you are deleting
103
135
  # characters.
data/rubocop-rails.yml CHANGED
@@ -3,6 +3,31 @@ require:
3
3
  - rubocop-rails
4
4
  - ./lib/gitlab/styles/rubocop
5
5
 
6
+ # Cop that prevents the use of `dependent: ...` in ActiveRecord models.
7
+ Cop/ActiveRecordDependent:
8
+ Enabled: true
9
+ Include:
10
+ - app/models/**/*.rb
11
+
12
+ # Cop that prevents the use of `serialize` in ActiveRecord models.
13
+ Cop/ActiveRecordSerialize:
14
+ Enabled: true
15
+ Include:
16
+ - app/models/**/*.rb
17
+
18
+ # Cop that prevents the use of polymorphic associations.
19
+ Cop/PolymorphicAssociations:
20
+ Enabled: true
21
+ Include:
22
+ - app/models/**/*.rb
23
+
24
+ # Prevents usage of 'redirect_to' in actions 'destroy' and 'destroy_all'
25
+ # without specifying 'status'.
26
+ Cop/RedirectWithStatus:
27
+ Enabled: true
28
+ Include:
29
+ - app/controllers/**/*.rb
30
+
6
31
  # Enables Rails cops.
7
32
  Rails:
8
33
  Enabled: true
data/rubocop-rspec.yml CHANGED
@@ -14,11 +14,6 @@ RSpec/BeEql:
14
14
  RSpec/BeforeAfterAll:
15
15
  Enabled: false
16
16
 
17
- # Checks if there is a more specific finder offered by Capybara.
18
- # https://gitlab.com/gitlab-org/ruby/gems/gitlab-styles/-/merge_requests/131#note_1141024624
19
- RSpec/Capybara/SpecificFinders:
20
- Enabled: false
21
-
22
17
  # Enforces consistent use of be_a or be_kind_of.
23
18
  # https://gitlab.com/gitlab-org/ruby/gems/gitlab-styles/-/merge_requests/131#note_1141022718
24
19
  RSpec/ClassCheck:
@@ -40,6 +35,7 @@ RSpec/DescribeSymbol:
40
35
  # Checks that tests use `described_class`.
41
36
  RSpec/DescribedClass:
42
37
  Enabled: true
38
+ SkipBlocks: true
43
39
 
44
40
  # Checks if an example group does not include any tests.
45
41
  RSpec/EmptyExampleGroup:
data/rubocop-security.yml CHANGED
@@ -1,6 +1,11 @@
1
1
  ---
2
2
  require:
3
- - rubocop-gitlab-security
3
+ - ./lib/gitlab/styles/rubocop
4
+
5
+ # Checks for implementations of the hash method which combine values using
6
+ # custom logic instead of delegating to Array#hash.
7
+ Security/CompoundHash:
8
+ Enabled: true
4
9
 
5
10
  # This cop checks for the use of JSON class methods which have potential
6
11
  # security issues.
@@ -16,17 +21,23 @@ Security/IoMethods:
16
21
  Enabled: true
17
22
 
18
23
  GitlabSecurity/DeepMunge:
24
+ Description: Checks for disabling the deep munge security control.
19
25
  Enabled: true
26
+ StyleGuide: https://www.rubydoc.info/gems/gitlab-styles/RuboCop/Cop/GitlabSecurity/DeepMunge
20
27
  Exclude:
21
28
  - 'lib/**/*.rake'
22
29
  - 'spec/**/*'
23
30
 
24
31
  # To be enabled by https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/13610
25
32
  GitlabSecurity/JsonSerialization:
33
+ Description: Checks for `to_json` / `as_json` without allowing via `only`.
26
34
  Enabled: false
35
+ StyleGuide: https://www.rubydoc.info/gems/gitlab-styles/RuboCop/Cop/GitlabSecurity/JsonSerialization
27
36
 
28
37
  GitlabSecurity/PublicSend:
38
+ Description: Checks for the use of `public_send`, `send`, and `__send__` methods.
29
39
  Enabled: true
40
+ StyleGuide: https://www.rubydoc.info/gems/gitlab-styles/RuboCop/Cop/GitlabSecurity/PublicSend
30
41
  Exclude:
31
42
  - 'config/**/*'
32
43
  - 'db/**/*'
@@ -35,19 +46,26 @@ GitlabSecurity/PublicSend:
35
46
  - 'qa/**/*'
36
47
  - 'spec/**/*'
37
48
 
49
+ GitlabSecurity/SendFileParams:
50
+ Description: Check for passing of params hash to send_file()
51
+ Enabled: true
52
+
38
53
  GitlabSecurity/RedirectToParamsUpdate:
54
+ Description: Check for use of redirect_to(params.update())
39
55
  Enabled: true
40
56
  Exclude:
41
57
  - 'lib/**/*.rake'
42
58
  - 'spec/**/*'
43
59
 
44
60
  GitlabSecurity/SqlInjection:
61
+ Description: Check for SQL Injection in where()
45
62
  Enabled: true
46
63
  Exclude:
47
64
  - 'lib/**/*.rake'
48
65
  - 'spec/**/*'
49
66
 
50
67
  GitlabSecurity/SystemCommandInjection:
68
+ Description: Check for Command Injection in System()
51
69
  Enabled: true
52
70
  Exclude:
53
71
  - 'lib/**/*.rake'
data/rubocop-style.yml CHANGED
@@ -18,10 +18,14 @@ Style/AndOr:
18
18
  Enabled: true
19
19
  EnforcedStyle: always
20
20
 
21
- # Enforces the use of Array() instead of explicit Array check or [*var]
22
- # https://docs.rubocop.org/rubocop/0.89/cops_style.html#stylearraycoercion
21
+ # This cop enforces the use of Array() instead of explicit Array check or [*var]
22
+ # It must remain disabled because of safety concern on Array().
23
+ # A false positive may occur depending on how the argument is handled by Array()
24
+ # (which can be different than just wrapping the argument in an array)
25
+ # As of Rubocop 1.0, this cop has been disabled by default.
26
+ # https://docs.rubocop.org/rubocop/1.44/cops_style.html#safety-3
23
27
  Style/ArrayCoercion:
24
- Enabled: true
28
+ Enabled: false
25
29
 
26
30
  # Use `Array#join` instead of `Array#*`.
27
31
  Style/ArrayJoin:
@@ -289,6 +293,17 @@ Style/NonNilCheck:
289
293
  Style/Not:
290
294
  Enabled: true
291
295
 
296
+ # Checks for numbered parameters. It can either restrict the use of numbered
297
+ # parameters to single-lined blocks, or disallow completely numbered
298
+ # parameters.
299
+ Style/NumberedParameters:
300
+ EnforcedStyle: disallow
301
+ Enabled: true
302
+
303
+ # Detects use of an excessive amount of numbered parameters in a single block.
304
+ Style/NumberedParametersLimit:
305
+ Enabled: false
306
+
292
307
  # Add underscores to large numeric literals to improve their readability.
293
308
  Style/NumericLiterals:
294
309
  Enabled: false
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitlab-styles
3
3
  version: !ruby/object:Gem::Version
4
- version: 9.1.0
4
+ version: 10.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - GitLab
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-11-15 00:00:00.000000000 Z
11
+ date: 2023-02-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubocop
@@ -16,84 +16,70 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 1.38.0
19
+ version: 1.43.0
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: 1.38.0
27
- - !ruby/object:Gem::Dependency
28
- name: rubocop-gitlab-security
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: 0.1.1
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: 0.1.1
26
+ version: 1.43.0
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: rubocop-graphql
43
29
  requirement: !ruby/object:Gem::Requirement
44
30
  requirements:
45
31
  - - "~>"
46
32
  - !ruby/object:Gem::Version
47
- version: '0.14'
33
+ version: '0.18'
48
34
  type: :runtime
49
35
  prerelease: false
50
36
  version_requirements: !ruby/object:Gem::Requirement
51
37
  requirements:
52
38
  - - "~>"
53
39
  - !ruby/object:Gem::Version
54
- version: '0.14'
40
+ version: '0.18'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: rubocop-performance
57
43
  requirement: !ruby/object:Gem::Requirement
58
44
  requirements:
59
45
  - - "~>"
60
46
  - !ruby/object:Gem::Version
61
- version: '1.14'
47
+ version: '1.15'
62
48
  type: :runtime
63
49
  prerelease: false
64
50
  version_requirements: !ruby/object:Gem::Requirement
65
51
  requirements:
66
52
  - - "~>"
67
53
  - !ruby/object:Gem::Version
68
- version: '1.14'
54
+ version: '1.15'
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: rubocop-rails
71
57
  requirement: !ruby/object:Gem::Requirement
72
58
  requirements:
73
59
  - - "~>"
74
60
  - !ruby/object:Gem::Version
75
- version: '2.15'
61
+ version: '2.17'
76
62
  type: :runtime
77
63
  prerelease: false
78
64
  version_requirements: !ruby/object:Gem::Requirement
79
65
  requirements:
80
66
  - - "~>"
81
67
  - !ruby/object:Gem::Version
82
- version: '2.15'
68
+ version: '2.17'
83
69
  - !ruby/object:Gem::Dependency
84
70
  name: rubocop-rspec
85
71
  requirement: !ruby/object:Gem::Requirement
86
72
  requirements:
87
73
  - - "~>"
88
74
  - !ruby/object:Gem::Version
89
- version: '2.15'
75
+ version: '2.18'
90
76
  type: :runtime
91
77
  prerelease: false
92
78
  version_requirements: !ruby/object:Gem::Requirement
93
79
  requirements:
94
80
  - - "~>"
95
81
  - !ruby/object:Gem::Version
96
- version: '2.15'
82
+ version: '2.18'
97
83
  - !ruby/object:Gem::Dependency
98
84
  name: bundler
99
85
  requirement: !ruby/object:Gem::Requirement
@@ -128,14 +114,14 @@ dependencies:
128
114
  requirements:
129
115
  - - "~>"
130
116
  - !ruby/object:Gem::Version
131
- version: '10.0'
117
+ version: '13.0'
132
118
  type: :development
133
119
  prerelease: false
134
120
  version_requirements: !ruby/object:Gem::Requirement
135
121
  requirements:
136
122
  - - "~>"
137
123
  - !ruby/object:Gem::Version
138
- version: '10.0'
124
+ version: '13.0'
139
125
  - !ruby/object:Gem::Dependency
140
126
  name: rspec
141
127
  requirement: !ruby/object:Gem::Requirement
@@ -150,6 +136,20 @@ dependencies:
150
136
  - - "~>"
151
137
  - !ruby/object:Gem::Version
152
138
  version: '3.0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rubocop-rake
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '0.6'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '0.6'
153
153
  description:
154
154
  email:
155
155
  - gitlab_rubygems@gitlab.com
@@ -165,6 +165,8 @@ files:
165
165
  - ".gitlab/merge_request_templates/Release.md"
166
166
  - ".rspec"
167
167
  - ".rubocop.yml"
168
+ - ".rubocop_todo.yml"
169
+ - ".tests_mapping.yml"
168
170
  - CODE_OF_CONDUCT.md
169
171
  - CONTRIBUTING.md
170
172
  - Dangerfile
@@ -180,7 +182,6 @@ files:
180
182
  - lib/gitlab/styles/common/banned_constants.rb
181
183
  - lib/gitlab/styles/rubocop.rb
182
184
  - lib/gitlab/styles/rubocop/migration_helpers.rb
183
- - lib/gitlab/styles/rubocop/model_helpers.rb
184
185
  - lib/gitlab/styles/version.rb
185
186
  - lib/rubocop/cop/active_record_dependent.rb
186
187
  - lib/rubocop/cop/active_record_serialize.rb
@@ -191,6 +192,13 @@ files:
191
192
  - lib/rubocop/cop/fips/open_ssl.rb
192
193
  - lib/rubocop/cop/fips/sha1.rb
193
194
  - lib/rubocop/cop/gem_fetcher.rb
195
+ - lib/rubocop/cop/gitlab_security/deep_munge.rb
196
+ - lib/rubocop/cop/gitlab_security/json_serialization.rb
197
+ - lib/rubocop/cop/gitlab_security/public_send.rb
198
+ - lib/rubocop/cop/gitlab_security/redirect_to_params_update.rb
199
+ - lib/rubocop/cop/gitlab_security/send_file_params.rb
200
+ - lib/rubocop/cop/gitlab_security/sql_injection.rb
201
+ - lib/rubocop/cop/gitlab_security/system_command_injection.rb
194
202
  - lib/rubocop/cop/in_batches.rb
195
203
  - lib/rubocop/cop/internal_affairs/deprecate_cop_helper.rb
196
204
  - lib/rubocop/cop/line_break_after_guard_clauses.rb
@@ -212,6 +220,7 @@ files:
212
220
  - lib/rubocop/cop/without_reactive_cache.rb
213
221
  - rubocop-all.yml
214
222
  - rubocop-bundler.yml
223
+ - rubocop-capybara.yml
215
224
  - rubocop-code_reuse.yml
216
225
  - rubocop-default.yml
217
226
  - rubocop-fips.yml
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Gitlab
4
- module Styles
5
- module Rubocop
6
- module Gitlab::Styles::Rubocop::ModelHelpers
7
- # Returns true if the given node originated from the models directory.
8
- def in_model?(node)
9
- path = node.location.expression.source_buffer.name
10
- pwd = Dir.pwd
11
- models_path = File.join(pwd, 'app', 'models')
12
- ee_models_path = File.join(pwd, 'ee', 'app', 'models')
13
-
14
- path.start_with?(models_path, ee_models_path)
15
- end
16
- end
17
- end
18
- end
19
- end