gitlab-styles 4.3.0 → 5.0.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
2
  SHA256:
3
- metadata.gz: 00dda1d4ea5cfd931d74ccf3def7dd6ed3552359c2519e7b6a73464cb3612b92
4
- data.tar.gz: 8fd90715af2921b22e53d241f12e4a546f8d53923a688028132af3e5e28f0349
3
+ metadata.gz: f34644596ecbfd782a8a8d5781251743cbe2f0ef079467416c4e15c784769693
4
+ data.tar.gz: 531fb802e1a50564fbbfad34e96f66b8a2227e6c182999750a39456f2ae17c98
5
5
  SHA512:
6
- metadata.gz: 58e29fee8c087356c272e72e9d3a8b719581e5f185ceed85d554a9ccb664654288373b2a6d1e4c1ba9587bfce4c2225960797e4c89e321688da8fa52d4a12b81
7
- data.tar.gz: a2c2f9843238a87f1af60f28beac5ec8c1ae5f1d236ab1554e88d07f95824e6474dda3b96ff5ec26a3219015c5415ea21824d41cc98d3cd06990b5ff55104097
6
+ metadata.gz: 9a4036572db91754b18045e0e9ec40d9747a633773c49fb3edcdc53d0ac8b6ae2743f94ffe5fc2ce6cc8a60a51216eb7b85c89dfb039f747370cca4831c9cc41
7
+ data.tar.gz: 78eb2aaec9c221dad33fb99c719c3ad838a39f4978381b2f99ef011f87c8c8ee67a24d9b6e26af2eea4d1b3a03e03e80aab5c2718afaa998764a3cf68d8153e4
@@ -0,0 +1,18 @@
1
+ # top-most EditorConfig file
2
+ root = true
3
+
4
+ # Unix-style newlines with a newline ending every file
5
+ [*]
6
+ end_of_line = lf
7
+ trim_trailing_whitespace = true
8
+ insert_final_newline = true
9
+
10
+ [*.{rb,yml}]
11
+ indent_size = 2
12
+
13
+ [*.{rb,yml,md}]
14
+ indent_style = space
15
+ charset = utf-8
16
+
17
+ [*.{md,markdown}]
18
+ trim_trailing_whitespace = false
data/Gemfile CHANGED
@@ -7,7 +7,7 @@ gemspec
7
7
 
8
8
  group :test do
9
9
  # Pin these dependencies, otherwise a new rule could break the CI pipelines
10
- gem 'rubocop', '0.82.0'
11
- gem 'rubocop-rspec', '1.36.0'
10
+ gem 'rubocop', '0.89.1'
11
+ gem 'rubocop-rspec', '1.44.1'
12
12
  gem 'rspec-parameterized', '0.4.2', require: false
13
13
  end
@@ -5,6 +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
9
  spec.name = 'gitlab-styles'
9
10
  spec.version = Gitlab::Styles::VERSION
10
11
  spec.authors = ['GitLab']
@@ -21,11 +22,11 @@ Gem::Specification.new do |spec|
21
22
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
23
  spec.require_paths = ['lib']
23
24
 
24
- spec.add_dependency 'rubocop', '~> 0.82.0'
25
+ spec.add_dependency 'rubocop', '~> 0.89.1'
25
26
  spec.add_dependency 'rubocop-gitlab-security', '~> 0.1.0'
26
- spec.add_dependency 'rubocop-performance', '~> 1.5.2'
27
- spec.add_dependency 'rubocop-rails', '~> 2.5'
28
- spec.add_dependency 'rubocop-rspec', '~> 1.36'
27
+ spec.add_dependency 'rubocop-performance', '~> 1.8.1'
28
+ spec.add_dependency 'rubocop-rails', '~> 2.8'
29
+ spec.add_dependency 'rubocop-rspec', '~> 1.44'
29
30
 
30
31
  spec.add_development_dependency 'bundler', '~> 1.16'
31
32
  spec.add_development_dependency 'rake', '~> 10.0'
@@ -8,6 +8,7 @@ require 'gitlab/styles/rubocop/cop/polymorphic_associations'
8
8
  require 'gitlab/styles/rubocop/cop/active_record_dependent'
9
9
  require 'gitlab/styles/rubocop/cop/in_batches'
10
10
  require 'gitlab/styles/rubocop/cop/line_break_after_guard_clauses'
11
+ require 'gitlab/styles/rubocop/cop/code_reuse/active_record'
11
12
  require 'gitlab/styles/rubocop/cop/migration/update_large_table'
12
13
  require 'gitlab/styles/rubocop/cop/without_reactive_cache'
13
14
  require 'gitlab/styles/rubocop/cop/rspec/single_line_hook'
