rubocop-sensei 0.1.3 → 0.1.5

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: 4417b210dffcd34adf72e0699d8f8fb835da4adf6495800f61b4d20337ef1789
4
- data.tar.gz: 0e52dde379f1e0f6d1bef9e6e294c8504dc07862522712edcd2162ff0170ecc0
3
+ metadata.gz: 5479d9e29fc19485cd4debdeb0f6441dc444003ed7f2472227abd0e4cd95680d
4
+ data.tar.gz: 524580de696dc8e3c808f683c92414f083b108c06e1e5a8ae393e12d5bca6a6a
5
5
  SHA512:
6
- metadata.gz: 6ce15e09a41f442788be5ef73bb6612d1c2716a2860f2d1fa71b1cb8788d6ee0861039e49bdb69436a0ef1010fa0d73a8fd88ae426930795059b89c50084ebf4
7
- data.tar.gz: d9cf4aab057cc1af99cb732702eb6deda38ae9c6b4763b599ab36e836ae75a5ed86266990c68adfb7b093328f81d49db74c3a5752016369c9c1d550f1f902f7c
6
+ metadata.gz: ed56878a610c3dcfd5457d1ed94303dc002dfcc95fdd699ed34ec16a732f666b87496f27ad316386550865f362f17dfb9248cf0ac72b8e4e66ce47e303555897
7
+ data.tar.gz: 379348550eb3a117028c506a435410d707feeee23c3150827afb98ba240ae78cff9146d36be98a1eebe8d3badc54da5c1ea98f376dfa70214970eee0ff00695f
data/.rubocop.yml CHANGED
@@ -1,7 +1,7 @@
1
1
  AllCops:
2
2
  NewCops: enable
3
3
  SuggestExtensions: false
4
- TargetRubyVersion: 2.7
4
+ TargetRubyVersion: 3.0
5
5
 
6
6
  Naming/FileName:
7
7
  Exclude:
data/Gemfile.lock CHANGED
@@ -1,57 +1,65 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rubocop-sensei (0.1.3)
4
+ rubocop-sensei (0.1.5)
5
5
  rubocop
6
+ typeprof
6
7
 
7
8
  GEM
8
9
  remote: https://rubygems.org/
9
10
  specs:
10
11
  ast (2.4.2)
11
- debug (1.7.1)
12
+ debug (1.8.0)
12
13
  irb (>= 1.5.0)
13
14
  reline (>= 0.3.1)
14
15
  diff-lcs (1.5.0)
15
16
  io-console (0.6.0)
16
- irb (1.6.2)
17
- reline (>= 0.3.0)
17
+ irb (1.7.3)
18
+ reline (>= 0.3.6)
18
19
  json (2.6.3)
19
- minitest (5.17.0)
20
- parallel (1.22.1)
21
- parser (3.2.0.0)
20
+ language_server-protocol (3.17.0.3)
21
+ minitest (5.18.1)
22
+ parallel (1.23.0)
23
+ parser (3.2.2.3)
22
24
  ast (~> 2.4.1)
25
+ racc
26
+ racc (1.7.1)
23
27
  rainbow (3.1.1)
24
28
  rake (13.0.6)
25
- regexp_parser (2.6.1)
26
- reline (0.3.2)
29
+ rbs (3.1.0)
30
+ regexp_parser (2.8.1)
31
+ reline (0.3.6)
27
32
  io-console (~> 0.5)
28
33
  rexml (3.2.5)
29
34
  rspec (3.12.0)
30
35
  rspec-core (~> 3.12.0)
31
36
  rspec-expectations (~> 3.12.0)
32
37
  rspec-mocks (~> 3.12.0)
33
- rspec-core (3.12.0)
38
+ rspec-core (3.12.2)
34
39
  rspec-support (~> 3.12.0)
35
- rspec-expectations (3.12.1)
40
+ rspec-expectations (3.12.3)
36
41
  diff-lcs (>= 1.2.0, < 2.0)
37
42
  rspec-support (~> 3.12.0)
38
- rspec-mocks (3.12.1)
43
+ rspec-mocks (3.12.6)
39
44
  diff-lcs (>= 1.2.0, < 2.0)
40
45
  rspec-support (~> 3.12.0)
41
- rspec-support (3.12.0)
42
- rubocop (1.42.0)
46
+ rspec-support (3.12.1)
47
+ rubocop (1.54.2)
43
48
  json (~> 2.3)
