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 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