@@ -0,0 +1,131 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Gitlab
4
+ module Styles
5
+ module Rubocop
6
+ module Cop
7
+ module CodeReuse
8
+ # Cop that denies the use of ActiveRecord methods outside of models.
9
+ class ActiveRecord < RuboCop::Cop::Cop
10
+ MSG = 'This method can only be used inside an ActiveRecord model: ' \
11
+ 'https://gitlab.com/gitlab-org/gitlab-foss/issues/49653'
12
+
13
+ # Various methods from ActiveRecord::Querying that are denied. We
14
+ # exclude some generic ones such as `any?` and `first`, as these may
15
+ # lead to too many false positives, since `Array` also supports these
16
+ # methods.
17
+ #
18
+ # The keys of this Hash are the denied method names. The values are
19
+ # booleans that indicate if the method should only be denied if any
20
+ # arguments are provided.
21
+ NOT_ALLOWED = {
22
+ average: true,
23
+ calculate: true,
24
+ count_by_sql: true,
25
+ create_with: true,
26
+ distinct: false,
27
+ eager_load: true,
28
+ exists?: true,
29
+ find_by: true,
30
+ find_by!: true,
31
+ find_by_sql: true,
32
+ find_each: true,
33
+ find_in_batches: true,
34
+ find_or_create_by: true,
35
+ find_or_create_by!: true,
36
+ find_or_initialize_by: true,
37
+ first!: false,
38
+ first_or_create: true,
39
+ first_or_create!: true,
40
+ first_or_initialize: true,
41
+ from: true,
42
+ group: true,
43
+ having: true,
44
+ ids: false,
45
+ includes: true,
46
+ joins: true,
47
+ limit: true,
48
+ lock: false,
49
+ many?: false,
50
+ offset: true,
51
+ order: true,
52
+ pluck: true,
53
+ preload: true,
54
+ readonly: false,
55
+ references: true,
56
+ reorder: true,
57
+ rewhere: true,
58
+ take: false,
59
+ take!: false,
60
+ unscope: false,
61
+ where: false,
62
+ with: true
63
+ }.freeze
64
+
65
+ def on_send(node)
66
+ receiver = node.children[0]
67
+ send_name = node.children[1]
68
+ first_arg = node.children[2]
69
+
70
+ return unless receiver && NOT_ALLOWED.key?(send_name)
71
+
72
+ # If the rule requires an argument to be given, but none are
73
+ # provided, we won't register an offense. This prevents us from
74
+ # adding offenses for `project.group`, while still covering
75
+ # `Project.group(:name)`.
76
+ return if NOT_ALLOWED[send_name] && !first_arg
77
+
78
+ add_offense(node, location: :selector)
79
+ end
80
+
81
+ # We can not auto correct code like this, as it requires manual
82
+ # refactoring. Instead, we'll just allow the surrounding scope.
83
+ #
84
+ # Despite this method's presence, you should not use it. This method
85
+ # exists to make it possible to allow large chunks of offenses we
86
+ # can't fix in the short term. If you are writing new code, follow the
87
+ # code reuse guidelines, instead of allowing any new offenses.
88
+ def autocorrect(node)
89
+ scope = surrounding_scope_of(node)
90
+ indent = indentation_of(scope)
91
+
92
+ lambda do |corrector|
93
+ # This prevents us from inserting the same enable/disable comment
94
+ # for a method or block that has multiple offenses.
95
+ next if allowed_scopes.include?(scope)
96
+
97
+ corrector.insert_before(
98
+ scope.source_range,
99
+ "# rubocop: disable #{cop_name}\n#{indent}"
100
+ )
101
+
102
+ corrector.insert_after(
103
+ scope.source_range,
104
+ "\n#{indent}# rubocop: enable #{cop_name}"
105
+ )
106
+
107
+ allowed_scopes << scope
108
+ end
109
+ end
110
+
111
+ def indentation_of(node)
112
+ ' ' * node.loc.expression.source_line[/\A */].length
113
+ end
114
+
115
+ def surrounding_scope_of(node)
116
+ %i[def defs block begin].each do |type|
117
+ if (found = node.each_ancestor(type).first)
118
+ return found
119
+ end
120
+ end
121
+ end
122
+
123
+ def allowed_scopes
124
+ @allowed_scopes ||= Set.new
125
+ end
126
+ end
127
+ end
128
+ end
129
+ end
130
+ end
131
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rubocop-rspec'
4
+ require_relative '../../rspec/helpers'
5
+
6
+ module Gitlab
7
+ module Styles
8
+ module Rubocop
9
+ module Cop
10
+ module RSpec
11
+ class Base < RuboCop::Cop::RSpec::Base
12
+ include Rubocop::Rspec::Helpers
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'rubocop-rspec'
4
+ require_relative 'base'
4
5
 
5
6
  module Gitlab
6
7
  module Styles
@@ -38,22 +39,21 @@ module Gitlab
38
39
  # let(:last_thing) { 'last thing' }
39
40
  # end
40
41
  #
41
- class EmptyLineAfterLetBlock < RuboCop::Cop::RSpec::Cop
42
- include RuboCop::RSpec::BlankLineSeparation
42
+ class EmptyLineAfterLetBlock < Base
43
+ extend RuboCop::Cop::AutoCorrector
44
+ include RuboCop::RSpec::EmptyLineSeparation
43
45
 
44
46
  MSG = 'Add an empty line after `%<let>s` block.'
45
47
 
46
- def_node_matcher :lets, Helpers::ALL.block_pattern
48
+ def_node_matcher :lets, LET.block_pattern
47
49
 
48
50
  def on_block(node)
49
51
  lets(node) do
50
52
  break if last_child?(node)
51
53
  next if node.single_line?
52
54
 
53
- missing_separating_line(node) do |location|
54
- add_offense(node,
55
- location: location,
56
- message: format(MSG, let: node.method_name))
55
+ missing_separating_line_offense(node) do |method|
56
+ format(MSG, let: method)
57
57
  end
58
58
  end
59
59
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'rubocop-rspec'
4
+ require_relative 'base'
4
5
 
5
6
  module Gitlab
6
7
  module Styles
@@ -38,8 +39,9 @@ module Gitlab
38
39
  # it_behaves_like 'does this'
39
40
  # end
40
41
  #
41
- class EmptyLineAfterSharedExample < RuboCop::Cop::RSpec::Cop
42
- include RuboCop::RSpec::BlankLineSeparation
42
+ class EmptyLineAfterSharedExample < Base
43
+ extend RuboCop::Cop::AutoCorrector
44
+ include RuboCop::RSpec::EmptyLineSeparation
43
45
 
44
46
  MSG = 'Add an empty line after `%<example>s` block.'
45
47
 
@@ -50,10 +52,8 @@ module Gitlab
50
52
  shared_examples(node) do
51
53
  break if last_child?(node)
52
54
 
53
- missing_separating_line(node) do |location|
54
- add_offense(node,
55
- location: location,
56
- message: format(MSG, example: node.method_name))
55
+ missing_separating_line_offense(node) do |method|
56
+ format(MSG, example: method)
57
57
  end
58
58
  end
59
59
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'rubocop-rspec'
4
+ require_relative 'base'
4
5
 
5
6
  module Gitlab
6
7
  module Styles
@@ -17,7 +18,9 @@ module Gitlab
17
18
  # # good
18
19
  # expect(page).to have_link('Link', href: 'https://example.com')
19
20
  # expect(page).to have_link('Example')
20
- class HaveLinkParameters < RuboCop::Cop::RSpec::Cop
21
+ class HaveLinkParameters < Base
22
+ extend RuboCop::Cop::AutoCorrector
23
+
21
24
  MESSAGE = "The second argument to `have_link` should be a Hash."
22
25
 
23
26
  def_node_matcher :unused_parameters?, <<~PATTERN
@@ -29,11 +32,13 @@ module Gitlab
29
32
  def on_send(node)
