gitlab-styles 6.0.0 → 6.3.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: 88825b6aaa4961f16a29bfc14cdb1d590700a74e81fe68e072fccd2046506c6b
4
- data.tar.gz: 5634afcb51a117e54f4760c43f12d3b2564d08b62bbcd49d97b7cde7c88014d6
3
+ metadata.gz: bdb4b922d729575676263e2cb9cf6f63b50be1d8b4205d96af7ecb6aaa2c4c84
4
+ data.tar.gz: 46a11af0a19079547b1d25e988e80d8271a5fe15fda707096662aee73a4cc9c3
5
5
  SHA512:
6
- metadata.gz: 99652ceb45ae8e31ac3105bd7913a2c85e0a5a22cd97ad5d30081fd1b55b4d1734671d9cdbfdf1875dbdbc314efb9fe433b8859a18761ebea1d1054f58aa88d1
7
- data.tar.gz: 2b16d7dc347ec66fd1656d735bc6427c485c88e27d7fb3030e0a852d76fb338705a976e85fb949b25b3994035134251da3771a9f3c914767d6d7158ecf5137e4
6
+ metadata.gz: df88cc8b9ea74b138c8768130b310d50d2204bed62e4648b292a8b0f058dad46335e23432564a546e0acc0ae9ef3c8a2487f4690f8e4ee2a73e6209665441746
7
+ data.tar.gz: 2d744fd1097268298c1073404bf84ddd4d65b28dbfa4b5bfad95857ea310734d24f93b81870e0c03454c26a2aa8de19470c7f75374e73db25ac0067a2665bebf
data/.gitlab-ci.yml CHANGED
@@ -14,8 +14,8 @@ workflow:
14
14
  rules:
15
15
  # For merge requests, create a pipeline.
16
16
  - if: '$CI_MERGE_REQUEST_IID'
17
- # For `master` branch, create a pipeline (this includes on schedules, pushes, merges, etc.).
18
- - if: '$CI_COMMIT_BRANCH == "master"'
17
+ # For the default branch, create a pipeline (this includes on schedules, pushes, merges, etc.).
18
+ - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
19
19
  # For tags, create a pipeline.
20
20
  - if: '$CI_COMMIT_TAG'
21
21
 
@@ -22,7 +22,7 @@ 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.91.1'
25
+ spec.add_dependency 'rubocop', '~> 0.91', '>= 0.91.1'
26
26
  spec.add_dependency 'rubocop-gitlab-security', '~> 0.1.1'
27
27
  spec.add_dependency 'rubocop-performance', '~> 1.9.2'
28
28
  spec.add_dependency 'rubocop-rails', '~> 2.9'
@@ -44,7 +44,6 @@ module Gitlab
44
44
  ids: false,
45
45
  includes: true,
46
46
  joins: true,
47
- limit: true,
48
47
  lock: false,
49
48
  many?: false,
50
49
  offset: true,
