RDocでパースに失敗

前置き

rdocが、うまくクラスを見つけてくれないことがあったのでメモっておきます。文字コードが関係してそうですが、解決には至っていません。コメントは英語で書けってことでしょうかね。

本文

発生条件と現象

  • Ruby 1.9.3(Windows版)
  • ソースはutf-8
  • 日本語のコメント入り

下記のような感じで、クラスを検出できません。

D:\etude\rwalker>ruby --version
ruby 1.9.3p194 (2012-04-20) [i386-mingw32]
D:\etude\rwalker>rdoc rwalker.rb --charset utf-8
Parsing sources...
100% [ 1/ 1]  rwalker.rb


No newer files.

Files:      1

Classes:    0 (0 undocumented)
Modules:    0 (0 undocumented)
Constants:  0 (0 undocumented)
Attributes: 0 (0 undocumented)
Methods:    0 (0 undocumented)

Total:      0 (0 undocumented)
  0.00% documented

Elapsed: 0.0s

docフォルダは生成されますが、その下は created.rid という空っぽのファイルが1つだけです。

ソースのコメントを少しずつ削除しながらリトライを繰り返すと、ある時点からパースに成功し始めます。コメント1文字の有無で結果が違います。その1文字は「加」だったり「る」だったり、いろいろで、規則性は読み取れませんでした。

暫定回避策

ソースの文字コードをSJISに変えると、ひとまず回避できます。普段はutf-8で書きたいので、rdocのときだけSJIS変換するように、rakeで自動化してみました。[訂正]SJIS変換で回避したと思ったのですが、ソースを修正するうちに再発してしまいました。しかし、まぁ、せっかくなのでrakefileは載せておきます。

# encoding: utf-8
# --
# タスクの一覧は、rake -T で見れるで。
# ++
require 'rake/clean'
require 'rdoc/task'

RDOC = "rdoc.bat"
SRCS = FileList['rwalker.rb', 'libhelper.rb']    # ソースファイルリスト。
SJS = SRCS.ext('sjis')                           # 拡張子をsjisに代えたリスト。

CLEAN.include(SJS)           # cleanタスクで、sjisファイルを削除。
CLOBBER.include('doc')       # clobberタスクで、clean + docフォルダを削除。

task :default => "doc"

desc 'Build RDoc HTML files (by using RDocTask)'
file "doc" => SJS do |task|
  Rake::Task['rdoc'].invoke
  Rake::Task['clean'].invoke
end

# rdocタスク。
Rake::RDocTask.new do |rd|
  rd.rdoc_dir = 'doc'
  rd.rdoc_files = SJS
  rd.title = 'RWalker'
  rd.main = 'rwalker.rdoc'
  SJS << 'rwalker.rdoc'
  rd.options << '--charset=shift_jis'
  rd.options << '--extension=sjis=rb'
  rd.options << '--format=hanna'
end

# .sjisは、.rbをnkfして生成する。
rule '.sjis' => '.rb' do |task|
  sh "nkf -s #{task.source} >#{task.name}"
end

実行の様子は、こちら。

D:\etude\rwalker>rake -T
rake clean         # Remove any temporary products.
rake clobber       # Remove any generated file.
rake clobber_rdoc  # Remove RDoc HTML files
rake doc           # Build RDoc HTML files (by using RDocTask)
rake rdoc          # Build RDoc HTML files
rake rerdoc        # Rebuild RDoc HTML files

D:\etude\rwalker>rake
nkf -s rwalker.rb >rwalker.sjis
nkf -s libhelper.rb >libhelper.sjis
Parsing sources...
 33% [ 1/ 3]  rwalker.sjis
 66% [ 2/ 3]  libhelper.sjis
100% [ 3/ 3]  rwalker.rdoc


Generating Hanna format into D:/etude/rwalker/doc...

Files:       3

Classes:     4 (0 undocumented)
Modules:     0 (0 undocumented)
Constants:   0 (0 undocumented)
Attributes:  4 (0 undocumented)
Methods:    14 (0 undocumented)

Total:      22 (0 undocumented)
100.00% documented

Elapsed: 0.5s
rm -r rwalker.sjis
rm -r libhelper.sjis
Last modified:2012/07/07 04:41:26
Keyword(s):
References:[言語Tips]
This page is frozen.