30
33
  return unless unused_parameters?(node)
31
34
 
32
- location = node.arguments[1..-1]
33
- .map(&:source_range)
34
- .reduce(:join)
35
+ location = node.arguments[1..]
36
+ .map(&:source_range)
37
+ .reduce(:join)
35
38
 
36
- add_offense(node, location: location, message: MESSAGE)
39
+ add_offense(location, message: MESSAGE) do |corrector|
40
+ corrector.insert_after(location.end, "\n")
41
+ end
37
42
  end
38
43
  end
39
44
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'rubocop-rspec'
4
+ require_relative 'base'
4
5
 
5
6
  module Gitlab
6
7
  module Styles
@@ -23,7 +24,7 @@ module Gitlab
23
24
  # after(:each) do
24
25
  # undo_something
25
26
  # end
26
- class SingleLineHook < RuboCop::Cop::RSpec::Cop
27
+ class SingleLineHook < Base
27
28
  MESSAGE = "Don't use single-line hook blocks."
28
29
 
29
30
  def_node_search :rspec_hook?, <<~PATTERN
@@ -34,7 +35,7 @@ module Gitlab
34
35
  return unless node.single_line?
35
36
  return unless rspec_hook?(node)
36
37
 
37
- add_offense(node, location: :expression, message: MESSAGE)
38
+ add_offense(node, message: MESSAGE)
38
39
  end
39
40
  end
40
41
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'rubocop-rspec'
4
+ require_relative 'base'
4
5
 
5
6
  module Gitlab
6
7
  module Styles
@@ -17,7 +18,9 @@ module Gitlab
17
18
  # # good
18
19
  # describe MyClass, :js do
19
20
  # end
20
- class VerboseIncludeMetadata < RuboCop::Cop::RSpec::Cop
21
+ class VerboseIncludeMetadata < Base
22
+ extend RuboCop::Cop::AutoCorrector
23
+
21
24
  MSG = 'Use `%s` instead of `%s`.'
22
25
 
23
26
  SELECTORS = %i[describe context feature example_group it specify example scenario its].freeze
@@ -37,25 +40,19 @@ module Gitlab
37
40
 
38
41
  def on_send(node)
39
42
  invalid_metadata_matches(node) do |match|
40
- add_offense(node, location: :expression, message: format(MSG, good(match), bad(match)))
41
- end
42
- end
43
-
44
- def autocorrect(node)
45
- lambda do |corrector|
46
- invalid_metadata_matches(node) do |match|
47
- corrector.replace(match.loc.expression, good(match))
43
+ add_offense(node, message: format(MSG, good(match), bad(match))) do |corrector|
44
+ invalid_metadata_matches(node) do |match|
45
+ corrector.replace(match.loc.expression, good(match))
46
+ end
48
47
  end
49
48
  end
50
49
  end
51
50
 
52
51
  private
53
52
 
54
- def invalid_metadata_matches(node)
53
+ def invalid_metadata_matches(node, &block)
55
54
  include_metadata(node) do |matches|
56
- matches.select(&method(:invalid_metadata?)).each do |match|
57
- yield match
58
- end
55
+ matches.select(&method(:invalid_metadata?)).each(&block)
59
56
  end
60
57
  end
61
58
 
@@ -7,7 +7,7 @@ module Gitlab
7
7
  # Returns true if the given node originated from the models directory.
8
8
  def in_model?(node)
9
9
  path = node.location.expression.source_buffer.name
10
- pwd = RuboCop::PathUtil.pwd
10
+ pwd = Dir.pwd
11
11
  models_path = File.join(pwd, 'app', 'models')
12
12
  ee_models_path = File.join(pwd, 'ee', 'app', 'models')
13
13
 
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rubocop-rspec'
4
+
5
+ module Gitlab
6
+ module Styles
7
+ module Rubocop
8
+ module Rspec
9
+ module Helpers
10
+ include RuboCop::RSpec::Language
11
+
12
+ LET = SelectorSet.new(%i[let_it_be]) + Helpers::ALL
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Gitlab
4
4
  module Styles
5
- VERSION = '4.3.0'
5
+ VERSION = '5.0.0'
6
6
  end
7
7
  end
@@ -1,3 +1,4 @@
1
+ ---
1
2
  AllCops:
2
3
  TargetRubyVersion: 2.6
3
4
  # Cop names are not displayed in offense messages by default. Change behavior
@@ -1,3 +1,4 @@
1
+ ---
1
2
  # Gems in consecutive lines should be alphabetically sorted
2
3
  Bundler/OrderedGems:
3
4
  Enabled: false
@@ -0,0 +1,24 @@
1
+ # Denies the use of ActiveRecord methods outside of configured
2
+ # excluded directories
3
+ # Directories that allow the use of the denied methods.
4
+ # To start we provide a default configuration that matches
5
+ # a standard Rails app and enable.
6
+ # The default configuration can be overridden by
7
+ # providing your own Exclusion list as follows:
8
+ # CodeReuse/ActiveRecord:
9
+ # Enabled: true
10
+ # Exclude:
11
+ # - app/models/**/*.rb
12
+ # - config/**/*.rb
13
+ # - db/**/*.rb
14
+ # - lib/tasks/**/*.rb
15
+ # - spec/**/*.rb
16
+ # - lib/gitlab/**/*.rb
17
+ CodeReuse/ActiveRecord:
18
+ Enabled: true
19
+ Exclude:
20
+ - app/models/**/*.rb
21
+ - config/**/*.rb
22
+ - db/**/*.rb
23
+ - lib/tasks/**/*.rb
24
+ - spec/**/*.rb
@@ -1,3 +1,4 @@
1
+ ---
1
2
  require:
2
3
  - rubocop-gitlab-security
3
4
  - rubocop-performance
@@ -1,3 +1,4 @@
1
+ ---
1
2
  # Dependencies in the gemspec should be alphabetically sorted
2
3
  # Configuration parameters: Include, TreatCommentsAsGroupSeparators.
3
4
  Gemspec/OrderedDependencies:
@@ -1,3 +1,4 @@
1
+ ---
1
2
  # Check indentation of private/protected visibility modifiers.
2
3
  Layout/AccessModifierIndentation:
3
4
  Enabled: true
