🐷
(アイデア募集)Rustライブラリのドキュメントをgo docコマンドの形式で読みたい
課題
rustup
を使用してRustの環境を構築した場合、rustup doc
コマンドでドキュメントを閲覧できます。例えば以下のコマンドを実行するとstd::fs::File
のドキュメントが表示されます。
$ rustup doc --std 'std::fs::File'
ただし、上記のコマンドを実行するとブラウザが起動してHTML形式のドキュメントが表示されます。
これはこれで便利なのですが、クレートの概要(//!
から始まるコメント)や実装されているトレイト一覧を確認するなど、ちょっとした用途には大袈裟すぎます。
また、私はスクリーンリーダーを利用しているのですが、ドキュメントのHTMLは音声の読み上げがされない箇所があります。
go docコマンドの表示令
参考までにGoのgo doc
コマンドで表示されるドキュメントの例を示します。
$ go doc os.File
上記はos.File
のドキュメントを表示するコマンドです。実行すると以下の内容がターミナルに出力されます。
package os // import "os"
type File struct {
// Has unexported fields.
}
File represents an open file descriptor.
func Create(name string) (*File, error)
func CreateTemp(dir, pattern string) (*File, error)
func NewFile(fd uintptr, name string) *File
...
RustとGoを比べて優劣を語る意図はありません。これくらいシンプルな形式で表示できると嬉しい、という具体例として紹介したものです。
Rustのドキュメントをプレーンテキストで表示する方法
私が調べた限り、プレーンテキストでドキュメントを表示する方法はなさそうでした。Rustの型システムは複雑なので、プレーンテキストでドキュメントを読む需要が少ないのかも知れません。
現状の対処法
ソースコードを読んで対処しています。まず、以下のコマンドを実行して標準ライブラリのソースコードを入手します。
$ rustup component add rust-src
これでソースコードが閲覧できるようになりました。例えばstd::fs::File
に対応するfs.rs
は以下のパスに格納されています。
$ cd $(rustc --print sysroot)
$ cat ./lib/rustlib/src/rust/library/std/src/fs.rs
あとは適当に正規表現で目的の箇所を探してドキュメントコメントを読むことで対処します。
検討した案
-
pandoc -f html -t markdown
でドキュメントのHTMLをmarkdownに変換→余計な装飾や謎の文字が混入して読むに堪えないものが生成される。 - シェルスクリプトで
///
ドキュメントコメントを抽出→問題なさそうに思えるがRustの言語仕様に詳しくないので、シンタックスの考慮漏れでドキュメントを取りこぼす恐れがある。ASTからコメントを抽出するのが確実そうだが、かなり手間がかかりそう。 -
rustup doc
をforkしてmarkdownを生成できるように機能を追加→処理の全体像を把握できていないので案2と同じく手間がかかりそう。そもそもforkして改修するならまずスクリーンリーダーで読み上げできるようにHTMLを修正するべき。
そんなわけで、なるべく手間をかけたくない→ソースコードを読むのが確実という方針で落ち着いています。
おわり
Discussion