gitlab-styles 6.6.0 → 8.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 (68) hide show
  1. checksums.yaml +4 -4
  2. data/.gitlab/changelog_config.yml +13 -0
  3. data/.gitlab/merge_request_templates/Release.md +9 -31
  4. data/.gitlab-ci.yml +3 -1
  5. data/Dangerfile +5 -0
  6. data/gitlab-styles.gemspec +1 -0
  7. data/lib/gitlab/styles/common/banned_constants.rb +28 -0
  8. data/lib/gitlab/styles/rubocop/model_helpers.rb +1 -1
  9. data/lib/gitlab/styles/rubocop.rb +2 -2
  10. data/lib/gitlab/styles/version.rb +1 -1
  11. data/lib/rubocop/cop/active_record_dependent.rb +32 -0
  12. data/lib/rubocop/cop/active_record_serialize.rb +20 -0
  13. data/lib/rubocop/cop/avoid_return_from_blocks.rb +77 -0
  14. data/lib/rubocop/cop/code_reuse/active_record.rb +80 -0
  15. data/lib/rubocop/cop/custom_error_class.rb +69 -0
  16. data/lib/rubocop/cop/fips/md5.rb +27 -0
  17. data/lib/rubocop/cop/fips/open_ssl.rb +31 -0
  18. data/lib/rubocop/cop/fips/sha1.rb +27 -0
  19. data/lib/rubocop/cop/gem_fetcher.rb +37 -0
  20. data/lib/rubocop/cop/in_batches.rb +18 -0
  21. data/lib/rubocop/cop/internal_affairs/deprecate_cop_helper.rb +39 -0
  22. data/lib/rubocop/cop/line_break_after_guard_clauses.rb +100 -0
  23. data/lib/rubocop/cop/line_break_around_conditional_block.rb +128 -0
  24. data/lib/rubocop/cop/migration/update_large_table.rb +60 -0
  25. data/lib/rubocop/cop/performance/rubyzip.rb +35 -0
  26. data/lib/rubocop/cop/polymorphic_associations.rb +25 -0
  27. data/lib/rubocop/cop/rails/include_url_helper.rb +27 -0
  28. data/lib/rubocop/cop/redirect_with_status.rb +46 -0
  29. data/lib/rubocop/cop/rspec/base.rb +14 -0
  30. data/lib/rubocop/cop/rspec/empty_line_after_final_let_it_be.rb +47 -0
  31. data/lib/rubocop/cop/rspec/empty_line_after_let_block.rb +61 -0
  32. data/lib/rubocop/cop/rspec/empty_line_after_shared_example.rb +61 -0
  33. data/lib/rubocop/cop/rspec/example_starting_character.rb +120 -0
  34. data/lib/rubocop/cop/rspec/have_link_parameters.rb +44 -0
  35. data/lib/rubocop/cop/rspec/single_line_hook.rb +41 -0
  36. data/lib/rubocop/cop/rspec/verbose_include_metadata.rb +71 -0
  37. data/lib/rubocop/cop/style/hash_transformation.rb +83 -0
  38. data/lib/rubocop/cop/style/open_struct_use.rb +39 -0
  39. data/lib/rubocop/cop/without_reactive_cache.rb +16 -0
  40. data/rubocop-default.yml +1 -0
  41. data/rubocop-fips.yml +15 -0
  42. data/rubocop-rspec.yml +3 -2
  43. metadata +49 -27
  44. data/lib/gitlab/styles/rubocop/cop/active_record_dependent.rb +0 -32
  45. data/lib/gitlab/styles/rubocop/cop/active_record_serialize.rb +0 -24
  46. data/lib/gitlab/styles/rubocop/cop/code_reuse/active_record.rb +0 -130
  47. data/lib/gitlab/styles/rubocop/cop/custom_error_class.rb +0 -73
  48. data/lib/gitlab/styles/rubocop/cop/gem_fetcher.rb +0 -41
  49. data/lib/gitlab/styles/rubocop/cop/in_batches.rb +0 -22
  50. data/lib/gitlab/styles/rubocop/cop/internal_affairs/deprecate_cop_helper.rb +0 -43
  51. data/lib/gitlab/styles/rubocop/cop/line_break_after_guard_clauses.rb +0 -104
  52. data/lib/gitlab/styles/rubocop/cop/line_break_around_conditional_block.rb +0 -132
  53. data/lib/gitlab/styles/rubocop/cop/migration/update_large_table.rb +0 -64
  54. data/lib/gitlab/styles/rubocop/cop/performance/rubyzip.rb +0 -39
  55. data/lib/gitlab/styles/rubocop/cop/polymorphic_associations.rb +0 -29
  56. data/lib/gitlab/styles/rubocop/cop/rails/include_url_helper.rb +0 -31
  57. data/lib/gitlab/styles/rubocop/cop/redirect_with_status.rb +0 -50
  58. data/lib/gitlab/styles/rubocop/cop/rspec/base.rb +0 -18
  59. data/lib/gitlab/styles/rubocop/cop/rspec/empty_line_after_final_let_it_be.rb +0 -51
  60. data/lib/gitlab/styles/rubocop/cop/rspec/empty_line_after_let_block.rb +0 -65
  61. data/lib/gitlab/styles/rubocop/cop/rspec/empty_line_after_shared_example.rb +0 -65
  62. data/lib/gitlab/styles/rubocop/cop/rspec/example_starting_character.rb +0 -124
  63. data/lib/gitlab/styles/rubocop/cop/rspec/have_link_parameters.rb +0 -48
  64. data/lib/gitlab/styles/rubocop/cop/rspec/single_line_hook.rb +0 -45
  65. data/lib/gitlab/styles/rubocop/cop/rspec/verbose_include_metadata.rb +0 -75
  66. data/lib/gitlab/styles/rubocop/cop/style/hash_transformation.rb +0 -87
  67. data/lib/gitlab/styles/rubocop/cop/style/open_struct_use.rb +0 -43
  68. data/lib/gitlab/styles/rubocop/cop/without_reactive_cache.rb +0 -20