@@ -60,6 +61,11 @@ Layout/EmptyLines:
60
61
  Layout/EmptyLinesAroundAccessModifier:
61
62
  Enabled: true
62
63
 
64
+ # Checks for a newline after an attribute accessor or a group of them
65
+ # https://docs.rubocop.org/rubocop/0.89/cops_layout.html#layoutemptylinesaroundattributeaccessor
66
+ Layout/EmptyLinesAroundAttributeAccessor:
67
+ Enabled: true
68
+
63
69
  # Keeps track of empty lines around block bodies.
64
70
  Layout/EmptyLinesAroundBlockBody:
65
71
  Enabled: true
@@ -1,3 +1,4 @@
1
+ ---
1
2
  # Checks for ambiguous block association with method when param passed without
2
3
  # parentheses.
3
4
  Lint/AmbiguousBlockAssociation:
@@ -18,6 +19,10 @@ Lint/AmbiguousRegexpLiteral:
18
19
  Lint/AssignmentInCondition:
19
20
  Enabled: false
20
21
 
22
+ # Checks for places where binary operator has identical operands
23
+ Lint/BinaryOperatorWithIdenticalOperands:
24
+ Enabled: true
25
+
21
26
  # Default values in optional keyword arguments and optional ordinal arguments
22
27
  # should not refer back to the name of the argument.
23
28
  Lint/CircularArgumentReference:
@@ -31,6 +36,22 @@ Lint/Debugger:
31
36
  Lint/DeprecatedClassMethods:
32
37
  Enabled: true
33
38
 
39
+ # Algorithmic constants for OpenSSL::Cipher and OpenSSL::Digest deprecated since OpenSSL version 2.2.0.
40
+ # Prefer passing a string instead.
41
+ # https://docs.rubocop.org/rubocop/0.89/cops_lint.html#lintdeprecatedopensslconstant
42
+ Lint/DeprecatedOpenSSLConstant:
43
+ Enabled: true
44
+
45
+ # Checks that there are no repeated conditions used in if 'elsif'.
46
+ # https://docs.rubocop.org/rubocop/0.89/cops_lint.html#lintduplicateelsifcondition
47
+ Lint/DuplicateElsifCondition:
48
+ Enabled: true
49
+
50
+ # Checks that there are no repeated exceptions used in 'rescue' expressions.
51
+ # https://docs.rubocop.org/rubocop/0.89/cops_lint.html#lintduplicaterescueexception
52
+ Lint/DuplicateRescueException:
53
+ Enabled: true
54
+
34
55
  # Check for immutable argument given to each_with_object.
35
56
  Lint/EachWithObjectArgument:
36
57
  Enabled: true
@@ -39,6 +60,11 @@ Lint/EachWithObjectArgument:
39
60
  Lint/ElseLayout:
40
61
  Enabled: true
41
62
 
63
+ # Checks for the presence of if, elsif and unless branches without a body.
64
+ # https://docs.rubocop.org/rubocop/0.89/cops_lint.html#lintemptyconditionalbody
65
+ Lint/EmptyConditionalBody:
66
+ Enabled: true
67
+
42
68
  # Checks for empty ensure block.
43
69
  Lint/EmptyEnsure:
44
70
  Enabled: true
@@ -55,6 +81,11 @@ Lint/EnsureReturn:
55
81
  Lint/FlipFlop:
56
82
  Enabled: true
57
83
 
84
+ # Checks for the presence of precise comparison of floating point numbers.
85
+ # https://docs.rubocop.org/rubocop/0.89/cops_lint.html#lintfloatcomparison
86
+ Lint/FloatComparison:
87
+ Enabled: true
88
+
58
89
  # Catches floating-point literals too large or small for Ruby to represent.
59
90
  Lint/FloatOutOfRange:
60
91
  Enabled: true
@@ -81,10 +112,21 @@ Lint/LiteralAsCondition:
81
112
  Lint/LiteralInInterpolation:
82
113
  Enabled: true
83
114
 
84
- # This cop checks for uses of *begin...end while/until something*.
115
+ # Checks for uses of *begin...end while/until something*.
85
116
  Lint/Loop:
86
117
  Enabled: false
87
118
 
119
+ # Checks for the presence of constructors and lifecycle callbacks without calls to super.
120
+ # https://docs.rubocop.org/rubocop/0.89/cops_lint.html#lintmissingsuper
121
+ Lint/MissingSuper:
122
+ Enabled: false
123
+
124
+ # Do not mix named captures and numbered captures in a Regexp literal
125
+ # because numbered capture is ignored if they’re mixed.
126
+ # https://docs.rubocop.org/rubocop/0.89/cops_lint.html#lintmixedregexpcapturetypes
127
+ Lint/MixedRegexpCaptureTypes:
128
+ Enabled: true
129
+
88
130
  # Do not use nested method definitions.
89
131
  Lint/NestedMethodDefinition:
90
132
  Enabled: true
@@ -93,6 +135,11 @@ Lint/NestedMethodDefinition:
93
135
  Lint/NextWithoutAccumulator:
94
136
  Enabled: true
95
137
 
138
+ # Looks for references of Regexp captures that are out of range and thus always returns nil.
139
+ # https://docs.rubocop.org/rubocop/0.89/cops_lint.html#lintoutofrangeregexpref
140
+ Lint/OutOfRangeRegexpRef:
141
+ Enabled: true
142
+
96
143
  # Checks for method calls with a space before the opening parenthesis.
97
144
  Lint/ParenthesesAsGroupedExpression:
98
145
  Enabled: true
@@ -126,6 +173,11 @@ Lint/RescueException:
126
173
  Lint/SafeNavigationWithEmpty:
127
174
  Enabled: true
128
175
 
176
+ # Checks for self-assignments.
177
+ # https://docs.rubocop.org/rubocop/0.89/cops_lint.html#lintselfassignment
178
+ Lint/SelfAssignment:
179
+ Enabled: true
180
+
129
181
  # Checks for the order which exceptions are rescued to avoid rescueing a less specific exception before a more specific exception.
130
182
  Lint/ShadowedException:
131
183
  Enabled: false
@@ -143,6 +195,11 @@ Lint/StructNewOverride:
143
195
  Lint/SuppressedException:
144
196
  Enabled: false
145
197
 
