r7kamura / diary

r7kamura's daily working log.
https://r7kamura.github.io/diary/
MIT License
2 stars 0 forks source link

2022-08-23 #110

Open r7kamura opened 2 years ago

r7kamura commented 2 years ago

Ruby core & stdlibのyardocをそれぞれ生成して読み込むことに生成したが、そこには @return みたいなタグが書かれているわけではないので、返り値が計算できない。

r7kamura commented 2 years ago

YARDがRubyのコア機能に対して生成するドキュメントには返り値の情報が含まれていないから、てっきり元々書かれていないのかと思いきや、RDocから生成されているはずの https://docs.ruby-lang.org/en/3.1/Integer.html#method-i-chr を見てみると、情報があるように見える。変換に対応していないだけか?...と思いきや、YARDにlib/yard/parser/c/comment_parser.rbというのがあって、-> true or false をBooleanに変換するロジックなどを持っていた。

r7kamura commented 2 years ago

C由来の情報はYARD::Registry.allで取得しようとすると一部欠落する?

r7kamura commented 2 years ago

C由来のコメントはoverload tagとして表現されていて、tag.tags(:overload).first.tags(:return) とかやると出てくるみたいだった。

r7kamura commented 2 years ago

Ruby 3.1でRubyのソースコードのRDocのcall-sequenceの書き方に変更があったみたいで、YARD::Parser::C::CommentParserが上手くパースできず、何も情報を抽出できない状態となっていた。Ruby 3.0まではレシーバー無しで記述していたのが、Ruby 3.1からはレシーバー付きで記述するようになり、こうなった模様。

上手くやるには、RDocのパーサーを使ってYARDの情報を生成する、という風に書き換えないといけなさそう。あるいはRuby 3.0以下のソースコードからドキュメントを生成する。本当にRuby 3.0ですべてが上手くパースできるのかは怪しいので、RDocのパーサーを使えないか検討することにも依然として価値があるとは思う。