sevencop 0.9.3 → 0.10.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: 3d3ab099568a85aea228ce2fcf282f4e0bc7a2e2c6f3315191c2e9e14367a173
4
- data.tar.gz: aeba9572d3eeb74d5d4da5473b30b62d291b0e01d8f5644f041ca41ecd43994f
3
+ metadata.gz: ee9785d463d0e83d3f55dc1554e250e826a9cbd5aa6aacb510f11a4bdfb1947a
4
+ data.tar.gz: 9ca8456b525226ba8a599c4ef87f08ea208000268fa73ccf9f1501531682d294
5
5
  SHA512:
6
- metadata.gz: 643b778e5c44256e590b1a7344825f46c1057a18d3e424076583b522a21f957ca1acf37e2ba6f59d58b72a66e929e2aada551c627cf039d065dbea2646d4e485
7
- data.tar.gz: 723e43f5d54dab22c1be3d02bb1074d6899783aec74c64c1fa6ead9294b01ffde02d5aae1b1792e483082d5d297f784de393a20285d34a303e892febc2522ae6
6
+ metadata.gz: edc7f9620eaa81224e47c8e8785df67bc29c51a0c6969f30bd24a3d6869a64be26686ccce7c3b43c89bc89f06b9283b67030587c86eb0b7ef5598d42ee1dc90b
7
+ data.tar.gz: 9a3bf2ecc2eed54ae8dd6207d0f0cd93c13f577bbcab69cdc9992e42f87687e416d9612136f1483952cfb51bdf22890727b14d6d66653e9294732dcb1da8d389
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sevencop (0.9.3)
4
+ sevencop (0.10.0)
5
5
  rubocop
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -67,6 +67,25 @@ belongs_to :group, options
67
67
 
68
68
  This is useful for migration of `config.active_record.belongs_to_required_by_default`.
69
69
 
70
+ ### Sevencop/FactoryBotCreateList
71
+
72
+ Finds possible substitutions for `FactoryBot.create_list`.
73
+
74
+ ```ruby
75
+ # bad
76
+ Array.new(2) do
77
+ create(:user)
78
+ end
79
+
80
+ # good
81
+ create_list(:user, 2)
82
+
83
+ # good
84
+ Array.new(2) do |i|
85
+ create(:user, order: i)
86
+ end
87
+ ```
88
+
70
89
  ### Sevencop/HashLiteralOrder
71
90
 
72
91
  Sort Hash literal entries by key.
data/config/default.yml CHANGED
@@ -5,6 +5,12 @@ Sevencop/BelongsToOptional:
5
5
  Safe: false
6
6
  VersionAdded: '0.5'
7
7
 
8
+ Sevencop/FactoryBotCreateList:
9
+ Description: |
10
+ Finds possible substitutions for `FactoryBot.create_list`.
11
+ Enabled: false
12
+ VersionAdded: '0.10'
13
+
8
14
  Sevencop/HashLiteralOrder:
9
15
  Description: |
10
16
  Sort Hash literal entries by key.
@@ -0,0 +1,94 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Sevencop
6
+ # Finds possible substitutions for `FactoryBot.create_list`.
7
+ #
8
+ # @example
9
+ #
10
+ # # bad
11
+ # Array.new(2) do
12
+ # create(:user)
13
+ # end
14
+ #
15
+ # # good
16
+ # create_list(:user, 2)
17
+ #
18
+ # # good
19
+ # Array.new(2) do |i|
20
+ # create(:user, order: i)
21
+ # end
22
+ #
23
+ # @note
24
+ # This cop does not support `Integer#times` intentionally because it
25
+ # should be treated by `Performance/TimesMap` cop.
26
+ #
27
+ class FactoryBotCreateList < Base
28
+ extend AutoCorrector
29
+
30
+ MSG = 'Use `create_list` instead.'
31
+
32
+ # @param node [RuboCop::AST::BlockNode]
33
+ # @return [void]
34
+ def on_block(node)
35
+ count_node, factory_name_node, extra_argument_nodes = extract(node)
36
+ return unless count_node
37
+
38
+ add_offense(node) do |corrector|
39
+ corrector.replace(
40
+ node,
41
+ format(
42
+ 'create_list(%<arguments>s)',
43
+ arguments: [
44
+ factory_name_node,
45
+ count_node,
46
+ *extra_argument_nodes
47
+ ].map(&:source).join(', ')
48
+ )
49
+ )
50
+ end
51
+ end
52
+
53
+ private
54
+
55
+ # @!method extract(node)
56
+ # @param node [RuboCop::AST::BlockNode]
57
+ # @return [Array(Integer, RuboCop::AST::SendNode)]
58
+ def_node_matcher :extract, <<~PATTERN
59
+ (block
60
+ (send
61
+ (const {nil? | cbase} :Array)
62
+ :new
63
+ $(int _)
64
+ )
65
+ (args)
66
+ (send
67
+ nil?
68
+ :create
69
+ $(sym _) $(...)?
70
+ )
71
+ )
72
+ PATTERN
73
+
74
+ # @param corrector [RuboCop::Cop::Corrector]
75
+ # @param node [RuboCop::AST::BlockNode]
76
+ # @return [void]
77
+ def autocorrect(corrector, node)
78
+ count_node, factory_name_node, extra_argument_nodes = extract(node)
79
+ corrector.replace(
80
+ node,
81
+ format(
82
+ 'create_list(%<arguments>s)',
83
+ arguments: [
84
+ factory_name_node,
85
+ count_node,
86
+ *extra_argument_nodes
87
+ ].map(&:source).join(', ')
88
+ )
89
+ )
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Sevencop
4
- VERSION = '0.9.3'
4
+ VERSION = '0.10.0'
5
5
  end
data/lib/sevencop.rb CHANGED
@@ -1,12 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'pathname'
4
- require 'yaml'
5
-
6
3
  require_relative 'sevencop/rubocop_extension'
7
4
  require_relative 'sevencop/version'
8
5
 
9
6
  require_relative 'rubocop/cop/sevencop/belongs_to_optional'
7
+ require_relative 'rubocop/cop/sevencop/factory_bot_create_list'
10
8
  require_relative 'rubocop/cop/sevencop/hash_literal_order'
11
9
  require_relative 'rubocop/cop/sevencop/inferred_spec_type'
12
10
  require_relative 'rubocop/cop/sevencop/order_field'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sevencop
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.3
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryo Nakamura
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-08-27 00:00:00.000000000 Z
11
+ date: 2022-08-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubocop
@@ -42,6 +42,7 @@ files:
42
42
  - Rakefile
43
43
  - config/default.yml
44
44
  - lib/rubocop/cop/sevencop/belongs_to_optional.rb
45
+ - lib/rubocop/cop/sevencop/factory_bot_create_list.rb
45
46
  - lib/rubocop/cop/sevencop/hash_literal_order.rb
46
47
  - lib/rubocop/cop/sevencop/inferred_spec_type.rb
47
48
  - lib/rubocop/cop/sevencop/order_field.rb