198
+ # Checks for top level return with arguments.
199
+ # https://docs.rubocop.org/rubocop/0.89/cops_lint.html#linttoplevelreturnwithargument
200
+ Lint/TopLevelReturnWithArgument:
201
+ Enabled: true
202
+
146
203
  # Do not use prefix `_` for a variable that is used.
147
204
  Lint/UnderscorePrefixedVariableName:
148
205
  Enabled: true
@@ -155,6 +212,11 @@ Lint/UnifiedInteger:
155
212
  Lint/UnreachableCode:
156
213
  Enabled: true
157
214
 
215
+ # Checks for loops that will have at most one iteration.
216
+ # https://docs.rubocop.org/rubocop/0.89/cops_lint.html#lintunreachableloop
217
+ Lint/UnreachableLoop:
218
+ Enabled: true
219
+
158
220
  # This cop checks for unused block arguments.
159
221
  Lint/UnusedBlockArgument:
160
222
  Enabled: false
@@ -172,10 +234,6 @@ Lint/UselessAccessModifier:
172
234
  Lint/UselessAssignment:
173
235
  Enabled: true
174
236
 
175
- # Checks for comparison of something with itself.
176
- Lint/UselessComparison:
177
- Enabled: true
178
-
179
237
  # Checks for useless `else` in `begin..end` without `rescue`.
180
238
  Lint/UselessElseWithoutRescue:
181
239
  Enabled: true
@@ -1,3 +1,4 @@
1
+ ---
1
2
  # A calculated magnitude based on number of assignments,
2
3
  # branches, and conditions.
3
4
  Metrics/AbcSize:
@@ -1,3 +1,4 @@
1
+ ---
1
2
  # Checks for methods that may lead to batch type issues on a table that's been
2
3
  # explicitly denied because of its size.
3
4
  #
@@ -1,3 +1,4 @@
1
+ ---
1
2
  # Check the naming of accessor methods for get_/set_.
2
3
  Naming/AccessorMethodName:
3
4
  Enabled: false
@@ -1,3 +1,15 @@
1
+ ---
2
+ # Used to identify usages of ancestors.include? and change them to use ⇐ instead.
3
+ # https://docs.rubocop.org/rubocop-performance/1.8/cops_performance.html#performanceancestorsinclude
4
+ Performance/AncestorsInclude:
5
+ Enabled: true
6
+
7
+ # Identifies places where numeric argument to BigDecimal should be converted to string.
8
+ # Initializing from String is faster than from Numeric for BigDecimal.
9
+ # https://docs.rubocop.org/rubocop-performance/1.8/cops_performance.html#performancebigdecimalwithnumericargument
10
+ Performance/BigDecimalWithNumericArgument:
11
+ Enabled: true
12
+
1
13
  # Use `caller(n..n)` instead of `caller`.
2
14
  Performance/Caller:
3
15
  Enabled: false
@@ -31,17 +43,53 @@ Performance/RedundantMerge:
31
43
  Enabled: true
32
44
  MaxKeyValuePairs: 1
33
45
 
46
+ # Identifies places where sort { |a, b| a <=> b } can be replaced with sort.
47
+ # https://docs.rubocop.org/rubocop-performance/1.7/cops_performance.html#performanceredundantsortblock
48
+ Performance/RedundantSortBlock:
49
+ Enabled: true
50
+
51
+ # Checks for redundant String#chars.
52
+ # https://docs.rubocop.org/rubocop-performance/1.8/cops_performance.html#performanceredundantstringchars
53
+ Performance/RedundantStringChars:
54
+ Enabled: true
55
+
56
+ # Identifies places where reverse.first(n) and reverse.first can be replaced by last(n).reverse and last.
57
+ # https://docs.rubocop.org/rubocop-performance/1.8/cops_performance.html#performancereversefirst
58
+ Performance/ReverseFirst:
59
+ Enabled: true
60
+
61
+ # Identifies places where sort { |a, b| b <=> a } can be replaced by a faster sort.reverse.
62
+ # https://docs.rubocop.org/rubocop-performance/1.8/cops_performance.html#performancesortreverse
63
+ Performance/SortReverse:
64
+ Enabled: true
65
+
66
+ # Identifies places where gsub(/a+/, 'a') and gsub!(/a+/, 'a') can be replaced by squeeze('a') and squeeze!('a').
67
+ # https://docs.rubocop.org/rubocop-performance/1.8/cops_performance.html#performancesqueeze
68
+ Performance/Squeeze:
69
+ Enabled: true
70
+
34
71
  # Use `start_with?` instead of a regex match anchored to the beginning of a
35
72
  # string.
36
73
  Performance/StartWith:
37
74
  Enabled: true
38
75
 
76
+ # Identifies unnecessary use of a regex where String#include? would suffice.
77
+ # https://docs.rubocop.org/rubocop-performance/1.8/cops_performance.html#performancestringinclude
78
+ Performance/StringInclude:
79
+ Enabled: true
80
+
39
81
  # Use `tr` instead of `gsub` when you are replacing the same number of
40
82
  # characters. Use `delete` instead of `gsub` when you are deleting
41
83
  # characters.
42
84
  Performance/StringReplacement:
43
85
  Enabled: true
44
86
 
87
+ # Identifies places where custom code finding the sum of elements in some
88
+ # Enumerable object can be replaced by Enumerable#sum method.
89
+ # https://docs.rubocop.org/rubocop-performance/1.8/cops_performance.html#performancesum
90
+ Performance/Sum:
91
+ Enabled: true
92
+
45
93
  # Checks for `.times.map` calls.
46
94
  Performance/TimesMap:
47
95
  Enabled: true
@@ -1,3 +1,4 @@
1
+ ---
1
2
  # Enables Rails cops.
2
3
  Rails:
3
4
  Enabled: true
@@ -7,6 +8,18 @@ Rails/ActionFilter:
7
8
  Enabled: true
8
9
  EnforcedStyle: action
9
10
 
11
+ # Checks that Active Record callbacks are declared in the order in which they will be executed.
12
+ # https://docs.rubocop.org/rubocop-rails/2.8/cops_rails.html#railsactiverecordcallbacksorder
13
+ Rails/ActiveRecordCallbacksOrder:
14
+ Enabled: true
15
+
16
+ # Enforces that there is only one call to after_commit
17
+ # (and its aliases - after_create_commit, after_update_commit, and after_destroy_commit)
18
+ # with the same callback name per model.
19
+ # https://docs.rubocop.org/rubocop-rails/2.8/cops_rails.html#railsaftercommitoverride
20
+ Rails/AfterCommitOverride:
21
+ Enabled: true
22
+
10
23
  # Check that models subclass ApplicationRecord.
11
24
  Rails/ApplicationRecord:
12
25
  Enabled: false
@@ -43,6 +56,12 @@ Rails/FindBy:
43
56
  - 'app/**/*.rb'
44
57
  - 'lib/**/*.rb'
45
58
 
59
+ # Enforces that ActiveRecord#find is used instead of where.take!, find_by!, and find_by_id!
60
+ # to retrieve a single record by primary key when you expect it to be found.
61
+ # https://docs.rubocop.org/rubocop-rails/2.8/cops_rails.html#railsfindbyid
62
+ Rails/FindById:
63
+ Enabled: true
64
+
46
65
  # Prefer `all.find_each` over `all.find`.
47
66
  Rails/FindEach:
48
67
  Enabled: true
@@ -57,6 +76,26 @@ Rails/HasAndBelongsToMany:
57
76
  Rails/HttpPositionalArguments:
58
77
  Enabled: true
59
78
 
79
+ # Checks that Active Support’s inquiry method is not used.
80
+ # https://docs.rubocop.org/rubocop-rails/2.8/cops_rails.html#railsinquiry
81
+ Rails/Inquiry:
82
+ Enabled: true
83
+
84
+ # Enforces that mailer names end with Mailer suffix.
85
+ # https://docs.rubocop.org/rubocop-rails/2.8/cops_rails.html#railsmailername
86
+ Rails/MailerName:
87
+ Enabled: true
88
+
89
+ # Identifies places where defining routes with match can be replaced with a specific HTTP method.
90
+ # https://docs.rubocop.org/rubocop-rails/2.8/cops_rails.html#railsmatchroute
91
+ Rails/MatchRoute:
92
+ Enabled: true
93
+
94
+ # Enforces the use of collection.exclude?(obj) over !collection.include?(obj).
95
+ # https://docs.rubocop.org/rubocop-rails/2.8/cops_rails.html#railsnegateinclude
96
+ Rails/NegateInclude:
97
+ Enabled: true
98
+
60
99
  # Checks for calls to puts, print, etc.
61
100
  Rails/Output:
62
101
  Enabled: true
@@ -71,6 +110,16 @@ Rails/Output:
71
110
  Rails/OutputSafety:
72
111
  Enabled: false
73
112
 
113
+ # Enforces the use of pluck over map.
114
+ # https://docs.rubocop.org/rubocop-rails/2.8/cops_rails.html#railspluck
115
+ Rails/Pluck:
116
+ Enabled: true
117
+
118
+ # Identifies places where pluck is used in where query methods and can be replaced with select.
119
+ # https://docs.rubocop.org/rubocop-rails/2.8/cops_rails.html#railspluckinwhere
120
+ Rails/PluckInWhere:
121
+ Enabled: true
122
+
74
123
  # Checks for incorrect grammar when using methods like `3.day.ago`.
75
124
  Rails/PluralizationGrammar:
76
125
  Enabled: true
@@ -87,10 +136,30 @@ Rails/ReadWriteAttribute:
87
136
  Rails/RelativeDateConstant:
88
137
  Enabled: false
89
138
 
139
+ # Looks for inline rendering within controller actions.
140
+ # https://docs.rubocop.org/rubocop-rails/2.8/cops_rails.html#railsrenderinline
141
+ Rails/RenderInline:
142
+ Enabled: true
143
+
144
+ # Identifies places where render text: can be replaced with render plain:.
145
+ # https://docs.rubocop.org/rubocop-rails/2.8/cops_rails.html#railsrenderplaintext
146
+ Rails/RenderPlainText:
147
+ Enabled: true
148
+
90
149
  # Checks the arguments of ActiveRecord scopes.
91
150
  Rails/ScopeArgs:
92
151
  Enabled: true
93
152
 
153
+ # Enforces that short forms of I18n methods are used: t instead of translate and l instead of localize.
154
+ # https://docs.rubocop.org/rubocop-rails/2.8/cops_rails.html#railsshorti18n
155
+ Rails/ShortI18n:
156
+ Enabled: true
157
+
158
+ # Checks SQL heredocs to use .squish.
159
+ # https://docs.rubocop.org/rubocop-rails/2.8/cops_rails.html#railssquishedsqlheredocs
160
+ Rails/SquishedSQLHeredocs:
161
+ Enabled: true
162
+
94
163
  # This cop checks for the use of Time methods without zone.
95
164
  Rails/TimeZone:
96
165
  Enabled: false
@@ -98,3 +167,13 @@ Rails/TimeZone:
98
167
  # This cop checks for the use of old-style attribute validation macros.
99
168
  Rails/Validation:
100
169
  Enabled: true
170
+
171
+ # Enforces consistent style when using exists?.
172
+ # https://docs.rubocop.org/rubocop-rails/2.8/cops_rails.html#railswhereexists
173
+ Rails/WhereExists:
174
+ Enabled: true
175
+
176
+ # Identifies places where manually constructed SQL in where can be replaced with where.not(...).
177
+ # https://docs.rubocop.org/rubocop-rails/2.8/cops_rails.html#railswherenot
178
+ Rails/WhereNot:
179
+ Enabled: true
@@ -1,3 +1,4 @@
1
+ ---
1
2
  # Check that instances are not being stubbed globally.
2
3
  RSpec/AnyInstance:
3
4
  Enabled: false
@@ -142,6 +143,11 @@ RSpec/SingleLineHook:
142
143
  - 'spec/factories/*'
143
144
  - 'spec/requests/api/v3/*'
144
145
 
146
+ # Checks that message expectations do not have a configured response.
147
+ # https://docs.rubocop.org/rubocop-rspec/1.44/cops_rspec.html#rspecstubbedmock
148
+ RSpec/StubbedMock:
149
+ Enabled: false
150
+
145
151
  # Checks for stubbed test subjects.
146
152
  RSpec/SubjectStub:
147
153
  Enabled: false
