rubocop-sensei 0.1.6 → 0.1.7

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: 47bef4bcd3ea0dc376372709a49308840b766ca216fcb05017f4a6900c31dd83
4
- data.tar.gz: f2b90b2573cf06ac25b91a44f150038d9343e6a020e63a5cc65e7a7b246ba569
3
+ metadata.gz: c13f70806132906347c4d5e1f38a1f173635fe7c7d799a3734bce52e2f6ed9ea
4
+ data.tar.gz: 6a56681e15b4aa00effdebd37452606022d79ba1766d01c36dbba8ed2b426056
5
5
  SHA512:
6
- metadata.gz: ad93f37ce2557726a5594662eb38fd4d75946cc2d46ba7673c602ee8353dfc1c565e633ab76d4088521b6f1d1dcb6fe64b9ab98111aa9ffdf323be1bb4ddaf05
7
- data.tar.gz: 4bc4eac17a618626da23e88f7fe31f6d31b02ce766459145acdc23c8418c494ca0abce72e64862b9da861878ef2d66e3015903c8b749df76e207c6d04b4bc930
6
+ metadata.gz: f91f6c01b096d5dbf77474ddb3e5e8fc2c53f535df88dff4440b04272f8094cac459733ab6050b48e0fa19d4ff4a09c7fdd5ab6aee700ceec6f9fb7ec39be544
7
+ data.tar.gz: 32ed8ab0037586822119e8e5c9ba5cc36f233c9808c5e433826b856155de77db93dc1d180d4c7f9cbba6221142dea4f16d5966be7525fa3a0e46b30a69a51ef9
data/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Change log
2
2
 
3
+ ## 0.1.7 (2023-10-25)
4
+
5
+ - Lecture/ExplainBangBang
6
+ - Lecture/ExplainOrAssign
7
+ - Lecture/ExplainLonelyOperator
8
+
3
9
  ## 0.1.6 (2023-07-18)
4
10
 
5
11
  - Lecture/ExplainPatternMatchIn
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rubocop-sensei (0.1.6)
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.3)
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.1.0)
30
- regexp_parser (2.8.1)
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.5)
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.54.2)
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.3)
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.0, < 2.0)
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.7)
63
+ typeprof (0.21.8)
62
64
  rbs (>= 1.8.1)
63
- unicode-display_width (2.4.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'
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RuboCop
4
4
  module Sensei
5
- VERSION = "0.1.6"
5
+ VERSION = "0.1.7"
6
6
  end
7
7
  end
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.6
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-07-18 00:00:00.000000000 Z
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.16
102
+ rubygems_version: 3.4.20
100
103
  signing_key:
101
104
  specification_version: 4
102
105
  summary: Rubocop Sensei