Просматривая документацию, я узнал, что Emacs haskell-mode
поставляется с тремя разными взаимоисключающими методами автоматического отступов. Они называются haskell-indentation
, haskell-indent
и haskell-simple-indent
. Может ли кто-нибудь объяснить, как эти методы похожи и как они отличаются? Меня интересуют не только индивидуальные особенности, но и стандарт де-факто или если один или два больше не поддерживаются.
Каковы сходства и различия между режимами выделения Haskell для Emacs?
Ответ 1
Действительно, насколько мне известно, спрашивая людей, нет стандарта де-факто, у людей есть сильные мнения о том, что они предпочитают, но с небольшими конкретными доказательствами, отличными от "он работает для меня в большинстве случаев".
Пакеты haskell-indentation
и haskell-indent
наиболее популярны:
- оба имеют цикл табуляции
- оба являются сложными кодовыми базами
- у обоих есть множество крайних случаев, где они ломаются
Каждый будет делать правильную вещь в разных случаях, но опять же, нет единичных тестов, никакого реального парсера и т.д. всего лишь куча особых случаев, о которых автор (а) подумал, поэтому документация и понимание о том, как они ведут себя в строгом смысле, скудны. haskell-indentation
понимает больше Haskell, чем haskell-indent
, но многие люди расскажут вам, включая меня, о том, что вы тратите много времени на велосипед через углубления, чтобы добраться до нужного.
Пакет haskell-simple-indent
не знает о Haskell, он знает только о выравнивании столбцов и не имеет цикла табуляции, имеет отступы и отступы. Это версия, которую я использую из-за вышеупомянутых краевых случаев в предыдущих режимах, которые могут время от времени отвлекаться.
Я думаю, что с такими библиотеками будет сложно описать их отличия, отличные от анекдотических на данный момент. Я бы приветствовал какое-то строгое сравнение (хотя время может быть лучше потрачено на создание лучшего режима).
simple-indent
поддерживается мной. Я не знаю, активно ли заинтересованы авторы других в обслуживании.
Ответ 2
Я считаю, что 3 режима, которые вы упомянули, соответствуют 3 режимам haskell, описанным в этой статье, а именно:
-
haskell-indentation
== Tab Cycling -
haskell-indent
== Прямоугольный регион -
haskell-simple-indent
== Выравнивание кода
Однако, поскольку я не уверен на 100%, я больше загляну, когда вернусь домой.
Ответ 3
haskell-indentation
и haskell-indent
являются ошибочно похожими, обе предлагают циклическое использование предложений путем повторного набора TAB, который является их основной функцией IMO.
Однако haskell-indent
определенно мой любимый, в основном потому, что он предложит некоторые доработки, которые весьма полезны:
- повторение имени функции для вас после того, как вы написали подпись типа
- повторение имени функции для соответствия шаблону
- для ветвей case
Я только недавно переключил среду и должен был повторно установить emacs, и использовал haskell-indentation
по ошибке, и мальчик мне это не хватало. OTOH, вы можете обнаружить, что некоторые из этих доработок раздражают; что больше не работает в некоторых случаях: если ваша функция начинается с подчеркивания или (что еще хуже), если вы отслеживаете птиц.