49
+ language_server-protocol (>= 3.17.0)
44
50
  parallel (~> 1.10)
45
- parser (>= 3.1.2.1)
51
+ parser (>= 3.2.2.3)
46
52
  rainbow (>= 2.2.2, < 4.0)
47
53
  regexp_parser (>= 1.8, < 3.0)
48
54
  rexml (>= 3.2.5, < 4.0)
49
- rubocop-ast (>= 1.24.1, < 2.0)
55
+ rubocop-ast (>= 1.28.0, < 2.0)
50
56
  ruby-progressbar (~> 1.7)
51
- unicode-display_width (>= 1.4.0, < 3.0)
52
- rubocop-ast (1.24.1)
53
- parser (>= 3.1.1.0)
54
- ruby-progressbar (1.11.0)
57
+ unicode-display_width (>= 2.4.0, < 3.0)
58
+ rubocop-ast (1.29.0)
59
+ parser (>= 3.2.1.0)
60
+ ruby-progressbar (1.13.0)
61
+ typeprof (0.21.7)
62
+ rbs (>= 1.8.1)
55
63
  unicode-display_width (2.4.2)
56
64
 
57
65
  PLATFORMS
data/LICENSE.txt ADDED
@@ -0,0 +1,13 @@
1
+ Copyright 2023 Kuniaki Igarashi
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
data/README.md CHANGED
@@ -1,5 +1,145 @@
1
- # Rubocop::Sensei
1
+ # RuboSensei
2
+
3
+ - RuboSensei は書いたRuby/Railsコードに対して、より良い書き方を教えてくれるツールです
4
+ - RuboCop Gem の仕組みをつかっています
5
+ - rubocopコマンドで良い書き方のアドバイスが表示されます
6
+ - RuboCop に標準で入っているLSPをつかうとエディタ上で書いたコードのそばに表示できます
7
+
8
+ ![demo](demo.gif)
9
+
10
+ # つかい方
11
+
12
+ ## インストール
13
+
14
+ - Gemfile に以下を追加します。
15
+
16
+ ```ruby
17
+ group :development do
18
+ gem "rubocop", require: false
19
+ gem "rubocop-sensei", require: false
20
+ end
21
+ ```
22
+
23
+ - bundle installを実行します
24
+ - $ bundle install
25
+
26
+ - .rubocop.yml へ以下を追加します
27
+
28
+ ```yaml
29
+ require:
30
+ - rubocop-sensei
31
+
32
+ Lecture:
33
+ Enabled: true
34
+ ```
35
+
36
+ ## rubocopコマンドからつかう
37
+
38
+ - rubocop コマンドを実行します
39
+ - $ bundle exec rubocop
40
+
41
+ - rubocop コマンドに `--autocorrect` オプションを渡すと、対応している項目は自動修正も行います
42
+ - $ bundle exec rubocop --autocorrect
43
+
44
+ - 実行結果例
45
+
46
+ ```
47
+ app/models/book.rb:12:5: C: Lecture/PreferMap: このeachメソッドはmapメソッドで置き換えられるかもしれません。
48
+
49
+ array.each do |x| ...
50
+ ^^^^^^^^^^^^^^^^^
51
+ ```
52
+
53
+ ## VSCode で書いているコード上にアドバイスする
54
+
55
+ - VSCode で書いているコード上でリアルタイムにアドバイスを表示できます
56
+ - RuboCopに標準で入っているLSP機能と、VSCode拡張 vscode-rubocop をつかいます
57
+ - VSCode拡張 vscode-rubocop をVSCodeへインストールして有効にします
58
+ - https://marketplace.visualstudio.com/items?itemName=rubocop.vscode-rubocop
59
+ - rubocopコマンドが実行可能になっていれば、自動でRuboCopを実行して結果を表示します
60
+ - 手動でLSPを起動するコマンドを実行する必要はありません
61
+
62
+ # .rubocop.yml の書き方例
63
+
64
+ - RuboSenseiのアドバイスはLectureカテゴリとしてまとめられています
65
+
66
+ ## プロジェクトの.rubocop.ymlがないとき
67
+
68
+ - たとえば次のような内容で作成します
69
+ - RuboCopデフォルトの検査のうちStyle, LintカテゴリだけをONにして、RuboSenseiのアドバイス(Lectureカテゴリ)をONにするときの.rubocop.ymlの例
70
+
71
+ ```
72
+ AllCops:
73
+ NewCops: enable
74
+ SuggestExtensions: false
75
+
76
+ require:
77
+ - rubocop-sensei
78
+
79
+ Style:
80
+ Enabled: true
81
+
82
+ Lint:
83
+ Enabled: true
84
+
85
+ Lecture:
86
+ Enabled: true
87
+ ```
88
+
89
+ - RuboCopデフォルトの検査をオフにしてRuboSenseiのアドバイス(Lectureカテゴリ)をONにするときの.rubocop.ymlの例
90
+
91
+ ```yaml
92
+ AllCops:
93
+ DisabledByDefault: true
94
+
95
+ require:
96
+ - rubocop-sensei
97
+
98
+ Lecture:
99
+ Enabled: true
100
+
101
+ Lecture/ReplaceElsif:
102
+ Enabled: true
103
+ ```
104
+
105
+ ## プロジェクトの.rubocop.ymlがあるとき
106
+
107
+ - require設定に rubocop-sensei を追加します
108
+
109
+ ```yaml
110
+ require:
111
+ - rubocop-sensei
112
+ ```
113
+
114
+ - カテゴリ設定に Lecture を有効にする設定を追加します
115
+
116
+ ```yaml
117
+ Lecture:
118
+ Enabled: true
119
+ ```
120
+
121
+ ## アドバイスを非表示にするとき
122
+
123
+ - RuboSenseiのアドバイス表示時に書かれている名前を指定してEnabled: false設定を追記します
124
+
125
+ ```yaml
126
+ Lecture:
127
+ Enabled: true
128
+
129
+ Lecture/ReplaceElsif:
130
+ Enabled: false
131
+ ```
132
+
133
+ - 全アドバイスをオフにするときはLectureカテゴリをEnabled: falseにします
134
+ - または、Lectureカテゴリの設定を削除します
135
+
136
+ ```yaml
137
+ Lecture:
138
+ Enabled: false
139
+ ```
2
140
 