@@ -1,3 +1,4 @@
1
+ ---
1
2
  # This cop checks for the use of JSON class methods which have potential
2
3
  # security issues.
3
4
  Security/JSONLoad:
@@ -1,3 +1,9 @@
1
+ ---
2
+ # Checks for grouping of accessors in class and module bodies.
3
+ # https://docs.rubocop.org/rubocop/0.89/cops_style.html#styleaccessorgrouping
4
+ Style/AccessorGrouping:
5
+ Enabled: true
6
+
1
7
  # Use alias_method instead of alias.
2
8
  Style/Alias:
3
9
  EnforcedStyle: prefer_alias_method
@@ -8,6 +14,11 @@ Style/Alias:
8
14
  Style/AndOr:
9
15
  Enabled: true
10
16
 
17
+ # Enforces the use of Array() instead of explicit Array check or [*var]
18
+ # https://docs.rubocop.org/rubocop/0.89/cops_style.html#stylearraycoercion
19
+ Style/ArrayCoercion:
20
+ Enabled: true
21
+
11
22
  # Use `Array#join` instead of `Array#*`.
12
23
  Style/ArrayJoin:
13
24
  Enabled: true
@@ -24,6 +35,11 @@ Style/Attr:
24
35
  Style/BeginBlock:
25
36
  Enabled: true
26
37
 
38
+ # Checks for places where attr_reader and attr_writer for the same method can be combined into single attr_accessor.
39
+ # https://docs.rubocop.org/rubocop/0.89/cops_style.html#stylebisectedattraccessor
40
+ Style/BisectedAttrAccessor:
41
+ Enabled: true
42
+
27
43
  # Do not use block comments.
28
44
  Style/BlockComments:
29
45
  Enabled: true
@@ -33,10 +49,15 @@ Style/BlockComments:
33
49
  Style/BlockDelimiters:
34
50
  Enabled: true
35
51
 
36
- # This cop checks for uses of the case equality operator(===).
52
+ # Checks for uses of the case equality operator(===).
37
53
  Style/CaseEquality:
38
54
  Enabled: false
39
55
 
56
+ # Identifies places where if-elsif constructions can be replaced with case-when.
57
+ # https://docs.rubocop.org/rubocop/0.89/cops_style.html#stylecaselikeif
58
+ Style/CaseLikeIf:
59
+ Enabled: true
60
+
40
61
  # Checks for uses of character literals.
41
62
  Style/CharacterLiteral:
42
63
  Enabled: true
@@ -95,6 +116,12 @@ Style/EndBlock:
95
116
  Style/EvenOdd:
96
117
  Enabled: true
97
118
 
119
+ # Enforces the use of explicit block argument to avoid writing block literal that
120
+ # just passes its arguments to another block.
121
+ # https://docs.rubocop.org/rubocop/0.89/cops_style.html#styleexplicitblockargument
122
+ Style/ExplicitBlockArgument:
123
+ Enabled: true
124
+
98
125
  # Enforces consistency when using exponential notation for numbers in the code
99
126
  Style/ExponentialNotation:
100
127
  Enabled: true
@@ -111,6 +138,13 @@ Style/FormatStringToken:
111
138
  Style/FrozenStringLiteralComment:
112
139
  Enabled: true
113
140
 
141
+ # Enforces the use of $stdout/$stderr/$stdin instead of STDOUT/STDERR/STDIN. STDOUT/STDERR/STDIN are constants,
142
+ # and while you can actually reassign (possibly to redirect some stream) constants in Ruby,
143
+ # you’ll get an interpreter warning if you do so.
144
+ # https://docs.rubocop.org/rubocop/0.89/cops_style.html#styleglobalstdstream
145
+ Style/GlobalStdStream:
146
+ Enabled: true
147
+
114
148
  # Do not introduce global variables.
115
149
  Style/GlobalVars:
116
150
  Enabled: true
@@ -118,10 +152,20 @@ Style/GlobalVars:
118
152
  - 'lib/backup/**/*'
119
153
  - 'lib/tasks/**/*'
120
154
 
155
+ # Checks for presence or absence of braces around hash literal as a last array item depending on configuration.
156
+ # https://docs.rubocop.org/rubocop/0.89/cops_style.html#stylehashaslastarrayitem
157
+ Style/HashAsLastArrayItem:
158
+ Enabled: true
159
+
121
160
  # Checks for uses of each_key and each_value Hash methods.
122
161
  Style/HashEachMethods:
123
162
  Enabled: true
124
163
 
164
+ # Checks for places where case-when represents a simple 1:1 mapping and can be replaced with a hash lookup.
165
+ # https://docs.rubocop.org/rubocop/0.89/cops_style.html#stylehashlikecase
166
+ Style/HashLikeCase:
167
+ Enabled: false
168
+
125
169
  # Prefer Ruby 1.9 hash syntax `{ a: 1, b: 2 }`
126
170
  # over 1.8 syntax `{ :a => 1, :b => 2 }`.
127
171
  Style/HashSyntax:
@@ -161,6 +205,11 @@ Style/InverseMethods:
161
205
  Style/LambdaCall:
162
206
  Enabled: true
163
207
 
208
+ # Checks for places where keyword arguments can be used instead of boolean arguments when defining methods.
209
+ # https://docs.rubocop.org/rubocop/0.89/cops_style.html#styleoptionalbooleanparameter
210
+ Style/OptionalBooleanParameter:
211
+ Enabled: false
212
+
164
213
  # Use `strip` instead of `lstrip.rstrip`.
165
214
  Style/Strip:
166
215
  Enabled: true
@@ -248,10 +297,25 @@ Style/PreferredHashMethods:
248
297
  Style/RedundantCapitalW:
249
298
  Enabled: true
250
299
 
300
+ # Checks for redundant assignment before returning.
301
+ # https://docs.rubocop.org/rubocop/0.89/cops_style.html#styleredundantassignment
302
+ Style/RedundantAssignment:
303
+ Enabled: true
304
+
251
305
  # Checks for an obsolete RuntimeException argument in raise/fail.
252
306
  Style/RedundantException:
253
307
  Enabled: true
254
308
 
