ドキュメントを精査することで、Emacshaskell-mode
には相互に排他的な自動インデントの 3 つの方法が同梱されていることがわかりました。それらはhaskell-indentation
、haskell-indent
、および と呼ばれhaskell-simple-indent
ます。これらの方法がどのように似ていて、どのように異なっているかを誰か説明できますか? 個々の機能だけでなく、そのうちの 1 つがデファクトスタンダードになっているのか、それとも 1 つまたは 2 つが保守されていないのかにも関心があります。
3 に答える
本当に、私が人々に尋ねて知っている限り、事実上の標準はありません.人々はどちらを好むかについて強い意見を持っていますが、「ほとんどの場合、それは私にとってうまくいく」以外の具体的な証拠はほとんどありません.
haskell-indentation
パッケージとhaskell-indent
パッケージが最も人気があります。
- どちらにもタブサイクルがあります
- どちらも複雑なコードベースです
- どちらも故障するエッジケースがたくさんあります
それぞれがさまざまなケースで正しいことを行いますが、繰り返しになりますが、単体テストや実際のパーサーなどはありません。作成者がたまたま考えた特別なケースがたくさんあるだけです。厳密な意味での振る舞いはまばらです。haskell-indentation
は よりも Haskell を理解してhaskell-indent
いますが、私を含め、多くの人が、適切なインデントにたどり着くまでに多くの時間をサイクリングに費やしていると言うでしょう。
このhaskell-simple-indent
パッケージには Haskell に関する知識はなく、列の配置についてのみ認識しており、タブ サイクルはなく、インデントとインデント解除があります。これは、以前のモードでの前述のエッジ ケースのために使用するバージョンです。
このようなライブラリでは、現時点で逸話以外にそれらの違いを説明するのは難しいと思います。厳密な比較を歓迎します (ただし、より良いモードを作成するために時間を費やした方がよい場合もあります)。
simple-indent
は私が管理しています。他の作者が保守に積極的に関心を持っているかどうかはわかりません。
あなたが言及した 3 つのモードは、この記事で説明されている 3 つの haskell-modes に対応していると思います。
haskell-indentation
== タブの循環haskell-indent
== 長方形領域haskell-simple-indent
== コードの整列
ただし、100%確信があるわけではないので、家に帰ったら詳しく調べます。
haskell-indentation
とhaskell-indent
誤解を招くように似ていますが、どちらも TAB の繰り返し入力による提案の循環を提供します。これが主な機能 IMO です。
ただしhaskell-indent
、主に非常に便利な特定の補完を提案するため、間違いなく私のお気に入りです。
- 型シグネチャを書いた後に関数名を繰り返す
- パターンマッチのために関数名を繰り返す
- ケース分岐用パイプ
最近、環境を切り替えて、emacs を再セットアップする必要がありhaskell-indentation
、誤って使用しましたが、これらを見逃していました。OTOH、これらの補完のいくつかは面倒だと思うかもしれません。さらに、特定のケースでは機能しません。関数がアンダースコアで始まる場合、または (さらに悪いことに) 鳥を追跡している場合です。