gitlab-styles 10.1.0 → 12.0.1

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 (36) hide show
  1. checksums.yaml +4 -4
  2. data/.gitlab-ci.yml +41 -24
  3. data/.rubocop_todo.yml +1 -10
  4. data/Gemfile.lock +46 -40
  5. data/README.md +2 -1
  6. data/gitlab-styles.gemspec +8 -7
  7. data/lib/gitlab/styles/rubocop.rb +1 -1
  8. data/lib/gitlab/styles/version.rb +1 -1
  9. data/lib/rubocop/cop/active_record_dependent.rb +10 -12
  10. data/lib/rubocop/cop/active_record_serialize.rb +5 -1
  11. data/lib/rubocop/cop/code_reuse/active_record.rb +1 -1
  12. data/lib/rubocop/cop/gem_fetcher.rb +1 -1
  13. data/lib/rubocop/cop/gitlab_security/redirect_to_params_update.rb +1 -1
  14. data/lib/rubocop/cop/gitlab_security/send_file_params.rb +1 -1
  15. data/lib/rubocop/cop/gitlab_security/system_command_injection.rb +1 -1
  16. data/lib/rubocop/cop/in_batches.rb +2 -2
  17. data/lib/rubocop/cop/internal_affairs/use_restrict_on_send.rb +1 -1
  18. data/lib/rubocop/cop/layout/line_break_after_final_mixin.rb +75 -0
  19. data/lib/rubocop/cop/migration/update_large_table.rb +2 -2
  20. data/lib/rubocop/cop/performance/rubyzip.rb +4 -4
  21. data/lib/rubocop/cop/polymorphic_associations.rb +8 -5
  22. data/lib/rubocop/cop/rspec/specify_expected.rb +49 -0
  23. data/lib/rubocop/cop/style/open_struct_use.rb +2 -2
  24. data/lib/rubocop/cop/without_reactive_cache.rb +2 -2
  25. data/rubocop-all.yml +2 -1
  26. data/rubocop-default.yml +1 -15
  27. data/rubocop-factory_bot.yml +8 -0
  28. data/rubocop-gemspec.yml +15 -4
  29. data/rubocop-graphql.yml +27 -1
  30. data/rubocop-layout.yml +16 -4
  31. data/rubocop-minimal.yml +17 -0
  32. data/rubocop-rails.yml +5 -0
  33. data/rubocop-rspec.yml +14 -6
  34. data/rubocop-style.yml +14 -6
  35. metadata +38 -21
  36. data/lib/rubocop/cop/rspec/factory_bot/excessive_create_list.rb +0 -52
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0cd204f5572b14a03cd4f6faec35d9973f07dcab0579cf17ebb5fc10d56ac6b0
4
- data.tar.gz: 7a126190155bc1b39eea832c88e4636306f0fafb09f4b6c2c12c9fb275032a8c
3
+ metadata.gz: 5301968fa7603c90e9ed917011c49e4a3124a7c442963e778fcc1f4862c7cf03
4
+ data.tar.gz: 4b7676b2fcdb2bed6f3be9c8b0505ba04afa5ec008e95b6c980da5ef3a795032
5
5
  SHA512:
6
- metadata.gz: ef80fd1223c28800de324bb2e71bc1c4e381137ddf7e4a4605e7d1e6e301cca3fc5cee69146a80fe23213a77c8c459d7037e305372242702d4cc8c9bb2b08c0b
7
- data.tar.gz: 4f60365ef4232d584eb8ec18f99f8ac5537bd4bf933777d5125c4fb2f71423e7c487dd61f18e9e4e40738c4d02949d9291d7fda7a66fa88442bcdeb8854621c0
6
+ metadata.gz: bcb7c63e4e3cacd1638d87b2406483d763ecad6dbdb218a3da292f8be56112ca64d0d1596ac108143981d502834f6672e4c9128981edc8b6bd05566c924289f7
7
+ data.tar.gz: e08bb7c660e85a30ffc64d669363e6b420219745231a5ea7e5524e657ae72c4f6b1fcb00c9d01d31c9bb846c5d8be57db22d8640dff67ae554f76db2092375ae
data/.gitlab-ci.yml CHANGED
@@ -1,44 +1,43 @@
1
+ workflow:
2
+ rules:
3
+ # For merge requests, create a pipeline.
4
+ - if: '$CI_MERGE_REQUEST_IID'
5
+ # For the default branch, create a pipeline (this includes on schedules, pushes, merges, etc.).
6
+ - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
7
+ # For tags, create a pipeline.
8
+ - if: '$CI_COMMIT_TAG'
9
+
1
10
  stages:
2
11
  - test
3
12
  - deploy
4
13
 
5
14
  default:
6
- image: "ruby:${RUBY_VERSION}"
7
15
  tags:
8
16
  - gitlab-org
17
+
18
+ .base-ruby-job:
19
+ image: "ruby:${RUBY_VERSION}"
9
20
  before_script:
10
21
  - bundle --version
11
- - bundle install
12
-
13
- variables:
14
- BUNDLE_FROZEN: 'true'
15
-
16
- workflow:
17
- rules:
18
- # For merge requests, create a pipeline.
19
- - if: '$CI_MERGE_REQUEST_IID'
20
- # For the default branch, create a pipeline (this includes on schedules, pushes, merges, etc.).
21
- - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
22
- # For tags, create a pipeline.
23
- - if: '$CI_COMMIT_TAG'
22
+ - bundle config set --local deployment 'true'
23
+ - bundle install -j $(nproc)
24
+ parallel:
25
+ matrix:
26
+ - RUBY_VERSION: ['3.0', '3.1', '3.2']
24
27
 
25
28
  styles:
29
+ extends: .base-ruby-job
26
30
  stage: test
27
31
  script:
28
32
  - bundle exec rubocop --debug --parallel
29
- parallel:
30
- matrix:
31
- - RUBY_VERSION: ['2.7', '3.0', '3.1', '3.2']
32
33
 
33
34
  specs:
35
+ extends: .base-ruby-job
34
36
  stage: test
35
37
  script:
36
38
  # Disable simplecov for all Ruby version other than 3.0
37
39
  - if [[ "$RUBY_VERSION" != "3.0" ]]; then export SIMPLECOV=0; fi
38
40
  - bundle exec rspec
39
- parallel:
40
- matrix:
41
- - RUBY_VERSION: ['2.7', '3.0', '3.1', '3.2']
42
41
  artifacts:
43
42
  name: coverage
44
43
  expire_in: 31d
@@ -51,7 +50,25 @@ specs:
51
50
  path: coverage/coverage.xml
52
51
 
53
52
  include:
54
- - project: 'gitlab-org/quality/pipeline-common'
55
- file:
56
- - '/ci/gem-release.yml'
57
- - '/ci/danger-review.yml'
53
+ - component: gitlab.com/components/sast/sast@~latest
54
+ - component: gitlab.com/components/secret-detection/secret-detection@~latest
55
+ - component: gitlab.com/gitlab-org/components/gem-release/gem-release@~latest
56
+ inputs:
57
+ smoke_test_script: "ruby -r 'gitlab/styles' -e \"puts Gitlab::Styles::VERSION\""
58
+ - template: Security/Dependency-Scanning.gitlab-ci.yml
59
+ - component: gitlab.com/gitlab-org/components/danger-review/danger-review@~latest
60
+
61
+ semgrep-sast:
62
+ rules:
63
+ - if: '$CI_MERGE_REQUEST_IID'
64
+ - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
65
+
66
+ gemnasium-dependency_scanning:
67
+ rules:
68
+ - if: '$CI_MERGE_REQUEST_IID'
69
+ - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
70
+
71
+ secret_detection:
72
+ rules:
73
+ - if: '$CI_MERGE_REQUEST_IID'
74
+ - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
data/.rubocop_todo.yml CHANGED
@@ -1,6 +1,6 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config`
3
- # on 2023-06-05 10:15:47 UTC using RuboCop version 1.50.2.
3
+ # on 2024-01-24 13:27:15 UTC using RuboCop version 1.57.2.
4
4
  # The point is for the user to remove these configuration records
5
5
  # one by one as the offenses are removed from the code base.
6
6
  # Note that changes in the inspected code, or installation of new
@@ -25,12 +25,3 @@ InternalAffairs/MissingCopDepartment:
25
25
  - 'lib/rubocop/cop/polymorphic_associations.rb'
26
26
  - 'lib/rubocop/cop/redirect_with_status.rb'
27
27
  - 'lib/rubocop/cop/without_reactive_cache.rb'
28
-
29
- # Offense count: 5
30
- InternalAffairs/UseRestrictOnSend:
31
- Exclude:
32
- - 'lib/rubocop/cop/active_record_dependent.rb'
33
- - 'lib/rubocop/cop/active_record_serialize.rb'
34
- - 'lib/rubocop/cop/in_batches.rb'
35
- - 'lib/rubocop/cop/polymorphic_associations.rb'
36
- - 'lib/rubocop/cop/without_reactive_cache.rb'
data/Gemfile.lock CHANGED
@@ -1,12 +1,13 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- gitlab-styles (10.1.0)
5
- rubocop (~> 1.50.2)
6
- rubocop-graphql (~> 0.18)
7
- rubocop-performance (~> 1.15)
8
- rubocop-rails (~> 2.17)
9
- rubocop-rspec (~> 2.22)
4
+ gitlab-styles (12.0.1)
5
+ rubocop (~> 1.62.1)
6
+ rubocop-factory_bot (~> 2.25.1)
7
+ rubocop-graphql (~> 1.5.0)
8
+ rubocop-performance (~> 1.20.2)
9
+ rubocop-rails (~> 2.24.0)
10
+ rubocop-rspec (~> 2.27.1)
10
11
 
11
12
  GEM
12
13
  remote: https://rubygems.org/
@@ -16,7 +17,7 @@ GEM
16
17
  i18n (>= 1.6, < 2)
17
18
  minitest (>= 5.1)
18
19
  tzinfo (~> 2.0)
19
- addressable (2.8.4)
20
+ addressable (2.8.5)
20
21
  public_suffix (>= 2.0.2, < 6.0)
21
22
  ast (2.4.2)
22
23
  binding_of_caller (1.0.0)
@@ -32,18 +33,18 @@ GEM
32
33
  concurrent-ruby (1.2.2)
33
34
  cork (0.3.0)
34
35
  colored2 (~> 3.1)
35
- danger (9.3.0)
36
+ danger (9.3.2)
36
37
  claide (~> 1.0)
37
38
  claide-plugins (>= 0.9.2)
38
39
  colored2 (~> 3.1)
39
40
  cork (~> 0.1)
40
41
  faraday (>= 0.9.0, < 3.0)
41
42
  faraday-http-cache (~> 2.0)
42
- git (~> 1.13.0)
43
+ git (~> 1.13)
43
44
  kramdown (~> 2.3)
44
45
  kramdown-parser-gfm (~> 1.0)
45
46
  no_proxy_fix
46
- octokit (~> 5.0)
47
+ octokit (~> 6.0)
47
48
  terminal-table (>= 1, < 4)
48
49
  danger-gitlab (8.0.0)
49
50
  danger
@@ -76,41 +77,43 @@ GEM
76
77
  faraday-patron (1.0.0)
77
78
  faraday-rack (1.0.0)
78
79
  faraday-retry (1.0.3)
79
- git (1.13.2)
80
+ git (1.18.0)
80
81
  addressable (~> 2.8)
81
82
  rchardet (~> 1.8)
82
83
  gitlab (4.19.0)
83
84
  httparty (~> 0.20)
84
85
  terminal-table (>= 1.5.1)
85
- gitlab-dangerfiles (3.6.7)
86
- danger (>= 8.4.5)
86
+ gitlab-dangerfiles (4.6.0)
87
+ danger (>= 9.3.0)
87
88
  danger-gitlab (>= 8.0.0)
88
- rake
89
+ rake (~> 13.0)
89
90
  httparty (0.21.0)
90
91
  mini_mime (>= 1.0.0)
91
92
  multi_xml (>= 0.5.2)
92
93
  i18n (1.13.0)
93
94
  concurrent-ruby (~> 1.0)
94
- json (2.6.3)
95
+ json (2.7.1)
95
96
  kramdown (2.4.0)
96
97
  rexml
97
98
  kramdown-parser-gfm (1.1.0)
98
99
  kramdown (~> 2.0)
100
+ language_server-protocol (3.17.0.3)
99
101
  lefthook (1.3.13)
100
102
  method_source (1.0.0)
101
- mini_mime (1.1.2)
103
+ mini_mime (1.1.5)
102
104
  minitest (5.18.0)
103
105
  multi_xml (0.6.0)
104
106
  multipart-post (2.3.0)
105
107
  nap (1.1.0)
106
108
  no_proxy_fix (0.1.2)
107
- octokit (5.6.1)
109
+ octokit (6.1.1)
108
110
  faraday (>= 1, < 3)
109
111
  sawyer (~> 0.9)
110
112
  open4 (1.3.4)
111
- parallel (1.23.0)
112
- parser (3.2.2.1)
113
+ parallel (1.24.0)
114
+ parser (3.3.0.5)
113
115
  ast (~> 2.4.1)
116
+ racc
114
117
  proc_to_ast (0.1.0)
115
118
  coderay
116
119
  parser
@@ -121,13 +124,14 @@ GEM
121
124
  pry-byebug (3.10.1)
122
125
  byebug (~> 11.0)
123
126
  pry (>= 0.13, < 0.15)
124
- public_suffix (5.0.1)
127
+ public_suffix (5.0.3)
128
+ racc (1.7.3)
125
129
  rack (3.0.7)
126
130
  rainbow (3.1.1)
127
131
  rake (13.0.6)
128
132
  rchardet (1.8.0)
129
- regexp_parser (2.8.0)
130
- rexml (3.2.5)
133
+ regexp_parser (2.8.3)
134
+ rexml (3.2.6)
131
135
  rspec (3.12.0)
132
136
  rspec-core (~> 3.12.0)
133
137
  rspec-expectations (~> 3.12.0)
@@ -149,35 +153,37 @@ GEM
149
153
  binding_of_caller
150
154
  rspec-parameterized-core (< 2)
151
155
  rspec-support (3.12.0)
152
- rubocop (1.50.2)
156
+ rubocop (1.62.1)
153
157
  json (~> 2.3)
158
+ language_server-protocol (>= 3.17.0)
154
159
  parallel (~> 1.10)
155
- parser (>= 3.2.0.0)
160
+ parser (>= 3.3.0.2)
156
161
  rainbow (>= 2.2.2, < 4.0)
157
162
  regexp_parser (>= 1.8, < 3.0)
158
163
  rexml (>= 3.2.5, < 4.0)
159
- rubocop-ast (>= 1.28.0, < 2.0)
164
+ rubocop-ast (>= 1.31.1, < 2.0)
160
165
  ruby-progressbar (~> 1.7)
161
166
  unicode-display_width (>= 2.4.0, < 3.0)
162
- rubocop-ast (1.28.1)
163
- parser (>= 3.2.1.0)
164
- rubocop-capybara (2.18.0)
167
+ rubocop-ast (1.31.2)
168
+ parser (>= 3.3.0.4)
169
+ rubocop-capybara (2.20.0)
165
170
  rubocop (~> 1.41)
166
- rubocop-factory_bot (2.23.0)
167
- rubocop (~> 1.33)
168
- rubocop-graphql (0.19.0)
169
- rubocop (>= 0.87, < 2)
170
- rubocop-performance (1.17.1)
171
- rubocop (>= 1.7.0, < 2.0)
172
- rubocop-ast (>= 0.4.0)
173
- rubocop-rails (2.19.1)
171
+ rubocop-factory_bot (2.25.1)
172
+ rubocop (~> 1.41)
173
+ rubocop-graphql (1.5.0)
174
+ rubocop (>= 0.90, < 2)
175
+ rubocop-performance (1.20.2)
176
+ rubocop (>= 1.48.1, < 2.0)
177
+ rubocop-ast (>= 1.30.0, < 2.0)
178
+ rubocop-rails (2.24.0)
174
179
  activesupport (>= 4.2.0)
175
180
  rack (>= 1.1)
176
181
  rubocop (>= 1.33.0, < 2.0)
182
+ rubocop-ast (>= 1.31.1, < 2.0)
177
183
  rubocop-rake (0.6.0)
178
184
  rubocop (~> 1.0)
179
- rubocop-rspec (2.22.0)
180
- rubocop (~> 1.33)
185
+ rubocop-rspec (2.27.1)
186
+ rubocop (~> 1.40)
181
187
  rubocop-capybara (~> 2.17)
182
188
  rubocop-factory_bot (~> 2.22)
183
189
  ruby-progressbar (1.13.0)
@@ -200,7 +206,7 @@ GEM
200
206
  faraday (~> 1.0)
201
207
  tzinfo (2.0.6)
202
208
  concurrent-ruby (~> 1.0)
203
- unicode-display_width (2.4.2)
209
+ unicode-display_width (2.5.0)
204
210
  unparser (0.6.7)
205
211
  diff-lcs (~> 1.3)
206
212
  parser (>= 3.2.0)
@@ -210,7 +216,7 @@ PLATFORMS
210
216
 
211
217
  DEPENDENCIES
212
218
  bundler (~> 2.1)
213
- gitlab-dangerfiles (~> 3.6.7)
219
+ gitlab-dangerfiles (~> 4.6.0)
214
220
  gitlab-styles!
215
221
  lefthook (~> 1.3.13)
216
222
  pry-byebug (~> 3.10)
data/README.md CHANGED
@@ -91,7 +91,8 @@ To release a new version:
91
91
  1. Create a Merge Request.
92
92
  1. Use Merge Request template [Release.md](https://gitlab.com/gitlab-org/ruby/gems/gitlab-styles/-/blob/master/.gitlab/merge_request_templates/Release.md).
93
93
  1. Follow the instructions.
94
- 1. After the Merge Request has been merged, a new gem version is [published automatically](https://gitlab.com/gitlab-org/quality/pipeline-common/-/blob/master/ci/gem-release.yml)
94
+ 1. After the Merge Request has been merged, a new gem version is [published automatically](https://gitlab.com/gitlab-org/components/gem-release).
95
+ 1. Once the new gem version is visible on [RubyGems.org](https://rubygems.org/gems/gitlab-styles), it is recommended to update [GitLab's `Gemfile`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/Gemfile) to bump the `gitlab-styles` Ruby gem to the new version also.
95
96
 
96
97
  See [!123](https://gitlab.com/gitlab-org/ruby/gems/gitlab-styles/-/merge_requests/123) as an example.
97
98
 
@@ -5,7 +5,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
5
  require 'gitlab/styles/version'
6
6
 
7
7
  Gem::Specification.new do |spec|
8
- spec.required_ruby_version = '>= 2.6'
8
+ spec.required_ruby_version = '>= 3.0'
9
9
  spec.name = 'gitlab-styles'
10
10
  spec.version = Gitlab::Styles::VERSION
11
11
  spec.authors = ['GitLab']
@@ -22,14 +22,15 @@ Gem::Specification.new do |spec|
22
22
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
23
  spec.require_paths = ['lib']
24
24
 
25
- spec.add_dependency 'rubocop', '~> 1.50.2'
26
- spec.add_dependency 'rubocop-graphql', '~> 0.18'
27
- spec.add_dependency 'rubocop-performance', '~> 1.15'
28
- spec.add_dependency 'rubocop-rails', '~> 2.17'
29
- spec.add_dependency 'rubocop-rspec', '~> 2.22'
25
+ spec.add_dependency 'rubocop', '~> 1.62.1'
26
+ spec.add_dependency 'rubocop-factory_bot', '~> 2.25.1'
27
+ spec.add_dependency 'rubocop-graphql', '~> 1.5.0'
28
+ spec.add_dependency 'rubocop-performance', '~> 1.20.2'
29
+ spec.add_dependency 'rubocop-rails', '~> 2.24.0'
30
+ spec.add_dependency 'rubocop-rspec', '~> 2.27.1'
30
31
 
31
32
  spec.add_development_dependency 'bundler', '~> 2.1'
32
- spec.add_development_dependency 'gitlab-dangerfiles', '~> 3.6.7'
33
+ spec.add_development_dependency 'gitlab-dangerfiles', '~> 4.6.0'
33
34
  spec.add_development_dependency 'lefthook', '~> 1.3.13'
34
35
  spec.add_development_dependency 'pry-byebug', '~> 3.10'
35
36
  spec.add_development_dependency 'rake', '~> 13.0'
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Auto-require all cops under `rubocop/cop/**/*.rb`
4
4
  cops_glob = File.join(__dir__, '..', '..', 'rubocop', 'cop', '**', '*.rb')
5
- Dir[cops_glob].sort.each { |cop| require(cop) }
5
+ Dir[cops_glob].each { |cop| require(cop) }
6
6
 
7
7
  module Gitlab
8
8
  module Styles
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Gitlab
4
4
  module Styles
5
- VERSION = '10.1.0'
5
+ VERSION = '12.0.1'
6
6
  end
7
7
  end
@@ -5,21 +5,19 @@ module Rubocop
5
5
  # Cop that prevents the use of `dependent: ...` in ActiveRecord models.
6
6
  class ActiveRecordDependent < RuboCop::Cop::Base
7
7
  MSG = 'Do not use `dependent:` to remove associated data, ' \
8
- 'use foreign keys with cascading deletes instead.'
8
+ 'use foreign keys with cascading deletes instead.'
9
9
 
10
- METHOD_NAMES = [:has_many, :has_one, :belongs_to].freeze
11
- ALLOWED_OPTIONS = [:restrict_with_error].freeze
10
+ RESTRICT_ON_SEND = %i[has_many has_one belongs_to].to_set.freeze
11
+ ALLOWED_OPTIONS = %i[restrict_with_error].freeze
12
12
 
13
- def on_send(node)
14
- return unless METHOD_NAMES.include?(node.children[1])
15
-
16
- node.children.last.each_node(:pair) do |pair|
17
- key_name = pair.children[0].children[0]
18
- option_name = pair.children[1].children[0]
13
+ # @!method dependent_use(node)
14
+ def_node_matcher :dependent_use, <<~PATTERN
15
+ (send _ %RESTRICT_ON_SEND ... (hash <$(pair (sym :dependent) (sym $_)) ...>))
16
+ PATTERN
19
17
 
20
- break if ALLOWED_OPTIONS.include?(option_name)
21
-
22
- add_offense(pair) if key_name == :dependent
18
+ def on_send(node)
19
+ dependent_use(node) do |pair, value|
20
+ add_offense(pair) unless ALLOWED_OPTIONS.include?(value)
23
21
  end
24
22
  end
25
23
  end
@@ -6,8 +6,12 @@ module Rubocop
6
6
  class ActiveRecordSerialize < RuboCop::Cop::Base
7
7
  MSG = 'Do not store serialized data in the database, use separate columns and/or tables instead'
8
8
 
9
+ RESTRICT_ON_SEND = %i[serialize].freeze
10
+
9
11
  def on_send(node)
10
- add_offense(node.loc.selector) if node.children[1] == :serialize
12
+ return if node.receiver
13
+
14
+ add_offense(node.loc.selector)
11
15
  end
12
16
  end
13
17
  end
@@ -6,7 +6,7 @@ module Rubocop
6
6
  # Cop that denies the use of ActiveRecord methods outside of models.
7
7
  class ActiveRecord < RuboCop::Cop::Base
8
8
  MSG = 'This method can only be used inside an ActiveRecord model: ' \
9
- 'https://gitlab.com/gitlab-org/gitlab-foss/issues/49653'
9
+ 'https://gitlab.com/gitlab-org/gitlab-foss/issues/49653'
10
10
 
11
11
  # Various methods from ActiveRecord::Querying that are denied. We
12
12
  # exclude some generic ones such as `any?` and `first`, as these may
@@ -7,7 +7,7 @@ module Rubocop
7
7
  # rubygems.org.
8
8
  class GemFetcher < RuboCop::Cop::Base
9
9
  MSG = 'Do not use gems from git repositories, only use gems from RubyGems or vendored gems. ' \
10
- 'See https://docs.gitlab.com/ee/development/gemfile.html#no-gems-fetched-from-git-repositories'
10
+ 'See https://docs.gitlab.com/ee/development/gemfile.html#no-gems-fetched-from-git-repositories'
11
11
 
12
12
  # See https://bundler.io/guides/git.html#custom-git-sources
13
13
  GIT_SOURCES = %i[git github gist bitbucket].freeze
@@ -17,7 +17,7 @@ module RuboCop
17
17
  #
18
18
  class RedirectToParamsUpdate < RuboCop::Cop::Base
19
19
  MSG = 'Avoid using `redirect_to(params.%<name>s(...))`. ' \
20
- 'Only pass allowed arguments into redirect_to() (e.g. not including `host`)'
20
+ 'Only pass allowed arguments into redirect_to() (e.g. not including `host`)'
21
21
 
22
22
  # @!method redirect_to_params_update_node(node)
23
23
  def_node_matcher :redirect_to_params_update_node, <<-PATTERN
@@ -21,7 +21,7 @@ module RuboCop
21
21
  #
22
22
  class SendFileParams < RuboCop::Cop::Base
23
23
  MSG = 'Do not pass user provided params directly to send_file(), ' \
24
- 'verify the path with file.expand_path() first.'
24
+ 'verify the path with file.expand_path() first.'
25
25
 
26
26
  # @!method params_node?(node)
27
27
  def_node_search :params_node?, <<-PATTERN
@@ -19,7 +19,7 @@ module RuboCop
19
19
  #
20
20
  class SystemCommandInjection < RuboCop::Cop::Base
21
21
  MSG = 'Do not include variables in the command name for system(). ' \
22
- 'Use parameters "system(cmd, params)" or exec() instead.'
22
+ 'Use parameters "system(cmd, params)" or exec() instead.'
23
23
 
24
24
  # @!method system_var?(node)
25
25
  def_node_matcher :system_var?, <<-PATTERN
@@ -6,9 +6,9 @@ module Rubocop
6
6
  class InBatches < RuboCop::Cop::Base
7
7
  MSG = 'Do not use `in_batches`, use `each_batch` from the EachBatch module instead'
8
8
 
9
- def on_send(node)
10
- return unless node.children[1] == :in_batches
9
+ RESTRICT_ON_SEND = %i[in_batches].freeze
11
10
 
11
+ def on_send(node)
12
12
  add_offense(node.loc.selector)
13
13
  end
14
14
  end
@@ -43,7 +43,7 @@ module RuboCop
43
43
  # end
44
44
  class UseRestrictOnSend < Base
45
45
  MSG = 'Define constant `RESTRICT_ON_SEND` to speed up calls to `on_send`. ' \
46
- 'The following line is then no longer necessary:'
46
+ 'The following line is then no longer necessary:'
47
47
 
48
48
  # @!method method_name_plain(node)
49
49
  def_node_matcher :method_name_plain, <<~PATTERN
@@ -0,0 +1,75 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Layout
6
+ # Checks if there is an empty line after the last include/extend/prepend.
7
+ #
8
+ # @example
9
+ # # bad
10
+ # class Hello
11
+ # include Something1
12
+ # include Something2
13
+ # def world
14
+ # end
15
+ # end
16
+
17
+ # # good
18
+ # class Hello
19
+ # include Something1
20
+ # include Something2
21
+ #
22
+ # def world
23
+ # end
24
+ # end
25
+ class LineBreakAfterFinalMixin < RuboCop::Cop::Base
26
+ extend RuboCop::Cop::AutoCorrector
27
+
28
+ MSG = 'Add an empty line after the last `%<mixin>s`.'
29
+
30
+ MIXIN_METHODS = %i[include extend prepend].to_set.freeze
31
+
32
+ # @!method mixin?(node)
33
+ def_node_matcher :mixin?, <<~PATTERN
34
+ (send {nil? | self} MIXIN_METHODS ...)
35
+ PATTERN
36
+
37
+ def on_class(node)
38
+ return unless node.body
39
+
40
+ mixins = node.body.child_nodes.select { |child| mixin?(child) }
41
+
42
+ return if mixins.empty?
43
+
44
+ last_mixin = mixins.last
45
+
46
+ return if next_line_valid?(last_mixin)
47
+
48
+ add_offense(last_mixin, message: format(MSG, mixin: last_mixin.method_name)) do |corrector|
49
+ corrector.insert_after(last_mixin, "\n")
50
+ end
51
+ end
52
+
53
+ private
54
+
55
+ def next_line_valid?(node)
56
+ next_line = next_line(node)
57
+
58
+ empty_line?(next_line) || end_line?(next_line)
59
+ end
60
+
61
+ def next_line(node)
62
+ processed_source[node.loc.line]
63
+ end
64
+
65
+ def empty_line?(line)
66
+ line.empty?
67
+ end
68
+
69
+ def end_line?(line)
70
+ /^\s*end\b/.match?(line)
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
@@ -18,8 +18,8 @@ module Rubocop
18
18
  include Gitlab::Styles::Rubocop::MigrationHelpers
19
19
 
20
20
  MSG = 'Using `%s` on the `%s` table will take a long time to ' \
21
- 'complete, and should be avoided unless absolutely ' \
22
- 'necessary'
21
+ 'complete, and should be avoided unless absolutely ' \
22
+ 'necessary'
23
23
 
24
24
  # @!method batch_update?(node)
25
25
  def_node_matcher :batch_update?, <<~PATTERN
@@ -13,10 +13,10 @@ module Rubocop
13
13
  # - https://github.com/rubyzip/rubyzip#notes-on-zipinputstream
14
14
  class Rubyzip < RuboCop::Cop::Base
15
15
  MSG = 'Be careful when opening or iterating zip files via Zip::File. ' \
16
- 'Zip archives may contain many entries, and their file index is ' \
17
- 'read into memory upon construction, which can lead to ' \
18
- 'high memory use and poor performance. ' \
19
- 'Consider iterating archive entries via Zip::InputStream instead.'
16
+ 'Zip archives may contain many entries, and their file index is ' \
17
+ 'read into memory upon construction, which can lead to ' \
18
+ 'high memory use and poor performance. ' \
19
+ 'Consider iterating archive entries via Zip::InputStream instead.'
20
20
 
21
21
  # @!method reads_central_directory?(node)
22
22
  def_node_matcher :reads_central_directory?, <<-PATTERN
@@ -6,13 +6,16 @@ module Rubocop
6
6
  class PolymorphicAssociations < RuboCop::Cop::Base
7
7
  MSG = 'Do not use polymorphic associations, use separate tables instead'
8
8
 
9
- def on_send(node)
10
- return unless node.children[1] == :belongs_to
9
+ RESTRICT_ON_SEND = %i[belongs_to].to_set.freeze
11
10
 
12
- node.children.last.each_node(:pair) do |pair|
13
- key_name = pair.children[0].children[0]
11
+ # @!method polymorphic_pair(node)
12
+ def_node_matcher :polymorphic_pair, <<~PATTERN
13
+ (send _ %RESTRICT_ON_SEND ... (hash <$(pair (sym :polymorphic) _) ...>))
14
+ PATTERN
14
15
 
15
- add_offense(pair) if key_name == :polymorphic
16
+ def on_send(node)
17
+ polymorphic_pair(node) do |pair|
18
+ add_offense(pair)
16
19
  end
17
20
  end
18
21
  end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rubocop-rspec'
4
+ require_relative 'base'
5
+
6
+ module Rubocop
7
+ module Cop
8
+ module RSpec
9
+ # Checks whether `specify` is used with `is_expected` and suggests the
10
+ # use of `it`.
11
+ #
12
+ # @example
13
+ #
14
+ # # bad
15
+ # specify { is_expected.to eq(true) }
16
+ #
17
+ # # good
18
+ # it { is_expected.to eq(true) }
19
+ #
20
+ class SpecifyExpected < Base
21
+ extend RuboCop::Cop::AutoCorrector
22
+
23
+ MSG = 'Prefer using `it` when used with `is_expected`.'
24
+
25
+ # @!method specify_with_expected?(node)
26
+ def_node_matcher :specify_with_expected?, <<~PATTERN
27
+ (block
28
+ (send nil? :specify ...)
29
+ _args
30
+ (send
31
+ (send nil? :is_expected)
32
+ ...
33
+ )
34
+ )
35
+ PATTERN
36
+
37
+ RESTRICT_ON_SEND = %i[specify].freeze
38
+
39
+ def on_send(node)
40
+ return unless specify_with_expected?(node.parent)
41
+
42
+ add_offense(node) do |corrector|
43
+ corrector.replace(node, 'it')
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -12,8 +12,8 @@ module Rubocop
12
12
  # - https://gitlab.com/gitlab-org/gitlab/-/merge_requests/67855
13
13
  class OpenStructUse < RuboCop::Cop::Base
14
14
  MSG = 'Avoid using `OpenStruct`. It is officially discouraged. ' \
15
- 'Replace it with `Struct`, `Hash`, or RSpec doubles. ' \
16
- 'See https://docs.ruby-lang.org/en/3.0.0/OpenStruct.html#class-OpenStruct-label-Caveats'
15
+ 'Replace it with `Struct`, `Hash`, or RSpec doubles. ' \
16
+ 'See https://docs.ruby-lang.org/en/3.0.0/OpenStruct.html#class-OpenStruct-label-Caveats'
17
17
 
18
18
  # @!method uses_open_struct?(node)
19
19
  def_node_matcher :uses_open_struct?, <<-PATTERN
@@ -6,9 +6,9 @@ module Rubocop
6
6
  class WithoutReactiveCache < RuboCop::Cop::Base
7
7
  MSG = 'without_reactive_cache is for debugging purposes only. Please use with_reactive_cache.'
8
8
 
9
- def on_send(node)
10
- return unless node.children[1] == :without_reactive_cache
9
+ RESTRICT_ON_SEND = %i[without_reactive_cache].freeze
11
10
 
11
+ def on_send(node)
12
12
  add_offense(node.loc.selector)
13
13
  end
14
14
  end
data/rubocop-all.yml CHANGED
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  AllCops:
3
- TargetRubyVersion: 2.6
3
+ # The oldest supported Ruby version.
4
+ TargetRubyVersion: 3.0
4
5
  # Cop names are not displayed in offense messages by default. Change behavior
5
6
  # by overriding DisplayCopNames, or by giving the -D/--display-cop-names
6
7
  # option.
data/rubocop-default.yml CHANGED
@@ -1,26 +1,12 @@
1
1
  ---
2
2
  require:
3
- - rubocop-performance
4
- - rubocop-rspec
5
- - rubocop-rails
6
- - rubocop-graphql
7
3
  - ./lib/gitlab/styles/rubocop
8
4
 
9
5
  inherit_from:
10
6
  - rubocop-all.yml
11
- - rubocop-bundler.yml
7
+ - rubocop-minimal.yml
12
8
  - rubocop-capybara.yml
13
- - rubocop-fips.yml
14
- - rubocop-gemspec.yml
15
9
  - rubocop-graphql.yml
16
10
  - rubocop-internal-affairs.yml
17
- - rubocop-layout.yml
18
- - rubocop-lint.yml
19
- - rubocop-metrics.yml
20
11
  - rubocop-migrations.yml
21
- - rubocop-naming.yml
22
- - rubocop-performance.yml
23
12
  - rubocop-rails.yml
24
- - rubocop-rspec.yml
25
- - rubocop-security.yml
26
- - rubocop-style.yml
@@ -0,0 +1,8 @@
1
+ ---
2
+ require:
3
+ - ./lib/gitlab/styles/rubocop
4
+
5
+ # Check for create_list FactoryBot declarations higher than MaxAmount
6
+ FactoryBot/ExcessiveCreateList:
7
+ Enabled: true
8
+ MaxAmount: 10
data/rubocop-gemspec.yml CHANGED
@@ -1,12 +1,23 @@
1
1
  ---
2
+ # Checks that deprecated attributes are not set in a gemspec file. Removing
3
+ # deprecated attributes allows the user to receive smaller packed gems.
4
+ Gemspec/DeprecatedAttributeAssignment:
5
+ Enabled: true
6
+
7
+ # Enforce that development dependencies for a gem are specified in Gemfile,
8
+ # rather than in the gemspec using add_development_dependency
9
+ # Reason: Each project may decide to use a different strategy.
10
+ Gemspec/DevelopmentDependencies:
11
+ Enabled: false
12
+
2
13
  # Dependencies in the gemspec should be alphabetically sorted
3
14
  # Configuration parameters: Include, TreatCommentsAsGroupSeparators.
4
15
  Gemspec/OrderedDependencies:
5
16
  Include:
6
17
  - '**/*.gemspec'
7
18
 
8
- # Enforce that development dependencies for a gem are specified in Gemfile,
9
- # rather than in the gemspec using add_development_dependency
10
- # Reason: Each project may decide to use a different strategy.
11
- Gemspec/DevelopmentDependencies:
19
+ # Requires a gemspec to have rubygems_mfa_required metadata set.
20
+ # Most gems are released via CI and MFA cannot be used with improved security.
21
+ # See https://gitlab.com/gitlab-org/ruby/gems/gitlab-triage/-/merge_requests/313#note_1605402392
22
+ Gemspec/RequireMFA:
12
23
  Enabled: false
data/rubocop-graphql.yml CHANGED
@@ -18,12 +18,38 @@ GraphQL/ExtractInputType:
18
18
 
19
19
  # Suggests extracting fields with common prefixes to the separate type
20
20
  GraphQL/ExtractType:
21
- Enabled: false
21
+ Enabled: true
22
+
23
+ # Enforce use of `graphql_name` in GrahQL types.
24
+ GraphQL/GraphqlName:
25
+ EnforcedStyle: required
22
26
 
23
27
  # Checks that types are defined with class-based API
24
28
  GraphQL/LegacyDsl:
25
29
  Enabled: false
26
30
 
31
+ # Detects missing max_complexity configuration in schema files.
32
+ # Max complexity is defined in a different way.
33
+ # See https://gitlab.com/gitlab-org/gitlab/-/blob/9c0dfedd80ede7dbdcc92cf3f5b14bf36998e85c/app/graphql/gitlab_schema.rb#L41-44
34
+ GraphQL/MaxComplexitySchema:
35
+ Enabled: false
36
+
37
+ # Detects missing max_depth configuration in schema files.
38
+ # Max depth is defined in a different way.
39
+ # See https://gitlab.com/gitlab-org/gitlab/-/blob/9c0dfedd80ede7dbdcc92cf3f5b14bf36998e85c/app/graphql/gitlab_schema.rb#L41-45
40
+ GraphQL/MaxDepthSchema:
41
+ Enabled: false
42
+
43
+ # Detects types that implement Node interface and not have `.authorized?` check.
44
+ # `authorize` is used instead.
45
+ GraphQL/NotAuthorizedNodeType:
46
+ Enabled: false
47
+
48
+ # Checks that GraphQL Argument definitions prepare arguments to allow better Sorbet typing.
49
+ # Sorbet is not (yet) used.
50
+ GraphQL/PrepareMethod:
51
+ Enabled: false
52
+
27
53
  # Ensures all types have a description
28
54
  # Disabled because our bespoke Graphql/Descriptions cop covers this.
29
55
  GraphQL/ObjectDescription:
data/rubocop-layout.yml CHANGED
@@ -1,4 +1,7 @@
1
1
  ---
2
+ require:
3
+ - ./lib/gitlab/styles/rubocop
4
+
2
5
  # Check indentation of private/protected visibility modifiers.
3
6
  Layout/AccessModifierIndentation:
4
7
  Enabled: true
@@ -154,11 +157,9 @@ Layout/IndentationWidth:
154
157
  Layout/LeadingCommentSpace:
155
158
  Enabled: true
156
159
 
157
- # Limit lines to 120 characters.
158
- Layout/LineLength:
160
+ # Checks if there is an empty line after the last include/extend/prepend.
161
+ Layout/LineBreakAfterFinalMixin:
159
162
  Enabled: true
160
- Max: 120
161
- AllowedPatterns: ['\s#\srubocop']
162
163
 
163
164
  # Checks that strings broken over multiple lines (by a backslash) contain
164
165
  # trailing spaces instead of leading spaces (default) or leading spaces instead
@@ -171,6 +172,12 @@ Layout/LineContinuationLeadingSpace:
171
172
  Layout/LineContinuationSpacing:
172
173
  Enabled: true
173
174
 
175
+ # Limit lines to 120 characters.
176
+ Layout/LineLength:
177
+ Enabled: true
178
+ Max: 120
179
+ AllowedPatterns: ['\s#\srubocop']
180
+
174
181
  # Checks that the closing brace in an array literal is either on the same line
175
182
  # as the last array element, or a new line.
176
183
  Layout/MultilineArrayBraceLayout:
@@ -185,6 +192,7 @@ Layout/MultilineBlockLayout:
185
192
  # literal and a backslash.
186
193
  Layout/LineEndStringConcatenationIndentation:
187
194
  Enabled: true
195
+ EnforcedStyle: indented
188
196
 
189
197
  # Checks that the closing brace in a hash literal is either on the same line as
190
198
  # the last hash element, or a new line.
@@ -309,3 +317,7 @@ Layout/TrailingEmptyLines:
309
317
  # Avoid trailing whitespace.
310
318
  Layout/TrailingWhitespace:
311
319
  Enabled: true
320
+
321
+ # checks if the code style follows the ExpectedOrder
322
+ Layout/ClassStructure:
323
+ Enabled: true
@@ -0,0 +1,17 @@
1
+ ---
2
+ # This are the cops that has no external dependency on Rails specific code
3
+ # or GitLab specific code
4
+ #
5
+ # It is intended to be used by any of our Ruby Gems that are plain ruby code only
6
+ inherit_from:
7
+ - rubocop-bundler.yml
8
+ - rubocop-fips.yml
9
+ - rubocop-gemspec.yml
10
+ - rubocop-layout.yml
11
+ - rubocop-lint.yml
12
+ - rubocop-metrics.yml
13
+ - rubocop-naming.yml
14
+ - rubocop-performance.yml
15
+ - rubocop-rspec.yml
16
+ - rubocop-security.yml
17
+ - rubocop-style.yml
data/rubocop-rails.yml CHANGED
@@ -178,6 +178,11 @@ Rails/RenderInline:
178
178
  Rails/RenderPlainText:
179
179
  Enabled: true
180
180
 
181
+ # Checks for the usage of obsolete `require_dependency` method for Rails
182
+ # applications running in Zeitwerk mode.
183
+ Rails/RequireDependency:
184
+ Enabled: true
185
+
181
186
  # Checks the arguments of ActiveRecord scopes.
182
187
  Rails/ScopeArgs:
183
188
  Enabled: true
data/rubocop-rspec.yml CHANGED
@@ -1,12 +1,8 @@
1
1
  ---
2
2
  require:
3
+ - rubocop-rspec
3
4
  - ./lib/gitlab/styles/rubocop
4
5
 
5
- # Check for create_list FactoryBot declarations higher than MaxAmount
6
- RSpec/FactoryBot/ExcessiveCreateList:
7
- Enabled: true
8
- MaxAmount: 10
9
-
10
6
  # Check that instances are not being stubbed globally.
11
7
  RSpec/AnyInstance:
12
8
  Enabled: false
@@ -83,6 +79,7 @@ RSpec/ExpectOutput:
83
79
  Enabled: true
84
80
 
85
81
  # Checks the file and folder naming of the spec file.
82
+ # Will be replaced with RSpec/SpecFilePathFormat and RSpec/SpecFilePathSuffix.
86
83
  RSpec/FilePath:
87
84
  Enabled: true
88
85
  IgnoreMethods: true
@@ -137,7 +134,7 @@ RSpec/MultipleExpectations:
137
134
 
138
135
  # Checks for explicitly referenced test subjects.
139
136
  RSpec/NamedSubject:
140
- Enabled: false
137
+ Enabled: true
141
138
 
142
139
  # Checks for nested example groups.
143
140
  RSpec/NestedGroups:
@@ -163,6 +160,17 @@ RSpec/SingleLineHook:
163
160
  - 'spec/factories/*'
164
161
  - 'spec/requests/api/v3/*'
165
162
 
163
+ # Checks the file and folder naming of the spec file.
164
+ # Will replace RSpec/FilePath.
165
+ RSpec/SpecFilePathFormat:
166
+ Enabled: false
167
+ IgnoreMethods: true
168
+
169
+ # Checks the file and folder naming of the spec file.
170
+ # Will replace RSpec/FilePath.
171
+ RSpec/SpecFilePathSuffix:
172
+ Enabled: false
173
+
166
174
  # Checks that message expectations do not have a configured response.
167
175
  # https://docs.rubocop.org/rubocop-rspec/1.44/cops_rspec.html#rspecstubbedmock
168
176
  RSpec/StubbedMock:
data/rubocop-style.yml CHANGED
@@ -52,10 +52,14 @@ Style/BisectedAttrAccessor:
52
52
  Style/BlockComments:
53
53
  Enabled: true
54
54
 
55
- # Avoid using {...} for multi-line blocks (multiline chaining is # always
56
- # ugly). Prefer {...} over do...end for single-line blocks.
55
+ # Avoid using {...} for multi-line blocks (multi-line chaining is always ugly).
56
+ # Prefer {...} over do...end for single-line blocks.
57
57
  Style/BlockDelimiters:
58
58
  Enabled: true
59
+ # Do flag `it {` in multi-line blocks. Off by default.
60
+ AllowedMethods:
61
+ - proc
62
+ - lambda
59
63
 
60
64
  # Checks for uses of the case equality operator(===).
61
65
  Style/CaseEquality:
@@ -127,11 +131,10 @@ Style/EndBlock:
127
131
  Style/EvenOdd:
128
132
  Enabled: true
129
133
 
130
- # Enforces the use of explicit block argument to avoid writing block literal that
131
- # just passes its arguments to another block.
132
- # https://docs.rubocop.org/rubocop/0.89/cops_style.html#styleexplicitblockargument
134
+ # Reason: Using `yield` is ~20% faster than `&block`.
135
+ # See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/94090#note_1452639709
133
136
  Style/ExplicitBlockArgument:
134
- Enabled: true
137
+ Enabled: false
135
138
 
136
139
  # Enforces consistency when using exponential notation for numbers in the code
137
140
  Style/ExponentialNotation:
@@ -308,6 +311,11 @@ Style/NumberedParametersLimit:
308
311
  Style/NumericLiterals:
309
312
  Enabled: false
310
313
 
314
+
315
+ # Enforces the use Object#then instead of Object#yield_self.
316
+ Style/ObjectThen:
317
+ Enabled: true
318
+
311
319
  # Favor the ternary operator(?:) over if/then/else/end constructs.
312
320
  Style/OneLineConditional:
313
321
  Enabled: true
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: 10.1.0
4
+ version: 12.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - GitLab
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-06-29 00:00:00.000000000 Z
11
+ date: 2024-05-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubocop
@@ -16,70 +16,84 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 1.50.2
19
+ version: 1.62.1
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.50.2
26
+ version: 1.62.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: rubocop-factory_bot
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 2.25.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 2.25.1
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rubocop-graphql
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
45
  - - "~>"
32
46
  - !ruby/object:Gem::Version
33
- version: '0.18'
47
+ version: 1.5.0
34
48
  type: :runtime
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
52
  - - "~>"
39
53
  - !ruby/object:Gem::Version
40
- version: '0.18'
54
+ version: 1.5.0
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rubocop-performance
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
59
  - - "~>"
46
60
  - !ruby/object:Gem::Version
47
- version: '1.15'
61
+ version: 1.20.2
48
62
  type: :runtime
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
66
  - - "~>"
53
67
  - !ruby/object:Gem::Version
54
- version: '1.15'
68
+ version: 1.20.2
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: rubocop-rails
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
73
  - - "~>"
60
74
  - !ruby/object:Gem::Version
61
- version: '2.17'
75
+ version: 2.24.0
62
76
  type: :runtime
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
80
  - - "~>"
67
81
  - !ruby/object:Gem::Version
68
- version: '2.17'
82
+ version: 2.24.0
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: rubocop-rspec
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
87
  - - "~>"
74
88
  - !ruby/object:Gem::Version
75
- version: '2.22'
89
+ version: 2.27.1
76
90
  type: :runtime
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
94
  - - "~>"
81
95
  - !ruby/object:Gem::Version
82
- version: '2.22'
96
+ version: 2.27.1
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: bundler
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -100,14 +114,14 @@ dependencies:
100
114
  requirements:
101
115
  - - "~>"
102
116
  - !ruby/object:Gem::Version
103
- version: 3.6.7
117
+ version: 4.6.0
104
118
  type: :development
105
119
  prerelease: false
106
120
  version_requirements: !ruby/object:Gem::Requirement
107
121
  requirements:
108
122
  - - "~>"
109
123
  - !ruby/object:Gem::Version
110
- version: 3.6.7
124
+ version: 4.6.0
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: lefthook
113
127
  requirement: !ruby/object:Gem::Requirement
@@ -248,7 +262,7 @@ dependencies:
248
262
  - - "~>"
249
263
  - !ruby/object:Gem::Version
250
264
  version: 0.1.4
251
- description:
265
+ description:
252
266
  email:
253
267
  - gitlab_rubygems@gitlab.com
254
268
  executables: []
@@ -302,6 +316,7 @@ files:
302
316
  - lib/rubocop/cop/internal_affairs/deprecate_cop_helper.rb
303
317
  - lib/rubocop/cop/internal_affairs/missing_cop_department.rb
304
318
  - lib/rubocop/cop/internal_affairs/use_restrict_on_send.rb
319
+ - lib/rubocop/cop/layout/line_break_after_final_mixin.rb
305
320
  - lib/rubocop/cop/line_break_after_guard_clauses.rb
306
321
  - lib/rubocop/cop/line_break_around_conditional_block.rb
307
322
  - lib/rubocop/cop/migration/update_large_table.rb
@@ -313,9 +328,9 @@ files:
313
328
  - lib/rubocop/cop/rspec/empty_line_after_let_block.rb
314
329
  - lib/rubocop/cop/rspec/empty_line_after_shared_example.rb
315
330
  - lib/rubocop/cop/rspec/example_starting_character.rb
316
- - lib/rubocop/cop/rspec/factory_bot/excessive_create_list.rb
317
331
  - lib/rubocop/cop/rspec/have_link_parameters.rb
318
332
  - lib/rubocop/cop/rspec/single_line_hook.rb
333
+ - lib/rubocop/cop/rspec/specify_expected.rb
319
334
  - lib/rubocop/cop/rspec/useless_dynamic_definition.rb
320
335
  - lib/rubocop/cop/rspec/verbose_include_metadata.rb
321
336
  - lib/rubocop/cop/style/hash_transformation.rb
@@ -326,6 +341,7 @@ files:
326
341
  - rubocop-capybara.yml
327
342
  - rubocop-code_reuse.yml
328
343
  - rubocop-default.yml
344
+ - rubocop-factory_bot.yml
329
345
  - rubocop-fips.yml
330
346
  - rubocop-gemspec.yml
331
347
  - rubocop-graphql.yml
@@ -334,6 +350,7 @@ files:
334
350
  - rubocop-lint.yml
335
351
  - rubocop-metrics.yml
336
352
  - rubocop-migrations.yml
353
+ - rubocop-minimal.yml
337
354
  - rubocop-naming.yml
338
355
  - rubocop-performance.yml
339
356
  - rubocop-rails.yml
@@ -344,7 +361,7 @@ homepage: https://gitlab.com/gitlab-org/ruby/gems/gitlab-styles
344
361
  licenses:
345
362
  - MIT
346
363
  metadata: {}
347
- post_install_message:
364
+ post_install_message:
348
365
  rdoc_options: []
349
366
  require_paths:
350
367
  - lib
@@ -352,15 +369,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
352
369
  requirements:
353
370
  - - ">="
354
371
  - !ruby/object:Gem::Version
355
- version: '2.6'
372
+ version: '3.0'
356
373
  required_rubygems_version: !ruby/object:Gem::Requirement
357
374
  requirements:
358
375
  - - ">="
359
376
  - !ruby/object:Gem::Version
360
377
  version: '0'
361
378
  requirements: []
362
- rubygems_version: 3.1.6
363
- signing_key:
379
+ rubygems_version: 3.3.27
380
+ signing_key:
364
381
  specification_version: 4
365
382
  summary: GitLab style guides and shared style configs.
366
383
  test_files: []
@@ -1,52 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rubocop-rspec'
4
- require_relative '../base'
5
-
6
- module Rubocop
7
- module Cop
8
- module RSpec
9
- module FactoryBot
10
- # Check for create_list FactoryBot declarations higher than configured MaxAmount.
11
- #
12
- # @example MaxAmount: 20
13
- # We do not allow more than 20 items to be created.
14
- #
15
- # # bad
16
- # create_list(:merge_request, 1000, state: :opened)
17
- #
18
- # # good
19
- # create_list(:merge_request, 15, state: :opened)
20
- #
21
- # @example
22
- # We do not allow more than 10 items to be created (default)
23
- # # bad
24
- # create_list(:merge_request, 1000, state: :opened)
25
- #
26
- # # good
27
- # create_list(:merge_request, 10, state: :opened)
28
- #
29
- class ExcessiveCreateList < Base
30
- MESSAGE = 'Avoid using `create_list` with more than %{max_amount} items.'
31
-
32
- # @!method create_list?(node)
33
- def_node_matcher :create_list?, <<~PATTERN
34
- (send nil? :create_list (sym ...) $(int _) ...)
35
- PATTERN
36
-
37
- RESTRICT_ON_SEND = %i[create_list].freeze
38
-
39
- def on_send(node)
40
- number_node = create_list?(node)
41
- return unless number_node
42
-
43
- max_amount = cop_config['MaxAmount']
44
- return if number_node.value <= max_amount
45
-
46
- add_offense(number_node, message: format(MESSAGE, max_amount: max_amount))
47
- end
48
- end
49
- end
50
- end
51
- end
52
- end