3
141
  # License
4
142
 
5
- MIT
143
+ - Apache License Version 2.0
144
+ - https://www.apache.org/licenses/LICENSE-2.0
145
+ - (RuboSensei v0.1.4 まではMITライセンス)
data/config/default.yml CHANGED
@@ -1,3 +1,28 @@
1
+ Lecture/ExplainPatternMatchCaseIn:
2
+ Description: 'Explain pattern match case in'
3
+ Enabled: true
4
+ VersionAdded: '0.1.5'
5
+
6
+ Lecture/ExplainNumberedParameters:
7
+ Description: 'Explain numbered parameters'
8
+ Enabled: true
9
+ VersionAdded: '0.1.5'
10
+
11
+ Lecture/ExplainSymbolToProc :
12
+ Description: 'Explain receiver.method(&:method)'
13
+ Enabled: true
14
+ VersionAdded: '0.1.4'
15
+
16
+ Lecture/PreferSymbolToProc:
17
+ Description: 'might be replaced with method(&:method)'
18
+ Enabled: true
19
+ VersionAdded: '0.1.4'
20
+
21
+ Lecture/PreferMap:
22
+ Description: '`each` can be replaced with `map`'
23
+ Enabled: true
24
+ VersionAdded: '0.1.3'
25
+
1
26
  Lecture/ReplaceElsif:
2
27
  Description: "`elsif` can be replaced with `case`"
3
28
  Enabled: true
