godoc の template に関するメモ

godoc で markdown を生成したいと思って、調べたときのメモ。

既に、それを実現しているコードはこちら。

GitHub - FreekKalter/godoc-md: Godoc template and executable to generate markdown README from go source code.

これを参考に、自分独自のテンプレートを作ってみたくなったので、調査したメモ。

必要なファイル

godoc -templates=$DIR の記載どおり、godoc のテンプレートはディレクトリをパス指定しないといけない。 なぜなら、必要なファイルが複数あるから。

ファイルを読み込んでる箇所は/x/tools/cmd/godoc/handlers.go
また、これらファイルは/x/tools/godoc/staticにあった。

  • package.txt (出力するテンプレート、これ作りたい)
  • search.txt (検索用テンプレート?)
渡される構造体

package.txt の書き方は text/template に則ってる。 (雑に)調べたところ、PageInfo が渡されてるっぽい。 この中で、おもに doc.Package に関して出力していけば良いみたい。

呼ばれる関数

package.txt にある example_text などは、パーサー側で定義された関数だった。 定義はもちろんgodocにあった。

ここの注意として、例えば example_text は Test Example を出力してくれる関数だけど、 「1行目にExample:」「行末に改行2個」と、余計な文字まで付加して出力してきた。

Example:
// ここに Test Example が入る
  // 改行が入る
  //  〃

そのため、markdown の code block として出力したら、変な結果になってしまった。

コードを見た限り、これら余計な文字を消すオプションや関数は定義されてないため、 出力後に手動で削るか、出力方法を自分で再定義するしか無さそう。

godocを使わない方法

godoc から markdown を生成するモノはいくつかあるので、それを使った方が楽だった。

GitHub - robertkrimen/godocdown: Format package documentation (godoc) as GitHub friendly Markdown

GitHub - davecheney/godoc2md: Simple translation from godoc to markdown.

とりあえず、今回は自作を諦めて、godocdown を使うことにしました。