3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

JuliaAdvent Calendar 2019

Day 23

Julia のドキュメント生成

Posted at

まえおき

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

  1. 実際にためしてみると引数の型情報は効かないようです。

3
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?