gitlab-styles 5.0.0 → 6.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f34644596ecbfd782a8a8d5781251743cbe2f0ef079467416c4e15c784769693
4
- data.tar.gz: 531fb802e1a50564fbbfad34e96f66b8a2227e6c182999750a39456f2ae17c98
3
+ metadata.gz: 88825b6aaa4961f16a29bfc14cdb1d590700a74e81fe68e072fccd2046506c6b
4
+ data.tar.gz: 5634afcb51a117e54f4760c43f12d3b2564d08b62bbcd49d97b7cde7c88014d6
5
5
  SHA512:
6
- metadata.gz: 9a4036572db91754b18045e0e9ec40d9747a633773c49fb3edcdc53d0ac8b6ae2743f94ffe5fc2ce6cc8a60a51216eb7b85c89dfb039f747370cca4831c9cc41
7
- data.tar.gz: 78eb2aaec9c221dad33fb99c719c3ad838a39f4978381b2f99ef011f87c8c8ee67a24d9b6e26af2eea4d1b3a03e03e80aab5c2718afaa998764a3cf68d8153e4
6
+ metadata.gz: 99652ceb45ae8e31ac3105bd7913a2c85e0a5a22cd97ad5d30081fd1b55b4d1734671d9cdbfdf1875dbdbc314efb9fe433b8859a18761ebea1d1054f58aa88d1
7
+ data.tar.gz: 2b16d7dc347ec66fd1656d735bc6427c485c88e27d7fb3030e0a852d76fb338705a976e85fb949b25b3994035134251da3771a9f3c914767d6d7158ecf5137e4
@@ -1,9 +1,9 @@
1
1
  stages:
2
- - release
3
2
  - test
3
+ - deploy
4
4
 
5
5
  default:
6
- image: ruby:2.6
6
+ image: ruby:2.7
7
7
  tags:
8
8
  - gitlab-org
9
9
  before_script:
@@ -29,17 +29,6 @@ specs:
29
29
  script:
30
30
  - bundle exec rspec
31
31
 
