sevencop 0.9.3 → 0.11.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 +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +39 -0
- data/config/default.yml +12 -0
- data/lib/rubocop/cop/sevencop/factory_bot_create_list.rb +94 -0
- data/lib/rubocop/cop/sevencop/method_definition_multiline_arguments.rb +71 -0
- data/lib/sevencop/version.rb +1 -1
- data/lib/sevencop.rb +2 -3
- metadata +4 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: '0977a1a38e5da28e989cde731824234e1a8aaa2f926cf416d31c4acbe9fb4a3d'
|
|
4
|
+
data.tar.gz: 3bbf77f3ad02d92ed82ca989908deb42cbced1e8ff7b9cd830a8a3b4b46c40e2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 327acfe1f5b8d48ec9d11f369e32287b13972efdbe69c7e85f7f7a0ea7dfb520c5ac6d1be803e0b727bff6de6e231096d35c5b6a8e516aa0b3dfd98f1aec0eac
|
|
7
|
+
data.tar.gz: 6eb86ca1c5caa944ad099e556dcbc5d881b8c8be7c63e1d4bd6cccbc14d5fdfadfd4808e03c8461726f5f9e1ba97e0dcc247f0c34874eb8dc01152f6243ad14f
|
data/Gemfile.lock
CHANGED
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.
|
|
@@ -105,6 +124,26 @@ RSpec.describe User
|
|
|
105
124
|
RSpec.describe User, type: :request
|
|
106
125
|
```
|
|
107
126
|
|
|
127
|
+
### Sevencop/MethodDefinitionMultilineArguments
|
|
128
|
+
|
|
129
|
+
Inserts new lines between method definition parameters.
|
|
130
|
+
|
|
131
|
+
```ruby
|
|
132
|
+
# bad
|
|
133
|
+
def foo(a, b)
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
# good
|
|
137
|
+
def foo(
|
|
138
|
+
a,
|
|
139
|
+
b
|
|
140
|
+
)
|
|
141
|
+
|
|
142
|
+
# good
|
|
143
|
+
def foo(a)
|
|
144
|
+
end
|
|
145
|
+
```
|
|
146
|
+
|
|
108
147
|
### Sevencop/OrderField
|
|
109
148
|
|
|
110
149
|
Identifies a String including "field" is passed to `order` or `reorder`.
|
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.
|
|
@@ -17,6 +23,12 @@ Sevencop/InferredSpecType:
|
|
|
17
23
|
Enabled: false
|
|
18
24
|
VersionAdded: '0.9'
|
|
19
25
|
|
|
26
|
+
Sevencop/MethodDefinitionMultilineArguments:
|
|
27
|
+
Description: |
|
|
28
|
+
Inserts new lines between method definition parameters.
|
|
29
|
+
Enabled: false
|
|
30
|
+
VersionAdded: '0.11'
|
|
31
|
+
|
|
20
32
|
Sevencop/OrderField:
|
|
21
33
|
Description: |
|
|
22
34
|
Wrap safe SQL String by `Arel.sql`.
|
|
@@ -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
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RuboCop
|
|
4
|
+
module Cop
|
|
5
|
+
module Sevencop
|
|
6
|
+
# Inserts new lines between method definition parameters.
|
|
7
|
+
#
|
|
8
|
+
# @example
|
|
9
|
+
# # bad
|
|
10
|
+
# def foo(a, b)
|
|
11
|
+
# end
|
|
12
|
+
#
|
|
13
|
+
# # good
|
|
14
|
+
# def foo(
|
|
15
|
+
# a,
|
|
16
|
+
# b
|
|
17
|
+
# )
|
|
18
|
+
#
|
|
19
|
+
# # good
|
|
20
|
+
# def foo(a)
|
|
21
|
+
# end
|
|
22
|
+
class MethodDefinitionMultilineArguments < Base
|
|
23
|
+
extend AutoCorrector
|
|
24
|
+
|
|
25
|
+
MSG = 'Insert new lines between method definition parameters.'
|
|
26
|
+
|
|
27
|
+
# @param node [RuboCop::AST::ArgsNode]
|
|
28
|
+
def on_args(node)
|
|
29
|
+
return if method_args?(node) && multilined?(node)
|
|
30
|
+
|
|
31
|
+
add_offense(node) do |corrector|
|
|
32
|
+
autocorrect(corrector, node)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
private
|
|
37
|
+
|
|
38
|
+
# @param corrector [RuboCop::AST::Corrector]
|
|
39
|
+
# @param node [RuboCop::AST::ArgsNode]
|
|
40
|
+
# @return [String]
|
|
41
|
+
def autocorrect(corrector, node)
|
|
42
|
+
indent = ' ' * node.parent.location.expression.column
|
|
43
|
+
|
|
44
|
+
corrector.replace(
|
|
45
|
+
node.location.expression.with(
|
|
46
|
+
begin_pos: node.parent.location.name.end_pos
|
|
47
|
+
),
|
|
48
|
+
[
|
|
49
|
+
"(\n#{indent} ",
|
|
50
|
+
node.children.map(&:source).join(",\n#{indent} "),
|
|
51
|
+
"\n#{indent})"
|
|
52
|
+
].join
|
|
53
|
+
)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# @param node [RuboCop::AST::ArgsNode]
|
|
57
|
+
# @return [Boolean]
|
|
58
|
+
def multilined?(node)
|
|
59
|
+
node.children.map do |child|
|
|
60
|
+
child.location.expression.line
|
|
61
|
+
end.uniq.length == node.children.length
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# @return [Boolean]
|
|
65
|
+
def method_args?(node)
|
|
66
|
+
!node.parent.nil? && node.parent.def_type?
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
data/lib/sevencop/version.rb
CHANGED
data/lib/sevencop.rb
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
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'
|
|
10
|
+
require_relative 'rubocop/cop/sevencop/method_definition_multiline_arguments'
|
|
12
11
|
require_relative 'rubocop/cop/sevencop/order_field'
|
|
13
12
|
require_relative 'rubocop/cop/sevencop/redundant_existence_check'
|
|
14
13
|
require_relative 'rubocop/cop/sevencop/to_s_with_argument'
|
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.
|
|
4
|
+
version: 0.11.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-
|
|
11
|
+
date: 2022-09-21 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rubocop
|
|
@@ -42,8 +42,10 @@ 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
|
|
48
|
+
- lib/rubocop/cop/sevencop/method_definition_multiline_arguments.rb
|
|
47
49
|
- lib/rubocop/cop/sevencop/order_field.rb
|
|
48
50
|
- lib/rubocop/cop/sevencop/redundant_existence_check.rb
|
|
49
51
|
- lib/rubocop/cop/sevencop/to_s_with_argument.rb
|