data/demo.gif ADDED
Binary file
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Lecture
6
+ # foo.bar{ _1.baz } は foo.bar{|x| x.baz } と同じです。
7
+ # _1と書くことで、||で囲まれたブロック変数を書かずに短く書けます。
8
+ # ナンバーパラメータと呼ばれます。
9
+ # _1, _2, _3, ... と複数書くこともできます。
10
+ # foo.bar{ [_1,_2] } は foo.bar{|x,y| [x,y] }と同じです。
11
+ #
12
+ # @example
13
+ # # good
14
+ # foo.bar{ _1.baz }
15
+ #
16
+ # # good
17
+ # foo.bar{|x| x.baz }
18
+ #
19
+ class ExplainNumberedParameters < Base
20
+ MSG = <<~STRING
21
+ foo.bar{ _1.baz } は foo.bar{|x| x.baz } と同じです。
22
+ _1と書くことで、||で囲まれたブロック変数を書かずに短く書けます。
23
+ ナンバーパラメータと呼ばれます。
24
+ _1, _2, _3, ... と複数書くこともできます。
25
+ foo.bar{ [_1,_2] } は foo.bar{|x,y| [x,y] }と同じです。
26
+ STRING
27
+
28
+ def on_numblock(node)
29
+ add_offense(node)
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Lecture
6
+ # case in はパターンマッチ構文です。次のようにつかいます。
7
+ # case [1,2,3]
8
+ # in [x,2,3]
9
+ # end
10
+ # p x #=> 1
11
+ # caseにつづけて書いた式(この例では [1,2,3] )を実行して、結果とマッチするものをin節に書いたパターン群から探します。
12
+ # in節には変数入りのパターンを書くことができ、caseにつづけて書いた式の結果とパターンとを対応させ、それぞれの変数に代入します。
13
+ #
14
+ # 便利なケースは、深いハッシュや配列にマッチさせるときや、複数の変数に代入するときです。
15
+ # case { a: [1,2,3], b: { c: 10 }}
16
+ # in { a: [x,2,3], b: { c: y }}
17
+ # end
18
+ # p x #=> 1
19
+ # p y #=> 10
20
+ #
21
+ # @example
22
+ # # good
23
+ # case [1,2,3]
24
+ # in [x,2,3]
25
+ # in [x,5,6]
26
+ # end
27
+ #
28
+ class ExplainPatternMatchCaseIn < Base
29
+ MSG = <<~STRING
30
+ case in はパターンマッチ構文です。次のようにつかいます。
31
+ case [1,2,3]
32
+ in [x,2,3]
33
+ end
34
+ p x #=> 1
35
+ caseにつづけて書いた式(例では [1,2,3] )を実行して、結果とマッチするものをin節に書いたパターン群から探します。
36
+ in節には変数入りのパターンを書くことができ、caseにつづけて書いた式の結果とパターンとを対応させ、それぞれの変数に代入します。
37
+ STRING
38
+
39
+ # 1行inでは呼ばれないことを確認済み
40
+ def on_case_match(node)
41
+ add_offense(node)
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Lecture
6
+ # foo.bar(&:baz) は次のコードと同じです。
7
+ #
8
+ # foo.bar do |x|
9
+ # x.baz
10
+ # end
11
+ #
12
+ # @example
13
+ # # good
14
+ # ["a","b","c"].map do |x|
15
+ # x.upcase
16
+ # end
17
+ #
18
+ # # good
19
+ # ["a","b","c"].map(&:upcase)
20
+ #
21
+ class ExplainSymbolToProc < Base
22
+ MSG = <<~STRING
23
+ foo.bar(&:baz) は次のコードと同じです。
24
+
25
+ foo.bar do |x|
26
+ x.baz
27
+ end
28
+ STRING
29
+
30
+ def on_send(node)
31
+ block_pass_potential_node = node.arguments.first
32
+ if block_pass_potential_node &&
33
+ block_pass_potential_node.type == :block_pass &&
34
+ block_pass_potential_node.child_nodes.first.sym_type?
35
+ add_offense(node)
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "typeprof"
4
+
5
+ module RuboCop
6
+ module Cop
7
+ module Lecture
8
+ # `each`メソッドは`map`メソッドで置き換えられることがあります。
9
+ # eachメソッドの結果、Arrayを得ているときはmapで書き換え可能かを検討してみてください。
10
+ #
11
+ # @example
12
+ # # bad
13
+ # result = []
14
+ # [1,2,3].each do |x|
15
+ # result << x * 2
16
+ # end
17
+ #
18
+ # # good
19
+ # [1,2,3].map do |x|
20
+ # x * 2
21
+ # end
22
+ #
23
+ class PreferMap < Base
24
+ MSG = <<~STRING
25
+ この`each`メソッドは`map`メソッドで置き換えられるかもしれません。
26
+ STRING
27
+
28
+ # TODO: auto correct
29
+ def on_block(node)
30
+ return unless node.child_nodes.any?{|x| x.respond_to?(:method_name) && x.method_name == :each}
31
+
32
+ # mapに書き換え可能そうか
33
+ begin
34
+ map_potential_methods = [:<<, :push, :unshift]
35
+ node.
36
+ child_nodes.
37
+ select{|x| x.respond_to?(:method_name)}.
38
+ select{|x| map_potential_methods.include?(x.method_name) }.each do |map_potential_method_node|
39
+
40
+ ## map_potential_methodsのレシーバの型がArrayであるかどうかをTypeProfで調査
41
+ receiver_variable_name = node.child_nodes.last.receiver.node_parts.first.to_s
42
+ rb_text = node.parent.source
43
+ rb_text += "\np #{receiver_variable_name}" # TypeProf調査行
44
+ target_line_number = rb_text.lines.count
45
+ rb_files = [["target.rb", rb_text]]
46
+ rbs_files = []
47
+
48
+ output = StringIO.new(String.new("")) # make mutable String object
49
+ options = { show_errors: true }
50
+ config = TypeProf::ConfigData.new(rb_files: rb_files, rbs_files: rbs_files, output: output, max_sec: 5, options: options)
51
+ TypeProf.analyze(config)
52
+ #=> "# TypeProf 0.21.4\n\n# Revealed types\n# target.rb:6 #=> Array[Integer]\n\n# Classes\n"
53
+ expected_type = output.string.match(/target.rb:#{target_line_number}\s*#=>\s*(.+)$/).captures.first
54
+ #=> Array[SomeClass] or untyped or somethings
55
+ if expected_type.match(/(.+)\[.+\]/).captures.first == "Array"
56
+ add_offense(node)
57
+ return
58
+ end
59
+ end
60
+ rescue => e
61
+ # 解析失敗
62
+ # p e
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Lecture
6
+ # TODO: 書き換え
7
+ # このブロックはmethod(&:method)で置き換えられるかもしれません。
8
+ #
9
+ # @example
10
+ # # bad
11
+ # ["a","b","c"].map do |x|
12
+ # x.upcase
13
+ # end
14
+ #
15
+ # # good
16
+ # ["a","b","c"].map(&:upcase)
17
+ #
18
+ class PreferSymbolToProc < Base
19
+ # TODO: 追記
20
+ MSG = <<~STRING
21
+ このブロックはmethod(&:method)で置き換えられるかもしれません。
22
+ STRING
23
+
24
+ # TODO: auto correct
25
+ def on_block(node)
26
+ target_nodes = node.child_nodes - [node.send_node] # ブロックが渡されている主メソッドは除く
27
+ send_type_nodes = target_nodes.select(&:send_type?) # :begin nodeが入らず、直下にあること
28
+ if send_type_nodes.count == 1 && !send_type_nodes.last.arguments?
29
+ add_offense(node)
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -1,4 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative 'lecture/explain_numbered_parameters'
4
+ require_relative 'lecture/explain_pattern_match_case_in'
5
+ require_relative 'lecture/prefer_symbol_to_proc'
6
+ require_relative 'lecture/explain_symbol_to_proc'
7
+ require_relative 'lecture/prefer_map'
3
8
  require_relative 'lecture/replace_elsif'
4
9
  require_relative 'lecture/unless_else'
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RuboCop
4
4
  module Sensei
5
- VERSION = "0.1.3"
5
+ VERSION = "0.1.5"
6
6
  end
7
7
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'rubocop'
4
+ require 'typeprof'
4
5
 
5
6
  require_relative 'rubocop/sensei'
6
7
  require_relative 'rubocop/sensei/version'
@@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
11
11
  spec.summary = "Rubocop Sensei"
12
12
  spec.description = "."
13
13
  spec.homepage = "https://github.com/igaiga/rubocop-sensei"
14
- spec.required_ruby_version = ">= 2.7.0"
14
+ spec.required_ruby_version = ">= 3.0.0"
15
15
 
16
16
  # spec.metadata["allowed_push_host"] = "TODO: Set to your gem server 'https://example.com'"
17
17
 
@@ -37,5 +37,6 @@ Gem::Specification.new do |spec|
37
37
  # guide at: https://bundler.io/guides/creating_gem.html
38
38
 
39
39
  spec.add_runtime_dependency 'rubocop'
40
+ spec.add_runtime_dependency 'typeprof'
40
41
  end
41
42
 
@@ -0,0 +1,8 @@
1
+ AllCops:
2
+ DisabledByDefault: true
3
+
4
+ require:
5
+ - rubocop-sensei
6
+
7
+ Lecture:
8
+ Enabled: true
data/sample/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rubocop", require: false
6
+ gem "rubocop-sensei", require: false
@@ -0,0 +1,41 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ ast (2.4.2)
5
+ json (2.6.3)
6
+ parallel (1.23.0)
7
+ parser (3.2.2.1)
8
+ ast (~> 2.4.1)
9
+ rainbow (3.1.1)
10
+ rbs (3.0.4)
11
+ regexp_parser (2.8.0)
12
+ rexml (3.2.5)
13
+ rubocop (1.50.2)
14
+ json (~> 2.3)
15
+ parallel (~> 1.10)
16
+ parser (>= 3.2.0.0)
17
+ rainbow (>= 2.2.2, < 4.0)
18
+ regexp_parser (>= 1.8, < 3.0)
19
+ rexml (>= 3.2.5, < 4.0)
20
+ rubocop-ast (>= 1.28.0, < 2.0)
21
+ ruby-progressbar (~> 1.7)
22
+ unicode-display_width (>= 2.4.0, < 3.0)
23
+ rubocop-ast (1.28.0)
24
+ parser (>= 3.2.1.0)
25
+ rubocop-sensei (0.1.4)
26
+ rubocop
27
+ typeprof
28
+ ruby-progressbar (1.13.0)
29
+ typeprof (0.21.7)
30
+ rbs (>= 1.8.1)
31
+ unicode-display_width (2.4.2)
32
+
33
+ PLATFORMS
34
+ arm64-darwin-22
35
+
36
+ DEPENDENCIES
37
+ rubocop
38
+ rubocop-sensei
39
+
40
+ BUNDLED WITH
41
+ 2.4.10
data/sample/target.rb ADDED
@@ -0,0 +1,4 @@
1
+ result = []
2
+ a.each do |x|
3
+ result << x * 2
4
+ 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.3
4
+ version: 0.1.5
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-01-05 00:00:00.000000000 Z
11
+ date: 2023-07-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubocop
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: typeprof
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  description: "."
28
42
  email:
29
43
  - kuniaki.igarashi@garnettech373.com
@@ -36,10 +50,17 @@ files:
36
50
  - Gemfile
37
51
  - Gemfile.lock
38
52
  - 'LICENSE '
53
+ - LICENSE.txt
39
54
  - README.md
40
55
  - Rakefile
41
56
  - config/default.yml
57
+ - demo.gif
42
58
  - lib/rubocop-sensei.rb
59
+ - lib/rubocop/cop/lecture/explain_numbered_parameters.rb
60
+ - lib/rubocop/cop/lecture/explain_pattern_match_case_in.rb
61
+ - lib/rubocop/cop/lecture/explain_symbol_to_proc.rb
62
+ - lib/rubocop/cop/lecture/prefer_map.rb
63
+ - lib/rubocop/cop/lecture/prefer_symbol_to_proc.rb
43
64
  - lib/rubocop/cop/lecture/replace_elsif.rb
44
65
  - lib/rubocop/cop/lecture/unless_else.rb
45
66
  - lib/rubocop/cop/sensei_cops.rb
@@ -47,6 +68,10 @@ files:
47
68
  - lib/rubocop/sensei/inject.rb
48
69
  - lib/rubocop/sensei/version.rb
49
70
  - rubocop-sensei.gemspec
71
+ - sample/.rubocop.yml
72
+ - sample/Gemfile
73
+ - sample/Gemfile.lock
74
+ - sample/target.rb
50
75
  - sig/rubocop/sensei.rbs
51
76
  homepage: https://github.com/igaiga/rubocop-sensei
52
77
  licenses: []
@@ -61,14 +86,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
61
86
  requirements:
62
87
  - - ">="
63
88
  - !ruby/object:Gem::Version
64
- version: 2.7.0
89
+ version: 3.0.0
65
90
  required_rubygems_version: !ruby/object:Gem::Requirement
66
91
  requirements:
67
92
  - - ">="
68
93
  - !ruby/object:Gem::Version
69
94
  version: '0'
70
95
  requirements: []
71
- rubygems_version: 3.4.1
96
+ rubygems_version: 3.4.16
72
97
  signing_key:
73
98
  specification_version: 4
74
99
  summary: Rubocop Sensei