309
+ # Identifies places where fetch(key) { value } can be replaced by fetch(key, value).
310
+ # https://docs.rubocop.org/rubocop/0.89/cops_style.html#styleredundantfetchblock
311
+ Style/RedundantFetchBlock:
312
+ Enabled: true
313
+
314
+ # Checks for the presence of superfluous .rb extension in the filename provided to require and require_relative.
315
+ # https://docs.rubocop.org/rubocop/0.89/cops_style.html#styleredundantfileextensioninrequire
316
+ Style/RedundantFileExtensionInRequire:
317
+ Enabled: true
318
+
255
319
  # Checks for parentheses that seem not to serve any purpose.
256
320
  Style/RedundantParentheses:
257
321
  Enabled: true
@@ -260,6 +324,16 @@ Style/RedundantParentheses:
260
324
  Style/RedundantPercentQ:
261
325
  Enabled: false
262
326
 
327
+ # Checks for unnecessary single-element Regexp character classes.
328
+ # https://docs.rubocop.org/rubocop/0.89/cops_style.html#styleredundantregexpcharacterclass
329
+ Style/RedundantRegexpCharacterClass:
330
+ Enabled: true
331
+
332
+ # Checks for redundant escapes inside Regexp literals.
333
+ # https://docs.rubocop.org/rubocop/0.89/cops_style.html#styleredundantregexpescape
334
+ Style/RedundantRegexpEscape:
335
+ Enabled: true
336
+
263
337
  # Use `sort` instead of `sort_by { |x| x }`.
264
338
  Style/RedundantSortBy:
265
339
  Enabled: true
@@ -268,16 +342,31 @@ Style/RedundantSortBy:
268
342
  Style/Semicolon:
269
343
  Enabled: true
270
344
 
345
+ # Sometimes using dig method ends up with just a single argument. In such cases, dig should be replaced with [].
346
+ # https://docs.rubocop.org/rubocop/0.89/cops_style.html#stylesingleargumentdig
347
+ Style/SingleArgumentDig:
348
+ Enabled: true
349
+
271
350
  # Checks for proper usage of fail and raise.
272
351
  Style/SignalException:
273
352
  EnforcedStyle: only_raise
274
353
  Enabled: true
275
354
 
355
+ # Checks that arrays are sliced with endless ranges instead of ary[start..-1] on Ruby 2.6+.
356
+ # https://docs.rubocop.org/rubocop/0.89/cops_style.html#styleslicingwithrange
357
+ Style/SlicingWithRange:
358
+ Enabled: true
359
+
276
360
  # Check for the usage of parentheses around stabby lambda arguments.
277
361
  Style/StabbyLambdaParentheses:
278
362
  EnforcedStyle: require_parentheses
279
363
  Enabled: true
280
364
 
365
+ # Checks for places where string concatenation can be replaced with string interpolation.
366
+ # https://docs.rubocop.org/rubocop/0.89/cops_style.html#stylestringconcatenation
367
+ Style/StringConcatenation:
368
+ Enabled: true
369
+
281
370
  # Checks if uses of quotes match the configured preference.
282
371
  Style/StringLiterals:
283
372
  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: 4.3.0
4
+ version: 5.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: 2020-07-07 00:00:00.000000000 Z
11
+ date: 2020-10-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubocop
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.82.0
19
+ version: 0.89.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: 0.82.0
26
+ version: 0.89.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rubocop-gitlab-security
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -44,42 +44,42 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 1.5.2
47
+ version: 1.8.1
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 1.5.2
54
+ version: 1.8.1
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rubocop-rails
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '2.5'
61
+ version: '2.8'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '2.5'
68
+ version: '2.8'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rubocop-rspec
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '1.36'
75
+ version: '1.44'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '1.36'
82
+ version: '1.44'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: bundler
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -129,6 +129,7 @@ executables: []
129
129
  extensions: []
130
130
  extra_rdoc_files: []
131
131
  files:
132
+ - ".editorconfig"
132
133
  - ".gitignore"
133
134
  - ".gitlab-ci.yml"
134
135
  - ".gitlab/merge_request_templates/Release.md"
@@ -148,6 +149,7 @@ files:
148
149
  - lib/gitlab/styles/rubocop.rb
149
150
  - lib/gitlab/styles/rubocop/cop/active_record_dependent.rb
150
151
  - lib/gitlab/styles/rubocop/cop/active_record_serialize.rb
152
+ - lib/gitlab/styles/rubocop/cop/code_reuse/active_record.rb
151
153
  - lib/gitlab/styles/rubocop/cop/custom_error_class.rb
152
154
  - lib/gitlab/styles/rubocop/cop/gem_fetcher.rb
153
155
  - lib/gitlab/styles/rubocop/cop/in_batches.rb
@@ -155,6 +157,7 @@ files:
155
157
  - lib/gitlab/styles/rubocop/cop/migration/update_large_table.rb
156
158
  - lib/gitlab/styles/rubocop/cop/polymorphic_associations.rb
157
159
  - lib/gitlab/styles/rubocop/cop/redirect_with_status.rb
160
+ - lib/gitlab/styles/rubocop/cop/rspec/base.rb
158
161
  - lib/gitlab/styles/rubocop/cop/rspec/empty_line_after_let_block.rb
159
162
  - lib/gitlab/styles/rubocop/cop/rspec/empty_line_after_shared_example.rb
160
163
  - lib/gitlab/styles/rubocop/cop/rspec/have_link_parameters.rb
@@ -163,9 +166,11 @@ files:
163
166
  - lib/gitlab/styles/rubocop/cop/without_reactive_cache.rb
164
167
  - lib/gitlab/styles/rubocop/migration_helpers.rb
165
168
  - lib/gitlab/styles/rubocop/model_helpers.rb
169
+ - lib/gitlab/styles/rubocop/rspec/helpers.rb
166
170
  - lib/gitlab/styles/version.rb
167
171
  - rubocop-all.yml
168
172
  - rubocop-bundler.yml
173
+ - rubocop-code_reuse.yml
169
174
  - rubocop-default.yml
170
175
  - rubocop-gemspec.yml
171
176
  - rubocop-layout.yml
@@ -190,7 +195,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
190
195
  requirements:
191
196
  - - ">="
192
197
  - !ruby/object:Gem::Version
193
- version: '0'
198
+ version: '2.6'
194
199
  required_rubygems_version: !ruby/object:Gem::Requirement
195
200
  requirements:
196
201
  - - ">="