2015-09-21 5 views
6

私のライブラリ上でcabal buildを実行し、次にファイルを変更した場合、次回にcabal buildを実行したときに変更の影響を受けるファイルのみを再コンパイルする必要があります。私はcabal haddockコマンドで同じ動作をしません:ファイルを変更した後に実行すると、cabal/haddockはすべての前の作業をゼロにして終了します。これはむしろ時間がかかります。ドキュメントの差分を取得する方法はありますか?haddockとの差分ドキュメント

ここには、dump of the command cabal issuesというドキュメントがあります。

+0

私は覚えていません。あなたが存在しないものにリンクすると、haddockはビルドに失敗しますか? '' MyModule''のように、あなたは 'MyModule'を利用できません。単に警告を出して実行し続けると、その動作は必須です。既存のファイルを変更したりファイルを追加したりすると、他のモジュールのドキュメントの出力が変更される可能性があります。 – Bakuriu

+0

私はグローバルインデックスページを再構築するのに多くの時間が費やされると信じています。それらのページが構築されていないと、多くの時間を節約することができます。 cabalで-vフラグを使用して、haddockコマンドが実行されていることを確認します。 – ErikR

+0

@Bakuriuファイルの先頭にランダムな 'import ModuleDoesNotExist'を追加すると、haddockが短絡してドキュメントが出力されません。他の種類のコンパイルエラー(例:構文エラー)を強制すると、haddockはエラーのあるモジュールまでドキュメントを出力しますが、残りのモジュールのドキュメントは出力されません。 – crockeea

答えて

1

processModulesドキュメントは言う:

はGHCのAPIを使用してモジュールのリストを型チェックし、得られた構文木を処理することによって、インタフェースおよびリンク環境を作成します。

これはhaddockの中核機能です。だからATMはあなたの質問はNoです。

cabal buildは、後に依存関係グラフで信頼性の高い増分ハドックの世代がコードとして、ハードであることができ作る(例えば__HADDOCK__ CPP変数が有効になって)異なるパラメータでhaddock型チェックモジュールとして、全く

cabal haddockを助けていませんその時点までのモジュールのドキュメント、特にインスタンスのリストを変更してください。モジュールインタフェースをダンプする可能性があります。

お問い合わせat the code of processModules最初の手順は段階的に行うことができ、残りはグローバルな情報を使用している可能性があります。

詳細度を最大(--haddock-options=--verbosity=2)にして、Creating interfaces...Attaching instances...の間の時間を確認してください。

+0

'cabal haddock --haddock-options = - verbosity = 2'は、"インターフェイスの作成 "または"インスタンスの接続 "について何も印刷しません。 – crockeea

+0

@Erik、 'haddock'冗長出力を得るために' -v3'を 'cabal'に与える必要があるようです。 OTOHでは、ほとんどの時間は 'Creating interfaces ... 'と' Attasing instances'の間に費やされているようです。たぶん、最適化の機会があります。 – phadej

+0

「インスタンスの接続」と「インターフェイスの作成」はどちらも基本的に瞬時に行われますが、「モジュールの確認」のステップでは、モジュールごとにかなりの時間がかかります。 – crockeea

関連する問題