yoshiki 11.0.0.pre.9 → 11.0.0.pre.10
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/lib/rubocop/cop/yoshiki/style/it_block_parameter.rb +51 -4
- data/lib/yoshiki/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 5bf1901967e5f7d00c6463a17508751166e6981eb1edac1172e52c44c0623580
|
|
4
|
+
data.tar.gz: 2c82f7056a5fa916ff1eff0d54c688113ff285fac49f8b7d0fe8469ebce33e70
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ed3f86f1b4cf9bacb1ca3da1793f2b5a9fe6e0ff2b76b486600b59a81f574ef869234a7a47720be1a0f6958ef8ec47d2b947310993fb013ccb5a604fd88c87de
|
|
7
|
+
data.tar.gz: '00294aa60e50cb7d4152902b0de1b4b22145c6fafc55f76ecbb71a7fa28aea2ba80083af30cc3708f95bcd88ded99d7a0e8066613d74c5ef91661851acb2b25c'
|
data/Gemfile.lock
CHANGED
|
@@ -5,15 +5,23 @@ module RuboCop
|
|
|
5
5
|
# Checks for blocks with one argument where `it` block parameter can be used.
|
|
6
6
|
#
|
|
7
7
|
# `force_single_line` requires a single-line one-parameter block to use `it`.
|
|
8
|
-
# Multi-line blocks may keep a named parameter
|
|
8
|
+
# Multi-line blocks may keep a named parameter, except `|it|` — never
|
|
9
|
+
# declare that name; it is the anonymous parameter.
|
|
10
|
+
#
|
|
11
|
+
# Hash value omission keeps the original key (`name:` becomes
|
|
12
|
+
# `name: it`, not `it:`). Replacing the identifier would make
|
|
13
|
+
# `it:`, which calls a method named `it` instead of the parameter.
|
|
9
14
|
#
|
|
10
15
|
# @example EnforcedStyle: force_single_line
|
|
11
16
|
# # bad
|
|
12
17
|
# block { |named_param| do_something(named_param) }
|
|
13
18
|
# block { do_something(_1) }
|
|
19
|
+
# block { |name| remember!(name:) }
|
|
20
|
+
# block { |it| do_something(it) }
|
|
14
21
|
#
|
|
15
22
|
# # good
|
|
16
23
|
# block { do_something(it) }
|
|
24
|
+
# block { remember!(name: it) }
|
|
17
25
|
# block do |named_param|
|
|
18
26
|
# do_something(named_param)
|
|
19
27
|
# end
|
|
@@ -29,6 +37,7 @@ module RuboCop
|
|
|
29
37
|
minimum_target_ruby_version 3.4
|
|
30
38
|
|
|
31
39
|
def on_block node
|
|
40
|
+
return correct_named_it(node) if named_it_parameter?(node)
|
|
32
41
|
return unless force_single_line?
|
|
33
42
|
return unless node.single_line?
|
|
34
43
|
return unless node.arguments.one?
|
|
@@ -53,9 +62,26 @@ module RuboCop
|
|
|
53
62
|
style == :force_single_line
|
|
54
63
|
end
|
|
55
64
|
|
|
65
|
+
def named_it_parameter? node
|
|
66
|
+
node.arguments.one? &&
|
|
67
|
+
node.first_argument.arg_type? &&
|
|
68
|
+
node.first_argument.source == 'it'
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def correct_named_it node
|
|
72
|
+
correct_to_it(node, 'it') do |corrector|
|
|
73
|
+
remove_block_arguments(corrector, node)
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
56
77
|
def remove_block_arguments corrector, node
|
|
57
78
|
range = node.arguments.source_range
|
|
58
|
-
|
|
79
|
+
buf = range.source_buffer.source
|
|
80
|
+
if buf[range.end_pos] == ' '
|
|
81
|
+
range = range.adjust(end_pos: 1)
|
|
82
|
+
elsif buf[range.begin_pos - 1] == ' '
|
|
83
|
+
range = range.adjust(begin_pos: -1)
|
|
84
|
+
end
|
|
59
85
|
corrector.remove(range)
|
|
60
86
|
end
|
|
61
87
|
|
|
@@ -65,13 +91,34 @@ module RuboCop
|
|
|
65
91
|
return if variables.any? { used_in_nested_block?(it, node) }
|
|
66
92
|
|
|
67
93
|
variables.each do |variable|
|
|
68
|
-
|
|
94
|
+
target = omitted_pair_for(variable) || variable
|
|
95
|
+
add_offense(target, message: MSG_USE_IT_PARAMETER) do |corrector|
|
|
69
96
|
before_replace&.call(corrector)
|
|
70
|
-
corrector
|
|
97
|
+
replace_with_it(corrector, variable)
|
|
71
98
|
end
|
|
72
99
|
end
|
|
73
100
|
end
|
|
74
101
|
|
|
102
|
+
def replace_with_it corrector, variable
|
|
103
|
+
pair = omitted_pair_for(variable)
|
|
104
|
+
if pair
|
|
105
|
+
corrector.replace(pair, "#{ pair.key.source }: it")
|
|
106
|
+
else
|
|
107
|
+
corrector.replace(variable, 'it')
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# `name:` shares one identifier for key and value. Replacing the
|
|
112
|
+
# lvar would rewrite the keyword to `it:` (a method call).
|
|
113
|
+
def omitted_pair_for variable
|
|
114
|
+
parent = variable.parent
|
|
115
|
+
return unless parent&.pair_type?
|
|
116
|
+
return unless parent.value_omission?
|
|
117
|
+
return unless parent.value.equal?(variable)
|
|
118
|
+
|
|
119
|
+
parent
|
|
120
|
+
end
|
|
121
|
+
|
|
75
122
|
def find_block_variables node, name
|
|
76
123
|
return [] unless node.body
|
|
77
124
|
|
data/lib/yoshiki/version.rb
CHANGED