32
- release:
33
- stage: release
34
- rules:
35
- - if: '$CI_COMMIT_TAG'
36
- script:
37
- - gem update --system
38
- - ruby --version
39
- - gem env version
40
- - gem build gitlab-styles.gemspec
41
- - gem push gitlab-styles*.gem
42
- artifacts:
43
- paths:
44
- - gitlab-styles*.gem
45
- expire_in: 30 days
32
+ include:
33
+ - project: 'gitlab-org/quality/pipeline-common'
34
+ file: '/ci/gem-release.yml'
@@ -0,0 +1,21 @@
1
+ ## Description of the proposal
2
+
3
+ <!--
4
+ Please describe the proposal and add a link to the source (for example, http://www.betterspecs.org/).
5
+ -->
6
+
7
+ ### Check-list
8
+
9
+ - [ ] Mention this proposal in the relevant Slack channels (e.g. `#development`, `#backend`, `#frontend`)
10
+ - [ ] If there is a choice to make between two potential styles, set up an emoji vote in the MR:
11
+ - CHOICE_A: :a:
12
+ - CHOICE_B: :b:
13
+ - Vote yourself for both choices so that people know these are the choices
14
+ - [ ] The MR doesn't have significant objections, and is getting a majority of :+1: vs :-1: (remember that [we don't need to reach a consensus](https://about.gitlab.com/handbook/values/#collaboration-is-not-consensus))
15
+ - [ ] (If applicable) One style is getting a majority of vote (compared to the other choice)
16
+ - [ ] (If applicable) Update the MR with the chosen style
17
+ - [ ] Follow the [review process](https://docs.gitlab.com/ee/development/code_review.html) as usual
18
+
19
+ /label ~"Engineering Productivity" ~"development guidelines" ~"static code analysis"
20
+
21
+ /cc @gitlab-org/maintainers/rails-backend
@@ -7,7 +7,7 @@ with the latest commit from https://gitlab.com/gitlab-org/gitlab-styles/commits/
7
7
  <!-- Keep the sections order but remove the empty sections -->
8
8
 
9
9
  ```markdown
10
- ### New scenarios and scenario updates
10
+ ### New features and features updates
11
11
 
12
12
  - !aaa <Title of the aaa MR>.
13
13
 
@@ -19,7 +19,7 @@ with the latest commit from https://gitlab.com/gitlab-org/gitlab-styles/commits/
19
19
 
20
20
  - !ccc <Title of the ccc MR>.
21
21
 
22
- ### Other changes (CI, backstage)
22
+ ### Other changes (tooling, technical debt)
23
23
 
24
24
  - !ddd <Title of the ddd MR>.
25
25
  ```
@@ -30,6 +30,6 @@ with the latest commit from https://gitlab.com/gitlab-org/gitlab-styles/commits/
30
30
  - [ ] Release notes are accurate.
31
31
 
32
32
  - Checklist after merging:
33
- - [ ] [Create a tag for the new release version](docs/release_process.md#how-to).
33
+ - [ ] [Update the release notes for the newly created tag](docs/release_process.md#how-to).
34
34
 
35
- /label ~"Engineering Productivity" ~"tooling::workflow"
35
+ /label ~"Engineering Productivity" ~"feature" ~"feature::maintenance" ~"static code analysis"
@@ -1,3 +1,10 @@
1
1
  inherit_from:
2
2
  - rubocop-default.yml
3
- - .rubocop_todo.yml
3
+
4
+ require:
5
+ - rubocop/cop/internal_affairs
6
+
7
+ InternalAffairs/DeprecateCopHelper:
8
+ Enabled: true
9
+ Include:
10
+ - spec/**/*.rb
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.89.1'
10
+ gem 'rubocop', '0.91.1'
11
11
  gem 'rubocop-rspec', '1.44.1'
12
12
  gem 'rspec-parameterized', '0.4.2', require: false
13
13
  end
@@ -22,13 +22,13 @@ 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', '~> 0.89.1'
26
- spec.add_dependency 'rubocop-gitlab-security', '~> 0.1.0'
27
- spec.add_dependency 'rubocop-performance', '~> 1.8.1'
28
- spec.add_dependency 'rubocop-rails', '~> 2.8'
25
+ spec.add_dependency 'rubocop', '~> 0.91.1'
26
+ spec.add_dependency 'rubocop-gitlab-security', '~> 0.1.1'
27
+ spec.add_dependency 'rubocop-performance', '~> 1.9.2'
28
+ spec.add_dependency 'rubocop-rails', '~> 2.9'
29
29
  spec.add_dependency 'rubocop-rspec', '~> 1.44'
30
30
 
31
- spec.add_development_dependency 'bundler', '~> 1.16'
31
+ spec.add_development_dependency 'bundler', '~> 2.1'
32
32
  spec.add_development_dependency 'rake', '~> 10.0'
33
33
  spec.add_development_dependency 'rspec', '~> 3.0'
34
34
  end
@@ -1,21 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gitlab/styles/rubocop/cop/custom_error_class'
4
- require 'gitlab/styles/rubocop/cop/gem_fetcher'
5
- require 'gitlab/styles/rubocop/cop/active_record_serialize'
6
- require 'gitlab/styles/rubocop/cop/redirect_with_status'
7
- require 'gitlab/styles/rubocop/cop/polymorphic_associations'
8
- require 'gitlab/styles/rubocop/cop/active_record_dependent'
9
- require 'gitlab/styles/rubocop/cop/in_batches'
10
- require 'gitlab/styles/rubocop/cop/line_break_after_guard_clauses'
11
- require 'gitlab/styles/rubocop/cop/code_reuse/active_record'
12
- require 'gitlab/styles/rubocop/cop/migration/update_large_table'
13
- require 'gitlab/styles/rubocop/cop/without_reactive_cache'
14
- require 'gitlab/styles/rubocop/cop/rspec/single_line_hook'
15
- require 'gitlab/styles/rubocop/cop/rspec/have_link_parameters'
16
- require 'gitlab/styles/rubocop/cop/rspec/verbose_include_metadata'
17
- require 'gitlab/styles/rubocop/cop/rspec/empty_line_after_shared_example'
18
- require 'gitlab/styles/rubocop/cop/rspec/empty_line_after_let_block'
3
+ # Auto-require all cops under `gitlab/styles/rubocop/cop/**/*.rb`
4
+ cops_glob = File.join(__dir__, 'rubocop', 'cop', '**', '*.rb')
5
+ Dir[cops_glob].sort.each { |cop| require(cop) }
19
6
 
20
7
  module Gitlab
21
8
  module Styles
@@ -22,7 +22,7 @@ module Gitlab
22
22
  node.children.last.each_node(:pair) do |pair|
23
23
  key_name = pair.children[0].children[0]
24
24
 
25
- add_offense(pair, location: :expression) if key_name == :dependent
25
+ add_offense(pair) if key_name == :dependent
26
26
  end
27
27
  end
28
28
  end
@@ -21,7 +21,8 @@ module Gitlab
21
21
  MSG = 'Use `Class.new(SuperClass)` to define an empty custom error class.'
22
22
 
23
23
  def on_class(node)
24
- _klass, parent, body = node.children
24
+ parent = node.parent_class
25
+ body = node.body
25
26
 
26
27
  return if body
27
28
 
@@ -29,11 +30,13 @@ module Gitlab
29
30
 
30
31
  return unless parent_klass&.to_s&.end_with?('Error')
31
32
 
32
- add_offense(node, location: :expression)
33
+ add_offense(node)
33
34
  end
34
35
 
35
36
  def autocorrect(node)
36
- klass, parent, _body = node.children
37
+ klass = node.identifier
38
+ parent = node.parent_class
39
+
37
40
  replacement = "#{class_name_from_node(klass)} = Class.new(#{class_name_from_node(parent)})"
38
41
 
39
42
  lambda do |corrector|
@@ -20,7 +20,7 @@ module Gitlab
20
20
 
21
21
  node.children.last.each_node(:pair) do |pair|
22
22
  key_name = pair.children[0].children[0].to_sym
23
- add_offense(node, location: pair.source_range, message: MSG) if GIT_KEYS.include?(key_name)
23
+ add_offense(node, location: pair.source_range) if GIT_KEYS.include?(key_name)
24
24
  end
25
25
  end
26
26
 
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Gitlab
4
+ module Styles
5
+ module Rubocop
6
+ module Cop
7
+ module InternalAffairs
8
+ # Cop that denies the use of CopHelper.
9
+ class DeprecateCopHelper < RuboCop::Cop::Cop
10
+ MSG = 'Do not use `CopHelper` or methods from it, use improved patterns described in https://www.rubydoc.info/gems/rubocop/RuboCop/RSpec/ExpectOffense'
11
+
12
+ def_node_matcher :cop_helper, <<~PATTERN
13
+ (send nil? ${:include :extend :prepend}
14
+ (const _ {:CopHelper}))
15
+ PATTERN
16
+
17
+ def_node_search :cop_helper_method, <<~PATTERN
18
+ (send nil? {:inspect_source :inspect_source_file :parse_source :autocorrect_source_file :autocorrect_source :_investigate} ...)
19
+ PATTERN
20
+
21
+ def_node_search :cop_helper_method_on_instance, <<~PATTERN
22
+ (send (send nil? _) {:messages :highlights :offenses} ...)
23
+ PATTERN
24
+
25
+ def on_send(node)
26
+ cop_helper(node) do
27
+ add_offense(node)
28
+ end
29
+
30
+ cop_helper_method(node) do
31
+ add_offense(node)
32
+ end
33
+
34
+ cop_helper_method_on_instance(node) do
35
+ add_offense(node)
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -69,7 +69,7 @@ module Gitlab
69
69
  return unless guard_clause?(node)
70
70
  return if next_line(node).blank? || clause_last_line?(next_line(node)) || guard_clause?(next_sibling(node))
71
71
 
72
- add_offense(node, location: :expression, message: MSG)
72
+ add_offense(node)
73
73
  end
74
74
 
75
75
  def autocorrect(node)
@@ -0,0 +1,132 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Gitlab
4
+ module Styles
5
+ module Rubocop
6
+ module Cop
7
+ # Ensures a line break around conditional blocks.
8
+ #
9
+ # @example
10
+ # # bad
11
+ # do_something
12
+ # if condition
13
+ # do_extra_stuff
14
+ # end
15
+ # do_something_more
16
+ #
17
+ # # good
18
+ # do_something
19
+ #
20
+ # if condition
21
+ # do_extra_stuff
22
+ # end
23
+ #
24
+ # do_something_more
25
+ #
26
+ # # bad
27
+ # do_something
28
+ # unless condition
29
+ # do_extra_stuff
30
+ # end
31
+ #
32
+ # do_something_more
33
+ #
34
+ # # good
35
+ # def a_method
36
+ # if condition
37
+ # do_something
38
+ # end
39
+ # end
40
+ #
41
+ # # good
42
+ # on_block do
43
+ # if condition
44
+ # do_something
45
+ # end
46
+ # end
47
+ class LineBreakAroundConditionalBlock < RuboCop::Cop::Cop
48
+ include RuboCop::Cop::RangeHelp
49
+
50
+ MSG = 'Add a line break around conditional blocks'
51
+
52
+ def on_if(node)
53
+ # This cop causes errors in haml files, so let's skip those
54
+ return if in_haml?(node)
55
+ return if node.single_line?
56
+ return unless node.if? || node.unless?
57
+
58
+ add_offense(node) unless previous_line_valid?(node)
59
+ add_offense(node) unless last_line_valid?(node)
60
+ end
61
+
62
+ def autocorrect(node)
63
+ lambda do |corrector|
64
+ line = range_by_whole_lines(node.source_range)
65
+
66
+ corrector.insert_before(line, "\n") unless previous_line_valid?(node)
67
+ corrector.insert_after(line, "\n") unless last_line_valid?(node)
68
+ end
69
+ end
70
+
71
+ private
72
+
73
+ def previous_line_valid?(node)
74
+ previous_line(node).empty? ||
75
+ start_clause_line?(previous_line(node)) ||
76
+ block_start?(previous_line(node)) ||
77
+ begin_line?(previous_line(node)) ||
78
+ assignment_line?(previous_line(node)) ||
79
+ rescue_line?(previous_line(node))
80
+ end
81
+
82
+ def last_line_valid?(node)
83
+ last_line(node).empty? ||
84
+ end_line?(last_line(node)) ||
85
+ end_clause_line?(last_line(node))
86
+ end
87
+
88
+ def previous_line(node)
89
+ processed_source[node.loc.line - 2]
90
+ end
91
+
92
+ def last_line(node)
93
+ processed_source[node.loc.last_line]
94
+ end
95
+
96
+ def start_clause_line?(line)
97
+ line =~ /^\s*(def|=end|#|module|class|if|unless|else|elsif|ensure|when)/
98
+ end
99
+
100
+ def end_clause_line?(line)
101
+ line =~ /^\s*(#|rescue|else|elsif|when)/
102
+ end
103
+
104
+ def begin_line?(line)
105
+ # an assignment followed by a begin or ust a begin
106
+ line =~ /^\s*(@?(\w|\|+|=|\[|\]|\s)+begin|begin)/
107
+ end
108
+
109
+ def assignment_line?(line)
110
+ line =~ /^\s*.*=/
111
+ end
112
+
113
+ def rescue_line?(line)
114
+ line =~ /^\s*rescue/
115
+ end
116
+
117
+ def block_start?(line)
118
+ line.match(/ (do|{)( \|.*?\|)?\s?(#.+)?\z/)
119
+ end
120
+
121
+ def end_line?(line)
122
+ line =~ /^\s*(end|})/
123
+ end
124
+
125
+ def in_haml?(node)
126
+ node.location.expression.source_buffer.name.end_with?('.haml.rb')
127
+ end
128
+ end
129
+ end
130
+ end
131
+ end
132
+ end
@@ -40,7 +40,7 @@ module Gitlab
40
40
 
41
41
  return unless denied_tables.include?(table)
42
42
 
43
- add_offense(node, location: :expression, message: format(MSG, update_method, table))
43
+ add_offense(node, message: format(MSG, update_method, table))
44
44
  end
45
45
 
46
46
  private
@@ -19,7 +19,7 @@ module Gitlab
19
19
  node.children.last.each_node(:pair) do |pair|
20
20
  key_name = pair.children[0].children[0]
21
21
 
22
- add_offense(pair, location: :expression) if key_name == :polymorphic
22
+ add_offense(pair) if key_name == :polymorphic
23
23
  end
24
24
  end
25
25
  end
@@ -0,0 +1,124 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rubocop-rspec'
4
+ require_relative 'base'
5
+
6
+ module Gitlab
7
+ module Styles
8
+ module Rubocop
9
+ module Cop
10
+ module RSpec
11
+ # Checks for common mistakes in example descriptions.
12
+ #
13
+ # This cop will correct docstrings that begin/end with space or words that start with a capital letter.
14
+ #
15
+ # @see https://gitlab.com/gitlab-org/gitlab/-/merge_requests/46336#note_442669518
16
+ #
17
+ # @example
18
+ # # bad
19
+ # it 'Does something' do
20
+ # end
21
+ #
22
+ # # good
23
+ # it 'does nothing' do
24
+ # end
25
+ #
26
+ # @example
27
+ # # bad
28
+ # it ' does something' do
29
+ # end
30
+ #
31
+ # # good
32
+ # it 'does something' do
33
+ # end
34
+ #
35
+ # @example
36
+ # # bad
37
+ # it 'does something ' do
38
+ # end
39
+ #
40
+ # # good
41
+ # it 'does something' do
42
+ # end
43
+ #
44
+ # @example
45
+ # # bad
46
+ # it ' does something ' do
47
+ # end
48
+ #
49
+ # # good
50
+ # it 'does something' do
51
+ # end
52
+ class ExampleStartingCharacter < Base
53
+ extend RuboCop::Cop::AutoCorrector
54
+
55
+ MSG = 'Only start words with lowercase alpha with no leading/trailing spaces when describing your tests.'
56
+
57
+ def_node_matcher :it_description, <<-PATTERN
58
+ (block (send _ :it ${
59
+ (str $_)
60
+ (dstr (str $_ ) ...)
61
+ } ...) ...)
62
+ PATTERN
63
+
64
+ def on_block(node)
65
+ it_description(node) do |description_node, _message|
66
+ add_wording_offense(description_node, MSG) if invalid_description?(text(description_node))
67
+ end
68
+ end
69
+
70
+ private
71
+
72
+ def add_wording_offense(node, message)
73
+ docstring = docstring(node)
74
+ add_offense(docstring, message: message) do |corrector|
75
+ corrector.replace(docstring, replacement_text(node))
76
+ end
77
+ end
78
+
79
+ def docstring(node)
80
+ expr = node.loc.expression
81
+
82
+ Parser::Source::Range.new(
83
+ expr.source_buffer,
84
+ expr.begin_pos + 1,
85
+ expr.end_pos - 1
86
+ )
87
+ end
88
+
89
+ def invalid_description?(message)
90
+ message.match?(/(^([A-Z]{1}[a-z]+\s|\s)|\s$)/)
91
+ end
92
+
93
+ def replacement_text(node)
94
+ text = text(node)
95
+
96
+ text.strip!
97
+
98
+ text = downcase_first_letter(text) if invalid_description?(text)
99
+
100
+ text
101
+ end
102
+
103
+ # Recursive processing is required to process nested dstr nodes
104
+ # that is the case for \-separated multiline strings with interpolation.
105
+ def text(node)
106
+ case node.type
107
+ when :dstr
108
+ node.node_parts.map { |child_node| text(child_node) }.join
109
+ when :str
110
+ node.value
111
+ when :begin
112
+ node.source
113
+ end
114
+ end
115
+
116
+ def downcase_first_letter(str)
117
+ str[0].downcase + str[1..]
118
+ end
119
+ end
120
+ end
121
+ end
122
+ end
123
+ end
124
+ end
@@ -52,7 +52,7 @@ module Gitlab
52
52
 
53
53
  def invalid_metadata_matches(node, &block)
54
54
  include_metadata(node) do |matches|
55
- matches.select(&method(:invalid_metadata?)).each(&block)
55
+ matches.select { |match| invalid_metadata?(match) }.each(&block)
56
56
  end
57
57
  end
58
58
 
@@ -9,7 +9,7 @@ module Gitlab
9
9
  module Helpers
10
10
  include RuboCop::RSpec::Language
11
11
 
12
- LET = SelectorSet.new(%i[let_it_be]) + Helpers::ALL
12
+ LET = SelectorSet.new(%i[let_it_be]) + RuboCop::RSpec::Language::Helpers::ALL
13
13
  end
14
14
  end
15
15
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Gitlab
4
4
  module Styles
5
- VERSION = '5.0.0'
5
+ VERSION = '6.0.0'
6
6
  end
7
7
  end
@@ -20,3 +20,6 @@ inherit_from:
20
20
  - rubocop-rspec.yml
21
21
  - rubocop-security.yml
22
22
  - rubocop-style.yml
23
+
24
+ InternalAffairs/DeprecateCopHelper:
25
+ Enabled: false
@@ -12,6 +12,9 @@ Layout/ArrayAlignment:
12
12
  Layout/AssignmentIndentation:
13
13
  Enabled: true
14
14
 
15
+ Layout/BeginEndAlignment: # (new in 0.91)
16
+ Enabled: true
17
+
15
18
  # Align block ends correctly.
16
19
  Layout/BlockAlignment:
17
20
  Enabled: true
@@ -28,6 +28,9 @@ Lint/BinaryOperatorWithIdenticalOperands:
28
28
  Lint/CircularArgumentReference:
29
29
  Enabled: true
30
30
 
31
+ Lint/ConstantDefinitionInBlock: # (new in 0.91)
32
+ Enabled: true
33
+
31
34
  # Check for debugger calls.
32
35
  Lint/Debugger:
33
36
  Enabled: true
@@ -47,6 +50,9 @@ Lint/DeprecatedOpenSSLConstant:
47
50
  Lint/DuplicateElsifCondition:
48
51
  Enabled: true
49
52
 
53
+ Lint/DuplicateRequire: # (new in 0.90)
54
+ Enabled: true
55
+
50
56
  # Checks that there are no repeated exceptions used in 'rescue' expressions.
51
57
  # https://docs.rubocop.org/rubocop/0.89/cops_lint.html#lintduplicaterescueexception
52
58
  Lint/DuplicateRescueException:
@@ -69,6 +75,9 @@ Lint/EmptyConditionalBody:
69
75
  Lint/EmptyEnsure:
70
76
  Enabled: true
71
77
 
78
+ Lint/EmptyFile: # (new in 0.90)
79
+ Enabled: true
80
+
72
81
  # Checks for the presence of `when` branches without a body.
73
82
  Lint/EmptyWhen:
74
83
  Enabled: true
@@ -94,6 +103,9 @@ Lint/FloatOutOfRange:
94
103
  Lint/FormatParameterMismatch:
95
104
  Enabled: true
96
105
 
106
+ Lint/IdentityComparison: # (new in 0.91)
107
+ Enabled: true
108
+
97
109
  # Checks for adjacent string literals on the same line, which could better be
98
110
  # represented as a single string literal.
99
111
  Lint/ImplicitStringConcatenation:
@@ -200,6 +212,9 @@ Lint/SuppressedException:
200
212
  Lint/TopLevelReturnWithArgument:
201
213
  Enabled: true
202
214
 
215
+ Lint/TrailingCommaInAttributeDeclaration: # (new in 0.90)
216
+ Enabled: true
217
+
203
218
  # Do not use prefix `_` for a variable that is used.
204
219
  Lint/UnderscorePrefixedVariableName:
205
220
  Enabled: true
@@ -238,10 +253,16 @@ Lint/UselessAssignment:
238
253
  Lint/UselessElseWithoutRescue:
239
254
  Enabled: true
240
255
 
256
+ Lint/UselessMethodDefinition: # (new in 0.90)
257
+ Enabled: true
258
+
241
259
  # Checks for useless setter call to a local variable.
242
260
  Lint/UselessSetterCall:
243
261
  Enabled: true
244
262
 
263
+ Lint/UselessTimes: # (new in 0.91)
264
+ Enabled: true
265
+
245
266
  # Possible use of operator/literal/variable in void context.
246
267
  Lint/Void:
247
268
  Enabled: true
@@ -10,6 +10,9 @@ Performance/AncestorsInclude:
10
10
  Performance/BigDecimalWithNumericArgument:
11
11
  Enabled: true
12
12
 
13
+ Performance/BlockGivenWithExplicitBlock: # (new in 1.9)
14
+ Enabled: true
15
+
13
16
  # Use `caller(n..n)` instead of `caller`.
14
17
  Performance/Caller:
15
18
  Enabled: false
@@ -18,11 +21,20 @@ Performance/Caller:
18
21
  Performance/Casecmp:
19
22
  Enabled: true
20
23
 
24
+ Performance/CollectionLiteralInLoop: # (new in 1.8)
25
+ Enabled: true
26
+
27
+ Performance/ConstantRegexp: # (new in 1.9)
28
+ Enabled: true
29
+
21
30
  # Use `str.{start,end}_with?(x, ..., y, ...)` instead of
22
31
  # `str.{start,end}_with?(x, ...) || str.{start,end}_with?(y, ...)`.
23
32
  Performance/DoubleStartEndWith:
24
33
  Enabled: true
25
34
 
35
+ Performance/MethodObjectAsBlock: # (new in 1.9)
36
+ Enabled: true
37
+
26
38
  # Use `Range#cover?` instead of `Range#include?`.
27
39
  Performance/RangeInclude:
28
40
  Enabled: true
@@ -24,6 +24,9 @@ Rails/AfterCommitOverride:
24
24
  Rails/ApplicationRecord:
25
25
  Enabled: false
26
26
 
27
+ Rails/AttributeDefaultBlockValue: # (new in 2.9)
28
+ Enabled: true
29
+
27
30
  # Enforce using `blank?` and `present?`.
28
31
  Rails/Blank:
29
32
  Enabled: false
@@ -168,6 +171,9 @@ Rails/TimeZone:
168
171
  Rails/Validation:
169
172
  Enabled: true
170
173
 
174
+ Rails/WhereEquals: # (new in 2.9)
175
+ Enabled: true
176
+
171
177
  # Enforces consistent style when using exists?.
172
178
  # https://docs.rubocop.org/rubocop-rails/2.8/cops_rails.html#railswhereexists
173
179
  Rails/WhereExists:
@@ -13,6 +13,7 @@ Style/Alias:
13
13
  # or completely (always).
14
14
  Style/AndOr:
15
15
  Enabled: true
16
+ EnforcedStyle: always
16
17
 
17
18
  # Enforces the use of Array() instead of explicit Array check or [*var]
18
19
  # https://docs.rubocop.org/rubocop/0.89/cops_style.html#stylearraycoercion
@@ -83,6 +84,9 @@ Style/ClassVars:
83
84
  Style/ColonMethodCall:
84
85
  Enabled: true
85
86
 
87
+ Style/CombinableLoops: # (new in 0.90)
88
+ Enabled: true
89
+
86
90
  # This cop checks that comment annotation keywords are written according
87
91
  # to guidelines.
88
92
  Style/CommentAnnotation:
@@ -201,6 +205,9 @@ Style/InfiniteLoop:
201
205
  Style/InverseMethods:
202
206
  Enabled: false
203
207
 
208
+ Style/KeywordParametersOrder: # (new in 0.90)
209
+ Enabled: true
210
+
204
211
  # Use lambda.call(...) instead of lambda.(...).
205
212
  Style/LambdaCall:
206
213
  Enabled: true
@@ -334,6 +341,9 @@ Style/RedundantRegexpCharacterClass:
334
341
  Style/RedundantRegexpEscape:
335
342
  Enabled: true
336
343
 
344
+ Style/RedundantSelfAssignment: # (new in 0.90)
345
+ Enabled: true
346
+
337
347
  # Use `sort` instead of `sort_by { |x| x }`.
338
348
  Style/RedundantSortBy:
339
349
  Enabled: true
@@ -357,6 +367,9 @@ Style/SignalException:
357
367
  Style/SlicingWithRange:
358
368
  Enabled: true
359
369
 
370
+ Style/SoleNestedConditional: # (new in 0.89)
371
+ Enabled: true
372
+
360
373
  # Check for the usage of parentheses around stabby lambda arguments.
361
374
  Style/StabbyLambdaParentheses:
362
375
  EnforcedStyle: require_parentheses
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: 5.0.0
4
+ version: 6.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-10-28 00:00:00.000000000 Z
11
+ date: 2021-01-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubocop
@@ -16,56 +16,56 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.89.1
19
+ version: 0.91.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.89.1
26
+ version: 0.91.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rubocop-gitlab-security
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.1.0
33
+ version: 0.1.1
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.1.0
40
+ version: 0.1.1
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rubocop-performance
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 1.8.1
47
+ version: 1.9.2
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.8.1
54
+ version: 1.9.2
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.8'
61
+ version: '2.9'
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.8'
68
+ version: '2.9'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rubocop-rspec
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -86,14 +86,14 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '1.16'
89
+ version: '2.1'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '1.16'
96
+ version: '2.1'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rake
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -132,10 +132,10 @@ files:
132
132
  - ".editorconfig"
133
133
  - ".gitignore"
134
134
  - ".gitlab-ci.yml"
135
+ - ".gitlab/merge_request_templates/New Static Analysis Check.md"
135
136
  - ".gitlab/merge_request_templates/Release.md"
136
137
  - ".rspec"
137
138
  - ".rubocop.yml"
138
- - ".rubocop_todo.yml"
139
139
  - CODE_OF_CONDUCT.md
140
140
  - CONTRIBUTING.md
141
141
  - Gemfile
@@ -153,13 +153,16 @@ files:
153
153
  - lib/gitlab/styles/rubocop/cop/custom_error_class.rb
154
154
  - lib/gitlab/styles/rubocop/cop/gem_fetcher.rb
155
155
  - lib/gitlab/styles/rubocop/cop/in_batches.rb
156
+ - lib/gitlab/styles/rubocop/cop/internal_affairs/deprecate_cop_helper.rb
156
157
  - lib/gitlab/styles/rubocop/cop/line_break_after_guard_clauses.rb
158
+ - lib/gitlab/styles/rubocop/cop/line_break_around_conditional_block.rb
157
159
  - lib/gitlab/styles/rubocop/cop/migration/update_large_table.rb
158
160
  - lib/gitlab/styles/rubocop/cop/polymorphic_associations.rb
159
161
  - lib/gitlab/styles/rubocop/cop/redirect_with_status.rb
160
162
  - lib/gitlab/styles/rubocop/cop/rspec/base.rb
161
163
  - lib/gitlab/styles/rubocop/cop/rspec/empty_line_after_let_block.rb
162
164
  - lib/gitlab/styles/rubocop/cop/rspec/empty_line_after_shared_example.rb
165
+ - lib/gitlab/styles/rubocop/cop/rspec/example_starting_character.rb
163
166
  - lib/gitlab/styles/rubocop/cop/rspec/have_link_parameters.rb
164
167
  - lib/gitlab/styles/rubocop/cop/rspec/single_line_hook.rb
165
168
  - lib/gitlab/styles/rubocop/cop/rspec/verbose_include_metadata.rb
@@ -1,7 +0,0 @@
1
- # This configuration was generated by
2
- # `rubocop --auto-gen-config`
3
- # on 2017-11-03 15:49:59 +0100 using RuboCop version 0.51.0.
4
- # The point is for the user to remove these configuration records
5
- # one by one as the offenses are removed from the code base.
6
- # Note that changes in the inspected code, or installation of new
7
- # versions of RuboCop, may require this file to be generated again.