結論から言うとできませんでした。-o オプションが必須です。
以下、調査結果のメモ。
$ bundle exec yard doc
したら、doc ディレクトリではなく hoge ディ
レクトリにドキュメントファイルを作りたかったんです。
でも設定ファイルやモンキーパッチではどうにもなりませんでした。
Pull Request 出すしかないけど、そこまでして変えたいわけじゃないか
らなあ…。
-o オプション指定した場合のフロー
$ yard doc -o hoge
すると、options.serializer.basepath に ‘hoge’
が入る。
https://github.com/lsegal/yard/blob/v0.8.7.6/lib/yard/cli/yardoc.rb#L652-L655
opts.on('-o', '--output-dir PATH',
'The output directory. (defaults to ./doc)') do |dir|
options.serializer.basepath = dir
end
options.serializer は YARD::Serializers::FileSystemSerializer
class のインスタンスで、basepath の setter は以下のように定義され
ている。
https://github.com/lsegal/yard/blob/v0.8.7.6/lib/yard/serializers/file_system_serializer.rb#L9-L11
def basepath=(value)
@basepath = options[:basepath] = value
end
@basepath はその後、同 class 内の #serialize で参照される。
-o オプション指定しない場合のフロー
前述のフローには入らないので
YARD::Serializers::FileSystemSerializer#basepath は nil のままになる。
どうにかして ‘hoge’ を代入したい。
#new でも代入していることを発見。
https://github.com/lsegal/yard/blob/v0.8.7.6/lib/yard/serializers/file_system_serializer.rb#L27-L31
def initialize(opts = {})
super
@basepath = (options[:basepath] || 'doc').to_s
@extension = (options.has_key?(:extension) ? options[:extension] : 'html').to_s
end
options は継承元の YARD::Serializers::Base で以下のように初期化さ
れている。opts に { basepath: ‘hoge’ } などを渡せれば良さそう。
https://github.com/lsegal/yard/blob/v0.8.7.6/lib/yard/serializers/base.rb#L27-L29
def initialize(opts = {})
@options = SymbolHash.new(false).update(opts)
end
残念。その余地はありませんでした。
https://github.com/lsegal/yard/blob/v0.8.7.6/lib/yard/cli/yardoc.rb#L20
default_attr :serializer, lambda { Serializers::FileSystemSerializer.new }
まとめ
- 以上のとおりなので、~/.yard/config で設定してどうにかなるものではない
- モンキーパッチを書こうにも、Rails みたいな initializer ファイルはない
- 現在の master も特に実装変わってない