本文を読み飛ばす

SyntasticとSphinx ReST (1)

vimのplugin: Syntasticは結構気に入ってます.

Syntasticはファイル保存時に そのファイルを文法チェックしてくれます.

さらに文法チェックの表示は vim内に反映されるのでで簡単に取り扱えます.

コンパイルや実行などする前にチェックが入るので, エディタから別作業に移る前にある程度のチェックができます. \ このため, 作業を移る回数が減って作業効率があがるわけです.

そのSyntasticではReSTチェックもできます. \ でも, Sphinxのdirectiveはチェックがかかりません.

現状の不満点

ただしSphinxのReSTには独自の拡張directiveがいろいろ入っているので 普通にReSTのチェックをすると「そのdirectiveはないですよー」っていう エラーが数多く出てチェックになりません.

理由

これはSyntasticが文法のチェックに rst2xmlを使っているのが理由です.

rst2xmlはReSTのコアであるdocutilsに付属のコマンドで sphinxの拡張directiveは認識しません.

Syntasticはrst2xmlの出力を解析して vimに渡しているのでsphinx固有のdirectiveは理解できず, エラーとなります.

対策 その1

rst2xmlの代わりにsphinx-buildを使います.

これでsphinxのdirectiveもチェックすることができます :D

次の不満点

sphinx-buildは重いです.

対策 その2

このことをSphinx MLで相談したところ

  • Sphinxのディレクティブを反映したrst2null.pyを作るのは面倒

  • 出力処理を省けば早くなるかも

ということで出力処理を省けるようなコードを教えてもらうことができました.

ありがとうございます > sphinx-ML

shpinxの出力処理を省略する

まず以下のコードをconf.pyに追加します:

abc...

確認します.:

$ sphinx-build -t null

さて, この状態で時間比較してみます.:

$ time rst2xml
$ time sphinx-build -t xml
$ time sphinx-build -t null

前の数字はCore i3 2120Tのマシン, 後ろの数字はTegra 1GHzのマシンでの値です

rst2xml:

,

null:

,

xml:

,

Syntasticの修正

Syntasticからsphinx-buildを使います.

ファイルを修正します:

$ mkdir ~/.bundle/syntastic/syntax_checkers/rst
$ cp ~/.bundle/syntastic/syntax_checkers/rst{.vim,}
$ vi ~/.bundle/syntastic/syntax_checkers/rst.vim

この作業で従来のrst2xml.pyにsphinx-buildを追加しています.

sphinx-buildのオプションは

-t null:

上で示した出力なしを指定します

./doc:

document source

./build:

出力先, 出力しないけど必要です

次にrst.vimを調整します:

$ vi ~/.bundle/syntastic/syntax_checkers/rst.vim

次にsphinx用のvimスクリプトを調整します:

$ cp ~/.bundle/syntastic/syntax_checkers/rst/{rst,sphinx-build}.vim
$ vi ~/.bundle/syntastic/syntax_checkers/rst/sphinx-build.vim

ここでのポイントはError, Warningなどを 抽出する正規表現をsphinx-build用に修正することです.

残った問題点

2つあります

  • 処理速度がまだ遅い, 私は我慢できる...かなぁ...

  • sourceとdestのdirectoryが決め打ちになっている

  • 普通のReSTを編集するにもsphinx-buildが立ち上がる

どちらもいまのところどうしようもないと思っています.

ReSTとsphinx用ReSTは別にするというのも考えていますが, そこまで環境は作り込めていません

今回はとりあえずの方法を提示しました. 試していただけると幸いです. :D

コメント

Comments powered by Disqus
宣伝: