まえおき
Julia に関しては全く初心者でこんなブックマークを週1回ペースで更新するくらいのことしかしていません。
オブジェクト指向の言語の API を読みなれていたので Java の Javadoc や Ruby の yard のような形式のドキュメントが Julia でも読めると良いなと思って今回ちょっと試行錯誤してみました。
欲しいのは特定の type について、type で使えるすべての function の説明がなされているようなもの(つまり API 一覧)です。
function 一覧
type T で使える function 一覧は、
methodswith(T)
で得られます。
docstring の取得
一方、function foo に付されている docstring は、
@doc foo
で得られます1。
ドキュメント生成
ドキュメント生成はこの2つを組み合わせておこなうことができます。
例えば type Array を使う API 一覧なら REPL 上で、
s = Set()
for m in methodswith(Array, supertypes=true)
if !in(m.name, s)
println("@doc $(m.name)")
push!(s, m.name)
end
end
のようなスクリプトを動かして、
@doc sparsevec
@doc serialize
@doc /
…
@doc launch
のようなアウトプットを出し、これを一旦クリップボードに取り込んだ後、REPL にペーストすればよい。
留意点
@doc は function ではなく macro なので、
println("@doc $(m.name)")
のところを、
@doc m.name
のように書いてもうまくいきません。@doc に渡されるのが m.name の値ではなく構文だからです。
今回の課題はメタプログラミングに詳しい方ならもっとスマートに自動化できそうなのでご指導いただければと思います。
参考
https://stackoverflow.com/questions/39445961/how-can-i-programmatically-access-docstrings
https://github.com/JuliaLang/julia/blob/master/base/docs/Docs.jl
-
実際にためしてみると引数の型情報は効かないようです。 ↩