Slide 1

Slide 1 text

Tomoya Chiba (@tomoasleep) rbs-inline 生成してみた 1

Slide 2

Slide 2 text

Tomoya Chiba Twitter: @nemunemu3desu その他: @tomoasleep Qiita 株式会社 シニアエンジニア 4 時間前に LT に申し込みました Ruby に型が欲しい派閥 型はコード中に書きたい派閥 自己紹介 2

Slide 3

Slide 3 text

rbs-inline が作られている 3

Slide 4

Slide 4 text

soutaro/rbs-inline: Inline RBS type declaration コメントとして RBS が書ける rbs-inline が作られている 4

Slide 5

Slide 5 text

soutaro/rbs-inline: Inline RBS type declaration コメントとして RBS が書ける rbs-inline が作られている 5

Slide 6

Slide 6 text

https://github.com/soutaro/rbs-inline/wiki/Syntax-guide 文法どんな感じか 6

Slide 7

Slide 7 text

https://github.com/soutaro/rbs-inline/wiki/Syntax-guide 文法どんな感じか 7

Slide 8

Slide 8 text

https://github.com/soutaro/rbs-inline/wiki/Syntax-guide 文法どんな感じか 8

Slide 9

Slide 9 text

https://github.com/soutaro/rbs-inline/wiki/Syntax-guide 文法どんな感じか 9

Slide 10

Slide 10 text

まだ Experimental & プロトタイプなので注意 10

Slide 11

Slide 11 text

Ruby 中で RBS を書きたかった ( 生成したかった) 民としては最高 表現力も高そう Experimental だけど試したい… めちゃくちゃ良さそう 11

Slide 12

Slide 12 text

破壊的変更が入っても、(Prism で) 機械的に書き換えればいいのでは? Experimental でも試したい!! 12

Slide 13

Slide 13 text

(YARD から) rbs-inline を生成してみた 13

Slide 14

Slide 14 text

(YARD から) rbs-inline を生成してみた 14

Slide 15

Slide 15 text

https://github.com/tomoasleep/yard_to_rbs_inline (YARD から) rbs-inline を生成してみた 15

Slide 16

Slide 16 text

多分 okura さんが解説してくれてるはず マニュアル: https://ruby.github.io/prism/rb/index.html にマニュアルがある bs-inline は Prism で動いている rbs-inline を読めば Prism も学べる!! Prism をどう学ぶか 16

Slide 17

Slide 17 text

require 'prism'; Prism.parse("def hoge(a); end") Prism 使い方 (1) - パース処理 17

Slide 18

Slide 18 text

require 'prism'; Prism.parse("def hoge(a); end").value.statements Prism 使い方 (1) - パース処理 18

Slide 19

Slide 19 text

Prism::Visitor を使うと AST の走査が出来る class MyVisitor < Prism::Visitor #:: (Prism::CallNode) -> void def visit_call_node(node) # メソッド呼び出しの Node に出くわしたときの処理 end #:: (Prism::DefNode) -> void def visit_def_node(node) # メソッド呼び出しの Node に出くわしたときの処理 end end Prism 使い方 (2) - Visitor 19

Slide 20

Slide 20 text

1. Prism でこれらの Node を見る メソッド定義 attr_reader 2. Node 直前のコメントとメソッドのパラメータを抽出 3. YARD を (racc で) 頑張って parse 4. rbs-inline のコメントを直前行に追加 Prism で rbs-inline 出力どんな感じか 20

Slide 21

Slide 21 text

Parser は2 箇所だけ見れば OK メソッド呼び出し メソッド定義 コメントを手前の行に挿入するだけ ( この辺は文字列操作でやる) コメント自動生成は ( 実は) Parser 入門に向いてる (?) 21

Slide 22

Slide 22 text

RubyKaigi の発表も楽しみ! 22

Slide 23

Slide 23 text

rbs collection, rbs-inline と徐々に RBS エコシステムが整いつつある Prism を学べば experimental でも気兼ねなく試せる!! パーサーを書いて快適な rbs-inline ライフを! RBS を書く環境がどんどん整ってきてる!! 23