@@ -0,0 +1,120 @@
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 for common mistakes in example descriptions.
10
+ #
11
+ # This cop will correct docstrings that begin/end with space or words that start with a capital letter.
12
+ #
13
+ # @see https://gitlab.com/gitlab-org/gitlab/-/merge_requests/46336#note_442669518
14
+ #
15
+ # @example
16
+ # # bad
17
+ # it 'Does something' do
18
+ # end
19
+ #
20
+ # # good
21
+ # it 'does nothing' do
22
+ # end
23
+ #
24
+ # @example
25
+ # # bad
26
+ # it ' does something' do
27
+ # end
28
+ #
29
+ # # good
30
+ # it 'does something' do
31
+ # end
32
+ #
33
+ # @example
34
+ # # bad
35
+ # it 'does something ' do
36
+ # end
37
+ #
38
+ # # good
39
+ # it 'does something' do
40
+ # end
41
+ #
42
+ # @example
43
+ # # bad
44
+ # it ' does something ' do
45
+ # end
46
+ #
47
+ # # good
48
+ # it 'does something' do
49
+ # end
50
+ class ExampleStartingCharacter < Base
51
+ extend RuboCop::Cop::AutoCorrector
52
+
53
+ MSG = 'Only start words with lowercase alpha with no leading/trailing spaces when describing your tests.'
54
+
55
+ def_node_matcher :it_description, <<-PATTERN
56
+ (block (send _ :it ${
57
+ (str $_)
58
+ (dstr (str $_ ) ...)
59
+ } ...) ...)
60
+ PATTERN
61
+
62
+ def on_block(node)
63
+ it_description(node) do |description_node, _message|
64
+ add_wording_offense(description_node, MSG) if invalid_description?(text(description_node))
65
+ end
66
+ end
67
+
68
+ private
69
+
70
+ def add_wording_offense(node, message)
71
+ docstring = docstring(node)
72
+ add_offense(docstring, message: message) do |corrector|
73
+ corrector.replace(docstring, replacement_text(node))
74
+ end
75
+ end
76
+
77
+ def docstring(node)
78
+ expr = node.loc.expression
79
+
80
+ Parser::Source::Range.new(
81
+ expr.source_buffer,
82
+ expr.begin_pos + 1,
83
+ expr.end_pos - 1
84
+ )
85
+ end
86
+
87
+ def invalid_description?(message)
88
+ message.match?(/(^([A-Z]{1}[a-z]+\s|\s)|\s$)/)
89
+ end
90
+
91
+ def replacement_text(node)
92
+ text = text(node)
93
+
94
+ text.strip!
95
+
96
+ text = downcase_first_letter(text) if invalid_description?(text)
97
+
98
+ text
99
+ end
100
+
101
+ # Recursive processing is required to process nested dstr nodes
102
+ # that is the case for \-separated multiline strings with interpolation.
103
+ def text(node)
104
+ case node.type
105
+ when :dstr
106
+ node.node_parts.map { |child_node| text(child_node) }.join
107
+ when :str
108
+ node.value
109
+ when :begin
110
+ node.source
111
+ end
112
+ end
113
+
114
+ def downcase_first_letter(str)
115
+ str[0].downcase + str[1..]
116
+ end
117
+ end
118
+ end
119
+ end
120
+ end
@@ -0,0 +1,44 @@
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
+ # This cop checks for unused parameters to the `have_link` matcher.
10
+ #
11
+ # @example
12
+ #
13
+ # # bad
14
+ # expect(page).to have_link('Link', 'https://example.com')
15
+ #
16
+ # # good
17
+ # expect(page).to have_link('Link', href: 'https://example.com')
18
+ # expect(page).to have_link('Example')
19
+ class HaveLinkParameters < Base
20
+ extend RuboCop::Cop::AutoCorrector
21
+
22
+ MESSAGE = "The second argument to `have_link` should be a Hash."
23
+
24
+ def_node_matcher :unused_parameters?, <<~PATTERN
25
+ (send nil? :have_link
26
+ _ !{hash nil}
27
+ )
28
+ PATTERN
29
+
30
+ def on_send(node)
31
+ return unless unused_parameters?(node)
32
+
33
+ location = node.arguments[1..]
34
+ .map(&:source_range)
35
+ .reduce(:join)
36
+
37
+ add_offense(location, message: MESSAGE) do |corrector|
38
+ corrector.insert_after(location.end, "\n")
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,41 @@
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
+ # This cop checks for single-line hook blocks
10
+ #
11
+ # @example
12
+ #
13
+ # # bad
14
+ # before { do_something }
15
+ # after(:each) { undo_something }
16
+ #
17
+ # # good
18
+ # before do
19
+ # do_something
20
+ # end
21
+ #
22
+ # after(:each) do
23
+ # undo_something
24
+ # end
25
+ class SingleLineHook < Base
26
+ MESSAGE = "Don't use single-line hook blocks."
27
+
28
+ def_node_search :rspec_hook?, <<~PATTERN
29
+ (send nil? {:after :around :before} ...)
30
+ PATTERN
31
+
32
+ def on_block(node)
33
+ return unless node.single_line?
34
+ return unless rspec_hook?(node)
35
+
36
+ add_offense(node, message: MESSAGE)
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,71 @@
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 for verbose include metadata used in the specs.
10
+ #
11
+ # @example
12
+ # # bad
13
+ # describe MyClass, js: true do
14
+ # end
15
+ #
16
+ # # good
17
+ # describe MyClass, :js do
18
+ # end
19
+ class VerboseIncludeMetadata < Base
20
+ extend RuboCop::Cop::AutoCorrector
21
+
22
+ MSG = 'Use `%s` instead of `%s`.'
23
+
24
+ SELECTORS = %i[describe context feature example_group it specify example scenario its].freeze
25
+
26
+ def_node_matcher :include_metadata, <<-PATTERN
27
+ (send {(const nil? :RSpec) nil?} {#{SELECTORS.map(&:inspect).join(' ')}}
28
+ !const
29
+ ...
30
+ (hash $...))
31
+ PATTERN
32
+
33
+ def_node_matcher :invalid_metadata?, <<-PATTERN
34
+ (pair
35
+ (sym $...)
36
+ (true))
37
+ PATTERN
38
+
39
+ def on_send(node)
40
+ invalid_metadata_matches(node) do |match|
41
+ add_offense(node, message: format(MSG, good(match), bad(match))) do |corrector|
42
+ invalid_metadata_matches(node) do |match|
43
+ corrector.replace(match.loc.expression, good(match))
44
+ end
45
+ end
46
+ end
47
+ end
48
+
49
+ private
50
+
51
+ def invalid_metadata_matches(node, &block)
52
+ include_metadata(node) do |matches|
53
+ matches.select { |match| invalid_metadata?(match) }.each(&block)
54
+ end
55
+ end
56
+
57
+ def bad(match)
58
+ "#{metadata_key(match)}: true"
59
+ end
60
+
61
+ def good(match)
62
+ ":#{metadata_key(match)}"
63
+ end
64
+
65
+ def metadata_key(match)
66
+ match.children[0].source
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,83 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rubocop
4
+ module Cop
5
+ module Style
6
+ # This cop identifies places where `map { ... }.to_h` or
7
+ # `Hash[map { ... }]` can be replaced with `to_h { ... }`,
8
+ # saving an intermediate array allocation.
9
+ #
10
+ # @example
11
+ # # bad
12
+ # hash.map { |k, v| [v.upcase, k.downcase] }.to_h
13
+ # hash.collect { |k, v| [v.upcase, k.downcase] }.to_h
14
+ # Hash[hash.map { |k, v| [v.upcase, k.downcase] }]
15
+ # Hash[hash.collect { |k, v| [v.upcase, k.downcase] }]
16
+ # array.map { |x| [x, x + 1] }.to_h
17
+ #
18
+ # # good
19
+ # hash.to_h { |k, v| [v.upcase, k.downcase] }
20
+ # array.to_h { |x| [x, x + 1] }
21
+ #
22
+ # Full credit: https://github.com/eugeneius/rubocop-performance/blob/hash_transformation/lib/rubocop/cop/performance/hash_transformation.rb
23
+ class HashTransformation < RuboCop::Cop::Cop
24
+ include RuboCop::Cop::RangeHelp
25
+
26
+ MSG = 'Use `to_h { ... }` instead of `%<current>s`.'
27
+
28
+ def_node_matcher :to_h_candidate?, <<~PATTERN
29
+ {
30
+ [(send
31
+ $(block $(send _ {:map :collect}) ...) :to_h) !block_literal?]
32
+ (send (const nil? :Hash) :[]
33
+ $(block $(send _ {:map :collect}) ...))
34
+ }
35
+ PATTERN
36
+
37
+ def on_send(node)
38
+ to_h_candidate?(node) do |_block, call|
39
+ range = offense_range(node, call)
40
+ message = message(node, call)
41
+ add_offense(node, location: range, message: message)
42
+ end
43
+ end
44
+
45
+ def autocorrect(node)
46
+ block, call = to_h_candidate?(node)
47
+
48
+ lambda do |corrector|
49
+ corrector.remove(after_block(node, block))
50
+ corrector.replace(call.loc.selector, 'to_h')
51
+ corrector.remove(before_block(node, block))
52
+ end
53
+ end
54
+
55
+ private
56
+
57
+ def offense_range(node, call)
58
+ return node.source_range if node.children.first.const_type?
59
+
60
+ range_between(call.loc.selector.begin_pos, node.loc.selector.end_pos)
61
+ end
62
+
63
+ def message(node, call)
64
+ current = if node.children.first.const_type?
65
+ "Hash[#{call.method_name} { ... }]"
66
+ else
67
+ "#{call.method_name} { ... }.to_h"
68
+ end
69
+
70
+ format(MSG, current: current)
71
+ end
72
+
73
+ def after_block(node, block)
74
+ block.source_range.end.join(node.source_range.end)
75
+ end
76
+
77
+ def before_block(node, block)
78
+ node.source_range.begin.join(block.source_range.begin)
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rubocop
4
+ module Cop
5
+ module Style
6
+ # This cop flags uses of OpenStruct, as it is now officially discouraged
7
+ # to be used for performance, version compatibility, and potential security issues.
8
+ #
9
+ # See also:
10
+ # - https://rubyreferences.github.io/rubychanges/3.0.html#standard-library
11
+ # - https://docs.ruby-lang.org/en/3.0.0/OpenStruct.html#class-OpenStruct-label-Caveats
12
+ # - https://gitlab.com/gitlab-org/gitlab/-/merge_requests/67855
13
+ class OpenStructUse < RuboCop::Cop::Cop
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'
17
+
18
+ def_node_matcher :uses_open_struct?, <<-PATTERN
19
+ (const {nil? (cbase)} :OpenStruct)
20
+ PATTERN
21
+
22
+ def on_const(node)
23
+ return unless uses_open_struct?(node)
24
+ return if custom_class_or_module_definition?(node)
25
+
26
+ add_offense(node)
27
+ end
28
+
29
+ private
30
+
31
+ def custom_class_or_module_definition?(node)
32
+ parent = node.parent
33
+
34
+ (parent.class_type? || parent.module_type?) && node.left_siblings.empty?
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rubocop
4
+ module Cop
5
+ # Cop that prevents the use of `without_reactive_cache`
6
+ class WithoutReactiveCache < RuboCop::Cop::Cop
7
+ MSG = 'without_reactive_cache is for debugging purposes only. Please use with_reactive_cache.'
8
+
9
+ def on_send(node)
10
+ return unless node.children[1] == :without_reactive_cache
11
+
12
+ add_offense(node, location: :selector)
13
+ end
14
+ end
15
+ end
16
+ end
data/rubocop-default.yml CHANGED
@@ -10,6 +10,7 @@ require:
10
10
  inherit_from:
11
11
  - rubocop-all.yml
12
12
  - rubocop-bundler.yml
13
+ - rubocop-fips.yml
13
14
  - rubocop-gemspec.yml
14
15
  - rubocop-graphql.yml
15
16
  - rubocop-layout.yml
data/rubocop-fips.yml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ require:
3
+ - ./lib/gitlab/styles/rubocop
4
+
5
+ # Denies usage of MD5
6
+ Fips/MD5:
7
+ Enabled: true
8
+
9
+ # Denies usage of SHA1
10
+ Fips/SHA1:
11
+ Enabled: true
12
+
13
+ # Replaces ::Digest with ::OpenSSL::Digest
14
+ Fips/OpenSSL:
15
+ Enabled: true
data/rubocop-rspec.yml CHANGED
@@ -95,8 +95,9 @@ RSpec/ImplicitExpect:
95
95
  EnforcedStyle: is_expected
96
96
 
97
97
  # Checks for the usage of instance variables.
98
+ # https://docs.gitlab.com/ee/development/testing_guide/best_practices.html#subject-and-let-variables
98
99
  RSpec/InstanceVariable:
99
- Enabled: false
100
+ Enabled: true
100
101
 
101
102
  # Checks for `subject` definitions that come after `let` definitions.
102
103
  RSpec/LeadingSubject:
@@ -157,4 +158,4 @@ RSpec/SubjectStub:
157
158
 
158
159
  # Prefer using verifying doubles over normal doubles.
159
160
  RSpec/VerifiedDoubles:
160
- Enabled: false
161
+ 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: 6.6.0
4
+ version: 8.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: 2021-11-23 00:00:00.000000000 Z
11
+ date: 2022-09-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubocop
@@ -114,6 +114,20 @@ dependencies:
114
114
  - - "~>"
115
115
  - !ruby/object:Gem::Version
116
116
  version: '2.1'
117
+ - !ruby/object:Gem::Dependency
118
+ name: gitlab-dangerfiles
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: 2.11.0
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: 2.11.0
117
131
  - !ruby/object:Gem::Dependency
118
132
  name: rake
119
133
  requirement: !ruby/object:Gem::Requirement
@@ -152,12 +166,14 @@ files:
152
166
  - ".editorconfig"
153
167
  - ".gitignore"
154
168
  - ".gitlab-ci.yml"
169
+ - ".gitlab/changelog_config.yml"
155
170
  - ".gitlab/merge_request_templates/New Static Analysis Check.md"
156
171
  - ".gitlab/merge_request_templates/Release.md"
157
172
  - ".rspec"
158
173
  - ".rubocop.yml"
159
174
  - CODE_OF_CONDUCT.md
160
175
  - CONTRIBUTING.md
176
+ - Dangerfile
161
177
  - Gemfile
162
178
  - LICENSE.md
163
179
  - README.md
@@ -166,40 +182,46 @@ files:
166
182
  - bin/setup
167
183
  - gitlab-styles.gemspec
168
184
  - lib/gitlab/styles.rb
185
+ - lib/gitlab/styles/common/banned_constants.rb
169
186
  - lib/gitlab/styles/rubocop.rb
170
- - lib/gitlab/styles/rubocop/cop/active_record_dependent.rb
171
- - lib/gitlab/styles/rubocop/cop/active_record_serialize.rb
172
- - lib/gitlab/styles/rubocop/cop/code_reuse/active_record.rb
173
- - lib/gitlab/styles/rubocop/cop/custom_error_class.rb
174
- - lib/gitlab/styles/rubocop/cop/gem_fetcher.rb
175
- - lib/gitlab/styles/rubocop/cop/in_batches.rb
176
- - lib/gitlab/styles/rubocop/cop/internal_affairs/deprecate_cop_helper.rb
177
- - lib/gitlab/styles/rubocop/cop/line_break_after_guard_clauses.rb
178
- - lib/gitlab/styles/rubocop/cop/line_break_around_conditional_block.rb
179
- - lib/gitlab/styles/rubocop/cop/migration/update_large_table.rb
180
- - lib/gitlab/styles/rubocop/cop/performance/rubyzip.rb
181
- - lib/gitlab/styles/rubocop/cop/polymorphic_associations.rb
182
- - lib/gitlab/styles/rubocop/cop/rails/include_url_helper.rb
183
- - lib/gitlab/styles/rubocop/cop/redirect_with_status.rb
184
- - lib/gitlab/styles/rubocop/cop/rspec/base.rb
185
- - lib/gitlab/styles/rubocop/cop/rspec/empty_line_after_final_let_it_be.rb
186
- - lib/gitlab/styles/rubocop/cop/rspec/empty_line_after_let_block.rb
187
- - lib/gitlab/styles/rubocop/cop/rspec/empty_line_after_shared_example.rb
188
- - lib/gitlab/styles/rubocop/cop/rspec/example_starting_character.rb
189
- - lib/gitlab/styles/rubocop/cop/rspec/have_link_parameters.rb
190
- - lib/gitlab/styles/rubocop/cop/rspec/single_line_hook.rb
191
- - lib/gitlab/styles/rubocop/cop/rspec/verbose_include_metadata.rb
192
- - lib/gitlab/styles/rubocop/cop/style/hash_transformation.rb
193
- - lib/gitlab/styles/rubocop/cop/style/open_struct_use.rb
194
- - lib/gitlab/styles/rubocop/cop/without_reactive_cache.rb
195
187
  - lib/gitlab/styles/rubocop/migration_helpers.rb
196
188
  - lib/gitlab/styles/rubocop/model_helpers.rb
197
189
  - lib/gitlab/styles/rubocop/rspec/helpers.rb
198
190
  - lib/gitlab/styles/version.rb
191
+ - lib/rubocop/cop/active_record_dependent.rb
192
+ - lib/rubocop/cop/active_record_serialize.rb
193
+ - lib/rubocop/cop/avoid_return_from_blocks.rb
194
+ - lib/rubocop/cop/code_reuse/active_record.rb
195
+ - lib/rubocop/cop/custom_error_class.rb
196
+ - lib/rubocop/cop/fips/md5.rb
197
+ - lib/rubocop/cop/fips/open_ssl.rb
198
+ - lib/rubocop/cop/fips/sha1.rb
199
+ - lib/rubocop/cop/gem_fetcher.rb
200
+ - lib/rubocop/cop/in_batches.rb
201
+ - lib/rubocop/cop/internal_affairs/deprecate_cop_helper.rb
202
+ - lib/rubocop/cop/line_break_after_guard_clauses.rb
203
+ - lib/rubocop/cop/line_break_around_conditional_block.rb
204
+ - lib/rubocop/cop/migration/update_large_table.rb
205
+ - lib/rubocop/cop/performance/rubyzip.rb
206
+ - lib/rubocop/cop/polymorphic_associations.rb
207
+ - lib/rubocop/cop/rails/include_url_helper.rb
208
+ - lib/rubocop/cop/redirect_with_status.rb
209
+ - lib/rubocop/cop/rspec/base.rb
210
+ - lib/rubocop/cop/rspec/empty_line_after_final_let_it_be.rb
211
+ - lib/rubocop/cop/rspec/empty_line_after_let_block.rb
212
+ - lib/rubocop/cop/rspec/empty_line_after_shared_example.rb
213
+ - lib/rubocop/cop/rspec/example_starting_character.rb
214
+ - lib/rubocop/cop/rspec/have_link_parameters.rb
215
+ - lib/rubocop/cop/rspec/single_line_hook.rb
216
+ - lib/rubocop/cop/rspec/verbose_include_metadata.rb
217
+ - lib/rubocop/cop/style/hash_transformation.rb
218
+ - lib/rubocop/cop/style/open_struct_use.rb
219
+ - lib/rubocop/cop/without_reactive_cache.rb
199
220
  - rubocop-all.yml
200
221
  - rubocop-bundler.yml
201
222
  - rubocop-code_reuse.yml
202
223
  - rubocop-default.yml
224
+ - rubocop-fips.yml
203
225
  - rubocop-gemspec.yml
204
226
  - rubocop-graphql.yml
205
227
  - rubocop-layout.yml
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative '../model_helpers'
4
-
5
- module Gitlab
6
- module Styles
7
- module Rubocop
8
- module Cop
9
- # Cop that prevents the use of `dependent: ...` in ActiveRecord models.
10
- class ActiveRecordDependent < RuboCop::Cop::Cop
11
- include ModelHelpers
12
-
13
- MSG = 'Do not use `dependent: to remove associated data, ' \
14
- 'use foreign keys with cascading deletes instead'
15
-
16
- METHOD_NAMES = [:has_many, :has_one, :belongs_to].freeze
17
-
18
- def on_send(node)
19
- return unless in_model?(node)
20
- return unless METHOD_NAMES.include?(node.children[1])
21
-
22
- node.children.last.each_node(:pair) do |pair|
23
- key_name = pair.children[0].children[0]
24
-
25
- add_offense(pair) if key_name == :dependent
26
- end
27
- end
28
- end
29
- end
30
- end
31
- end
32
- end
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative '../model_helpers'
4
-
5
- module Gitlab
6
- module Styles
7
- module Rubocop
8
- module Cop
9
- # Cop that prevents the use of `serialize` in ActiveRecord models.
10
- class ActiveRecordSerialize < RuboCop::Cop::Cop
11
- include ModelHelpers
12
-
13
- MSG = 'Do not store serialized data in the database, use separate columns and/or tables instead'
14
-
15
- def on_send(node)
16
- return unless in_model?(node)
17
-
18
- add_offense(node, location: :selector) if node.children[1] == :serialize
19
- end
20
- end
21
- end
22
- end
23
- end
24
- end