@@ -0,0 +1,31 @@
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
+ module Rails
10
+ class IncludeUrlHelper < RuboCop::Cop::Cop
11
+ MSG = <<~MSG
12
+ Avoid including `ActionView::Helpers::UrlHelper`.
13
+ It adds/overrides ~40 methods while usually only one is needed.
14
+ Instead, use the `Gitlab::Routing.url_helpers`/`Application.routes.url_helpers`(outside of gitlab)
15
+ and `ActionController::Base.helpers.link_to`.
16
+ See https://gitlab.com/gitlab-org/gitlab/-/issues/340567.
17
+ MSG
18
+
19
+ def_node_matcher :include_url_helpers_node?, <<~PATTERN
20
+ (send nil? :include (const (const (const {nil? cbase} :ActionView) :Helpers) :UrlHelper))
21
+ PATTERN
22
+
23
+ def on_send(node)
24
+ add_offense(node) if include_url_helpers_node?(node)
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,51 @@
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 if there is an empty line after the last `let_it_be` block.
12
+ #
13
+ # @example
14
+ # # bad
15
+ # let_it_be(:foo) { bar }
16
+ # let_it_be(:something) { other }
17
+ # it { does_something }
18
+ #
19
+ # # good
20
+ # let_it_be(:foo) { bar }
21
+ # let_it_be(:something) { other }
22
+ #
23
+ # it { does_something }
24
+ class EmptyLineAfterFinalLetItBe < Base
25
+ extend RuboCop::Cop::AutoCorrector
26
+ include RuboCop::RSpec::EmptyLineSeparation
27
+
28
+ MSG = 'Add an empty line after the last `let_it_be`.'
29
+
30
+ def_node_matcher :let_it_be?, <<-PATTERN
31
+ {
32
+ (block (send #rspec? {:let_it_be :let_it_be_with_refind :let_it_be_with_reload} ...) ...)
33
+ (send #rspec? {:let_it_be :let_it_be_with_refind :let_it_be_with_reload} _ block_pass)
34
+ }
35
+ PATTERN
36
+
37
+ def on_block(node)
38
+ return unless example_group_with_body?(node)
39
+
40
+ final_let_it_be = node.body.child_nodes.reverse.find { |child| let_it_be?(child) }
41
+
42
+ return if final_let_it_be.nil?
43
+
44
+ missing_separating_line_offense(final_let_it_be) { MSG }
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,87 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Gitlab
4
+ module Styles
5
+ module Rubocop
6
+ module Cop
7
+ module Style
8
+ # This cop identifies places where `map { ... }.to_h` or
9
+ # `Hash[map { ... }]` can be replaced with `to_h { ... }`,
10
+ # saving an intermediate array allocation.
11
+ #
12
+ # @example
13
+ # # bad
14
+ # hash.map { |k, v| [v.upcase, k.downcase] }.to_h
15
+ # hash.collect { |k, v| [v.upcase, k.downcase] }.to_h
16
+ # Hash[hash.map { |k, v| [v.upcase, k.downcase] }]
17
+ # Hash[hash.collect { |k, v| [v.upcase, k.downcase] }]
18
+ # array.map { |x| [x, x + 1] }.to_h
19
+ #
20
+ # # good
21
+ # hash.to_h { |k, v| [v.upcase, k.downcase] }
22
+ # array.to_h { |x| [x, x + 1] }
23
+ #
24
+ # Full credit: https://github.com/eugeneius/rubocop-performance/blob/hash_transformation/lib/rubocop/cop/performance/hash_transformation.rb
25
+ class HashTransformation < RuboCop::Cop::Cop
26
+ include RuboCop::Cop::RangeHelp
27
+
28
+ MSG = 'Use `to_h { ... }` instead of `%<current>s`.'
29
+
30
+ def_node_matcher :to_h_candidate?, <<~PATTERN
31
+ {
32
+ [(send
33
+ $(block $(send _ {:map :collect}) ...) :to_h) !block_literal?]
34
+ (send (const nil? :Hash) :[]
35
+ $(block $(send _ {:map :collect}) ...))
36
+ }
37
+ PATTERN
38
+
39
+ def on_send(node)
40
+ to_h_candidate?(node) do |_block, call|
41
+ range = offense_range(node, call)
42
+ message = message(node, call)
43
+ add_offense(node, location: range, message: message)
44
+ end
45
+ end
46
+
47
+ def autocorrect(node)
48
+ block, call = to_h_candidate?(node)
49
+
50
+ lambda do |corrector|
51
+ corrector.remove(after_block(node, block))
52
+ corrector.replace(call.loc.selector, 'to_h')
53
+ corrector.remove(before_block(node, block))
54
+ end
55
+ end
56
+
57
+ private
58
+
59
+ def offense_range(node, call)
60
+ return node.source_range if node.children.first.const_type?
61
+
62
+ range_between(call.loc.selector.begin_pos, node.loc.selector.end_pos)
63
+ end
64
+
65
+ def message(node, call)
66
+ current = if node.children.first.const_type?
67
+ "Hash[#{call.method_name} { ... }]"
68
+ else
69
+ "#{call.method_name} { ... }.to_h"
70
+ end
71
+
72
+ format(MSG, current: current)
73
+ end
74
+
75
+ def after_block(node, block)
76
+ block.source_range.end.join(node.source_range.end)
77
+ end
78
+
79
+ def before_block(node, block)
80
+ node.source_range.begin.join(block.source_range.begin)
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
@@ -9,7 +9,8 @@ module Gitlab
9
9
  module Helpers
10
10
  include RuboCop::RSpec::Language
11
11
 
12
- LET = SelectorSet.new(%i[let_it_be]) + RuboCop::RSpec::Language::Helpers::ALL
12
+ LET_IT_BE_HELPERS = SelectorSet.new(%i[let_it_be let_it_be_with_refind let_it_be_with_reload])
13
+ LET = LET_IT_BE_HELPERS + RuboCop::RSpec::Language::Helpers::ALL
13
14
  end
14
15
  end
15
16
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Gitlab
4
4
  module Styles
5
- VERSION = '6.0.0'
5
+ VERSION = '6.3.0'
6
6
  end
7
7
  end
@@ -1,3 +1,7 @@
1
+ ---
2
+ require:
3
+ - ./lib/gitlab/styles/rubocop
4
+
1
5
  # Denies the use of ActiveRecord methods outside of configured
2
6
  # excluded directories
3
7
  # Directories that allow the use of the denied methods.
@@ -1,4 +1,7 @@
1
1
  ---
2
+ require:
3
+ - ./lib/gitlab/styles/rubocop
4
+
2
5
  # Checks for methods that may lead to batch type issues on a table that's been
3
6
  # explicitly denied because of its size.
4
7
  #
@@ -1,4 +1,7 @@
1
1
  ---
2
+ require:
3
+ - rubocop-performance
4
+
2
5
  # Used to identify usages of ancestors.include? and change them to use ⇐ instead.
3
6
  # https://docs.rubocop.org/rubocop-performance/1.8/cops_performance.html#performanceancestorsinclude
4
7
  Performance/AncestorsInclude:
@@ -35,6 +38,12 @@ Performance/DoubleStartEndWith:
35
38
  Performance/MethodObjectAsBlock: # (new in 1.9)
36
39
  Enabled: true
37
40
 
41
+ # Use `Struct.new(..., keyword_init: true)` instead of `OpenStruct.new(...)`.
42
+ Performance/OpenStruct:
43
+ Enabled: true
44
+ Exclude:
45
+ - 'spec/**/*'
46
+
38
47
  # Use `Range#cover?` instead of `Range#include?`.
39
48
  Performance/RangeInclude:
40
49
  Enabled: true
data/rubocop-rails.yml CHANGED
@@ -1,4 +1,8 @@
1
1
  ---
2
+ require:
3
+ - rubocop-rails
4
+ - ./lib/gitlab/styles/rubocop
5
+
2
6
  # Enables Rails cops.
3
7
  Rails:
4
8
  Enabled: true
@@ -183,3 +187,7 @@ Rails/WhereExists:
183
187
  # https://docs.rubocop.org/rubocop-rails/2.8/cops_rails.html#railswherenot
184
188
  Rails/WhereNot:
185
189
  Enabled: true
190
+
191
+ # Bans the use of `include ActionView::Helpers::UrlHelper`.
192
+ Rails/IncludeUrlHelper:
193
+ Enabled: true
data/rubocop-rspec.yml CHANGED
@@ -1,4 +1,7 @@
1
1
  ---
2
+ require:
3
+ - ./lib/gitlab/styles/rubocop
4
+
2
5
  # Check that instances are not being stubbed globally.
3
6
  RSpec/AnyInstance:
4
7
  Enabled: false
data/rubocop-security.yml CHANGED
@@ -1,4 +1,7 @@
1
1
  ---
2
+ require:
3
+ - rubocop-gitlab-security
4
+
2
5
  # This cop checks for the use of JSON class methods which have potential
3
6
  # security issues.
4
7
  Security/JSONLoad:
data/rubocop-style.yml CHANGED
@@ -1,4 +1,7 @@
1
1
  ---
2
+ require:
3
+ - ./lib/gitlab/styles/rubocop
4
+
2
5
  # Checks for grouping of accessors in class and module bodies.
3
6
  # https://docs.rubocop.org/rubocop/0.89/cops_style.html#styleaccessorgrouping
4
7
  Style/AccessorGrouping:
@@ -187,6 +190,13 @@ Style/HashTransformKeys:
187
190
  Style/HashTransformValues:
188
191
  Enabled: true
189
192
 
193
+
194
+ # This cop identifies places where `map { ... }.to_h` or
195
+ # `Hash[map { ... }]` can be replaced with `to_h { ... }`,
196
+ # saving an intermediate array allocation.
197
+ Style/HashTransformation:
198
+ Enabled: true
199
+
190
200
  # Checks that conditional statements do not have an identical line at the
191
201
  # end of each branch, which can validly be moved out of the conditional.
192
202
  Style/IdenticalConditionalBranches:
metadata CHANGED
@@ -1,20 +1,23 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitlab-styles
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.0.0
4
+ version: 6.3.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-01-07 00:00:00.000000000 Z
11
+ date: 2021-09-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubocop
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.91'
20
+ - - ">="
18
21
  - !ruby/object:Gem::Version
19
22
  version: 0.91.1
20
23
  type: :runtime
@@ -22,6 +25,9 @@ dependencies:
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
27
  - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '0.91'
30
+ - - ">="
25
31
  - !ruby/object:Gem::Version
26
32
  version: 0.91.1
27
33
  - !ruby/object:Gem::Dependency
@@ -158,14 +164,17 @@ files:
158
164
  - lib/gitlab/styles/rubocop/cop/line_break_around_conditional_block.rb
159
165
  - lib/gitlab/styles/rubocop/cop/migration/update_large_table.rb
160
166
  - lib/gitlab/styles/rubocop/cop/polymorphic_associations.rb
167
+ - lib/gitlab/styles/rubocop/cop/rails/include_url_helper.rb
161
168
  - lib/gitlab/styles/rubocop/cop/redirect_with_status.rb
162
169
  - lib/gitlab/styles/rubocop/cop/rspec/base.rb
170
+ - lib/gitlab/styles/rubocop/cop/rspec/empty_line_after_final_let_it_be.rb
163
171
  - lib/gitlab/styles/rubocop/cop/rspec/empty_line_after_let_block.rb
164
172
  - lib/gitlab/styles/rubocop/cop/rspec/empty_line_after_shared_example.rb
165
173
  - lib/gitlab/styles/rubocop/cop/rspec/example_starting_character.rb
166
174
  - lib/gitlab/styles/rubocop/cop/rspec/have_link_parameters.rb
167
175
  - lib/gitlab/styles/rubocop/cop/rspec/single_line_hook.rb
168
176
  - lib/gitlab/styles/rubocop/cop/rspec/verbose_include_metadata.rb
177
+ - lib/gitlab/styles/rubocop/cop/style/hash_transformation.rb
169
178
  - lib/gitlab/styles/rubocop/cop/without_reactive_cache.rb
170
179
  - lib/gitlab/styles/rubocop/migration_helpers.rb
171
180
  - lib/gitlab/styles/rubocop/model_helpers.rb
@@ -205,7 +214,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
205
214
  - !ruby/object:Gem::Version
206
215
  version: '0'
207
216
  requirements: []
208
- rubygems_version: 3.1.4
217
+ rubygems_version: 3.1.6
209
218
  signing_key:
210
219
  specification_version: 4
211
220
  summary: GitLab style guides and shared style configs.