rubocop-sensei 0.1.6 → 0.1.7
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/CHANGELOG.md +6 -0
- data/Gemfile.lock +12 -10
- data/config/default.yml +16 -1
- data/lib/rubocop/cop/lecture/explain_bang_bang.rb +43 -0
- data/lib/rubocop/cop/lecture/explain_lonely_operator.rb +34 -0
- data/lib/rubocop/cop/lecture/explain_or_assign.rb +49 -0
- data/lib/rubocop/cop/sensei_cops.rb +4 -1
- data/lib/rubocop/sensei/version.rb +1 -1
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c13f70806132906347c4d5e1f38a1f173635fe7c7d799a3734bce52e2f6ed9ea
|
4
|
+
data.tar.gz: 6a56681e15b4aa00effdebd37452606022d79ba1766d01c36dbba8ed2b426056
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f91f6c01b096d5dbf77474ddb3e5e8fc2c53f535df88dff4440b04272f8094cac459733ab6050b48e0fa19d4ff4a09c7fdd5ab6aee700ceec6f9fb7ec39be544
|
7
|
+
data.tar.gz: 32ed8ab0037586822119e8e5c9ba5cc36f233c9808c5e433826b856155de77db93dc1d180d4c7f9cbba6221142dea4f16d5966be7525fa3a0e46b30a69a51ef9
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
rubocop-sensei (0.1.
|
4
|
+
rubocop-sensei (0.1.7)
|
5
5
|
rubocop
|
6
6
|
typeprof
|
7
7
|
|
@@ -9,6 +9,7 @@ GEM
|
|
9
9
|
remote: https://rubygems.org/
|
10
10
|
specs:
|
11
11
|
ast (2.4.2)
|
12
|
+
base64 (0.1.1)
|
12
13
|
debug (1.8.0)
|
13
14
|
irb (>= 1.5.0)
|
14
15
|
reline (>= 0.3.1)
|
@@ -20,17 +21,17 @@ GEM
|
|
20
21
|
language_server-protocol (3.17.0.3)
|
21
22
|
minitest (5.18.1)
|
22
23
|
parallel (1.23.0)
|
23
|
-
parser (3.2.2.
|
24
|
+
parser (3.2.2.4)
|
24
25
|
ast (~> 2.4.1)
|
25
26
|
racc
|
26
27
|
racc (1.7.1)
|
27
28
|
rainbow (3.1.1)
|
28
29
|
rake (13.0.6)
|
29
|
-
rbs (3.
|
30
|
-
regexp_parser (2.8.
|
30
|
+
rbs (3.2.2)
|
31
|
+
regexp_parser (2.8.2)
|
31
32
|
reline (0.3.6)
|
32
33
|
io-console (~> 0.5)
|
33
|
-
rexml (3.2.
|
34
|
+
rexml (3.2.6)
|
34
35
|
rspec (3.12.0)
|
35
36
|
rspec-core (~> 3.12.0)
|
36
37
|
rspec-expectations (~> 3.12.0)
|
@@ -44,23 +45,24 @@ GEM
|
|
44
45
|
diff-lcs (>= 1.2.0, < 2.0)
|
45
46
|
rspec-support (~> 3.12.0)
|
46
47
|
rspec-support (3.12.1)
|
47
|
-
rubocop (1.
|
48
|
+
rubocop (1.57.1)
|
49
|
+
base64 (~> 0.1.1)
|
48
50
|
json (~> 2.3)
|
49
51
|
language_server-protocol (>= 3.17.0)
|
50
52
|
parallel (~> 1.10)
|
51
|
-
parser (>= 3.2.2.
|
53
|
+
parser (>= 3.2.2.4)
|
52
54
|
rainbow (>= 2.2.2, < 4.0)
|
53
55
|
regexp_parser (>= 1.8, < 3.0)
|
54
56
|
rexml (>= 3.2.5, < 4.0)
|
55
|
-
rubocop-ast (>= 1.28.
|
57
|
+
rubocop-ast (>= 1.28.1, < 2.0)
|
56
58
|
ruby-progressbar (~> 1.7)
|
57
59
|
unicode-display_width (>= 2.4.0, < 3.0)
|
58
60
|
rubocop-ast (1.29.0)
|
59
61
|
parser (>= 3.2.1.0)
|
60
62
|
ruby-progressbar (1.13.0)
|
61
|
-
typeprof (0.21.
|
63
|
+
typeprof (0.21.8)
|
62
64
|
rbs (>= 1.8.1)
|
63
|
-
unicode-display_width (2.
|
65
|
+
unicode-display_width (2.5.0)
|
64
66
|
|
65
67
|
PLATFORMS
|
66
68
|
arm64-darwin-21
|
data/config/default.yml
CHANGED
@@ -1,8 +1,23 @@
|
|
1
|
+
Lecture/ExplainBangBang:
|
2
|
+
Description: "!!variable の説明"
|
3
|
+
Enabled: true
|
4
|
+
VersionAdded: "0.1.7"
|
5
|
+
|
6
|
+
Lecture/ExplainLonelyOperator:
|
7
|
+
Description: "&. の説明"
|
8
|
+
Enabled: true
|
9
|
+
VersionAdded: "0.1.7"
|
10
|
+
|
1
11
|
Lecture/ExplainNumberedParameters:
|
2
12
|
Description: "ナンバーパラメータの説明"
|
3
13
|
Enabled: true
|
4
14
|
VersionAdded: "0.1.5"
|
5
15
|
|
16
|
+
Lecture/ExplainOrAssign:
|
17
|
+
Description: "||= の説明"
|
18
|
+
Enabled: true
|
19
|
+
VersionAdded: "0.1.7"
|
20
|
+
|
6
21
|
Lecture/ExplainPatternMatchCaseIn:
|
7
22
|
Description: "パターンマッチ case in の説明"
|
8
23
|
Enabled: true
|
@@ -39,6 +54,6 @@ Lecture/ReplaceElsif:
|
|
39
54
|
VersionAdded: "0.1.0"
|
40
55
|
|
41
56
|
Lecture/UnlessElse:
|
42
|
-
Description: "unless else はやめてif に書き換えよう"
|
57
|
+
Description: "unless else はやめて if に書き換えよう"
|
43
58
|
Enabled: true
|
44
59
|
VersionAdded: "0.1.3"
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Lecture
|
6
|
+
# `!!`はオブジェクトをtrueまたはfalseに変換する書き方です。
|
7
|
+
# 真偽反転の!が2回つかわれていると解釈すれば意味を取りやすいです。
|
8
|
+
# nilまたはfalseのときはfalseへ、それ以外はtrueへ変換します。
|
9
|
+
# !!は必ずtrueまたはfalseに変換するので、任意のオブジェクトやnilをメソッドから返したくないときによくつかわれます。
|
10
|
+
# メソッド名の末尾が?で終わるメソッドはtrue/falseを返す慣習になっているので、!!が便利につかえる場面が多いです。
|
11
|
+
# 一方で、ifで判定するときなど、メソッドの戻り値としてつかわないときは!!をつけずにそのままつかうことが多いです。
|
12
|
+
#
|
13
|
+
# @example
|
14
|
+
# # good
|
15
|
+
# foo = 1
|
16
|
+
# !!foo
|
17
|
+
#
|
18
|
+
class ExplainBangBang < Base
|
19
|
+
MSG = <<~STRING
|
20
|
+
`!!`はオブジェクトをtrueまたはfalseに変換する書き方です。
|
21
|
+
真偽反転の!が2回つかわれていると解釈すれば意味を取りやすいです。
|
22
|
+
nilまたはfalseのときはfalseへ、それ以外はtrueへ変換します。
|
23
|
+
|
24
|
+
!!は必ずtrueまたはfalseに変換するので、任意のオブジェクトやnilをメソッドから返したくないときによくつかわれます。
|
25
|
+
メソッド名の末尾が?で終わるメソッドはtrue/falseを返す慣習になっているので、!!が便利につかえる場面が多いです。
|
26
|
+
|
27
|
+
一方で、ifで判定するときなど、メソッドの戻り値としてつかわないときは!!をつけずにそのままつかうことが多いです。
|
28
|
+
STRING
|
29
|
+
|
30
|
+
RESTRICT_ON_SEND = %i[!].freeze
|
31
|
+
|
32
|
+
def on_send(node)
|
33
|
+
if node.send_type? && node.method_name == :!
|
34
|
+
if node.children.any?{|n| n.respond_to?(:send_type?) && n.send_type? && n.method_name == :! }
|
35
|
+
add_offense(node)
|
36
|
+
return
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Lecture
|
6
|
+
# `&.`はレシーバのnilチェックをしてメソッド呼び出しをする演算子です。
|
7
|
+
# foo&.methodでは、fooがnilのときはメソッド呼び出しをせずnilを返し、fooがnil以外ではmethodメソッドを呼び出します。
|
8
|
+
#
|
9
|
+
# &.は通称「ぼっち演算子」とも呼ばれます。人が1人でひざを抱えて座っているように見えるからです。
|
10
|
+
#
|
11
|
+
# @example
|
12
|
+
# # good
|
13
|
+
# foo = nil
|
14
|
+
# foo&.upcase #=> nil
|
15
|
+
#
|
16
|
+
# # good
|
17
|
+
# foo = "ruby"
|
18
|
+
# foo&.upcase #=> "RUBY"
|
19
|
+
#
|
20
|
+
class ExplainLonelyOperator < Base
|
21
|
+
MSG = <<~STRING
|
22
|
+
`&.`はレシーバのnilチェックをしてメソッド呼び出しをする演算子です。
|
23
|
+
foo&.methodでは、fooがnilのときはメソッド呼び出しをせずnilを返し、fooがnil以外ではmethodメソッドを呼び出します。
|
24
|
+
|
25
|
+
&.は通称「ぼっち演算子」とも呼ばれます。人が1人でひざを抱えて座っているように見えるからです。
|
26
|
+
STRING
|
27
|
+
|
28
|
+
def on_csend(node)
|
29
|
+
add_offense(node)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Lecture
|
6
|
+
# `foo ||= 1` は変数fooがnilまたはfalseのときに変数fooへ1を代入し、それ以外のときは何もしません。
|
7
|
+
# 変数 ||= 初期値 という形で初期化時によくつかわれます。
|
8
|
+
#
|
9
|
+
# `foo ||= 1` は `foo = foo || 1` と同じです。
|
10
|
+
# || は最初の項がnilまたはfalseのときだけ2項目を戻り値にして、それ以外のときは最初の項を戻り値にします。
|
11
|
+
#
|
12
|
+
# @example
|
13
|
+
# # good
|
14
|
+
# foo = 555
|
15
|
+
# foo ||= 1
|
16
|
+
# p foo #=> 555
|
17
|
+
#
|
18
|
+
# foo = nil
|
19
|
+
# foo ||= 1
|
20
|
+
# p foo #=> 1
|
21
|
+
#
|
22
|
+
# # bad
|
23
|
+
# foo = false
|
24
|
+
# foo ||= true
|
25
|
+
# p foo #=> true # 既に代入済みのfalseが上書きされてしまった
|
26
|
+
#
|
27
|
+
class ExplainOrAssign < Base
|
28
|
+
MSG = <<~STRING
|
29
|
+
`foo ||= 1` は変数fooがnilまたはfalseのときに変数fooへ1を代入し、それ以外のときは何もしません。
|
30
|
+
変数 ||= 初期値 という形で初期化時によくつかわれます。
|
31
|
+
|
32
|
+
`foo ||= 1` は `foo = foo || 1` と同じです。
|
33
|
+
|| は最初の項がnilまたはfalseのときだけ2項目を戻り値にして、それ以外のときは最初の項を戻り値にします。
|
34
|
+
|
35
|
+
ざっくりと
|
36
|
+
「変数に何か入っていたらそのまま、何も入っていなかったら||=の右に書かれたオブジェクトを初期値としてつかう」
|
37
|
+
と考えると覚えやすいかもしれません。
|
38
|
+
|
39
|
+
ただし、falseやnilを初期値につかうときは気をつけてください。
|
40
|
+
事前に意図的にfalseやnilが代入されているときにも代入されるので、意図しない動作になるかもしれません。
|
41
|
+
STRING
|
42
|
+
|
43
|
+
def on_or_asgn(node)
|
44
|
+
add_offense(node)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -1,11 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative 'lecture/explain_bang_bang'
|
4
|
+
require_relative 'lecture/explain_lonely_operator'
|
3
5
|
require_relative 'lecture/explain_numbered_parameters'
|
6
|
+
require_relative 'lecture/explain_or_assign'
|
4
7
|
require_relative 'lecture/explain_pattern_match_case_in'
|
5
8
|
require_relative 'lecture/explain_pattern_match_in'
|
6
9
|
require_relative 'lecture/explain_pattern_match_rocket'
|
7
|
-
require_relative 'lecture/prefer_symbol_to_proc'
|
8
10
|
require_relative 'lecture/explain_symbol_to_proc'
|
11
|
+
require_relative 'lecture/prefer_symbol_to_proc'
|
9
12
|
require_relative 'lecture/prefer_map'
|
10
13
|
require_relative 'lecture/replace_elsif'
|
11
14
|
require_relative 'lecture/unless_else'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubocop-sensei
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kuniaki Igarashi
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-10-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubocop
|
@@ -57,7 +57,10 @@ files:
|
|
57
57
|
- demo.gif
|
58
58
|
- demo.png
|
59
59
|
- lib/rubocop-sensei.rb
|
60
|
+
- lib/rubocop/cop/lecture/explain_bang_bang.rb
|
61
|
+
- lib/rubocop/cop/lecture/explain_lonely_operator.rb
|
60
62
|
- lib/rubocop/cop/lecture/explain_numbered_parameters.rb
|
63
|
+
- lib/rubocop/cop/lecture/explain_or_assign.rb
|
61
64
|
- lib/rubocop/cop/lecture/explain_pattern_match_case_in.rb
|
62
65
|
- lib/rubocop/cop/lecture/explain_pattern_match_in.rb
|
63
66
|
- lib/rubocop/cop/lecture/explain_pattern_match_rocket.rb
|
@@ -96,7 +99,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
96
99
|
- !ruby/object:Gem::Version
|
97
100
|
version: '0'
|
98
101
|
requirements: []
|
99
|
-
rubygems_version: 3.4.
|
102
|
+
rubygems_version: 3.4.20
|
100
103
|
signing_key:
|
101
104
|
specification_version: 4
|
102
105
|
summary: Rubocop Sensei
|