2

OCaml のフォーマッタ (form Format) が改行 (特にprint_break (@ )) タグを挿入するのを避ける巧妙なハックはありますか?

大量のメッセージを出力するやや大きなソフトウェアがあり、その上で Unix ツール ( や など) を使用したいと考えていgrepますsed。ただし、改行が挿入されていると、メッセージがフォーマッタによって分割されるときに、改行が機能しなくなります。また、コード内のフォーマッターが多すぎて、それらすべてを個別に追跡し、set_margin.

そのような巧妙なハックには、デフォルトのマージンを 9999 などに設定できる中心点が 1 つある場合、Format を別のモジュール内にラップするか、最終的に OCaml 自体を再コンパイルすることが含まれる可能性がありますFormat.set_margin。しかし、プログラムによって作成されたフォーマッターには適用されないようです。

4

2 に答える 2

1

あなたが試すことができます

let out,flush,_,spaces = get_all_formatter_output_functions ()
in set_all_formatter_output_functions out flush (fun () -> out " " 0 1) spaces

成功すると、改行の代わりにスペースが出力されます。

于 2013-01-15T18:55:13.797 に答える
0

残忍な解決策を恐れていない場合:

find . -type f -regex ".+\\.ml" -exec sed -i 's/Format/MyFormat/g' {} \;

そしてmyFormatファイルは

include Format
let formatter_of_out_channel c =
  let f = formatter_of_out_channel c in
  pp_set_margin f 9999;
  f

とに同じものを追加しformatter_of_bufferますmake_formatter

于 2013-01-17T10:11:29.280 に答える