Подтвердить что ты не робот

Автозаполнение Haskell в Emacs с использованием режима haskell

Я установил haskel-mode в emacs. Затем я пишу в своих .emacs:

(load "~/.emacs.d/haskell-mode/haskell-site-file")
(add-hook 'haskell-mode-hook 'turn-on-haskell-doc-mode)
(add-hook 'haskell-mode-hook 'turn-on-haskell-indentation)
(add-hook 'haskell-mode-hook 'haskell-font-lock-symbols t)
(put 'downcase-region 'disabled nil)

Что я должен добавить в свой файл conf, который emacs может автозаполнять для Haskell? Или в режиме Haskell такой возможности нет?

4b9b3361

Ответ 1

Если нет поддержки по языку, вы можете использовать теги. Это общий механизм завершения.

  • Создайте файл TAGS, который содержит список идентификаторов и где они определены. Emacs поставляется с программой etags, чтобы сделать это на многих языках, но не Haskell; ghc поставляется с hasktags.

  • Загрузите файл TAGS с помощью M-x visit-tags-table.

Теги не зависят от контекста, поэтому они будут без разбора предлагать типы, значения, конструкторы и т.д. везде. Они также не будут предоставлять расширенные функции, такие как простое отображение типа значения. Наиболее важными командами тэгов являются:

  • M-TAB (complete-symbol) завершает идентификатор в соответствии с загруженным списком тегов.

  • M-. (find-tag) переходит к месту определения идентификатора в точке, при необходимости открывая содержащийся файл.

  • M-* (pop-tag-mark) возвращается туда, где вы были до M-..

  • M-x tags-apropos показывает список идентификаторов, соответствующих регулярному выражению.

Дополнительные сведения см. в разделе "Теги" в руководстве Emacs.


Для еще более грубого, но полностью автоматического механизма существует функция динамическая аббревиатура. C-M-/ (dabbrev-completion) выглядит в большинстве открытых буферов для завершения; это полностью не зависящее от языка, поэтому оно даже найдет слова в строках, комментариях, что угодно. M-/ (dabbrev-expand) аналогичен, но непосредственно доходит до ближайшего совпадения перед точкой.

Ответ 2

ghc-mod предоставляет некоторое завершение для Haskell в Emacs, а также проверку с помощью hlint и ghc. В сочетании с M-/, это достаточно хорошо для меня.

Ответ 3

haskell-mode в настоящее время не дает такой возможности. Существует некоторая работа по реализации анализатора haskell для CEDET - в этом случае пользователи автоматически получат функции автозаполнения. Но эта работа началась не так давно...

Ответ 4

Мой setup немного сложнее. Он использует инфраструктуру auto-complete, которая показывает выпадающий список кандидатов, автоматически аналогичный традиционным IDE. Я загрузил этот script, который фиксирует все ключевые слова. В дополнение к этому я использую ghc-mod для создания имен модулей.

Ответ 5

Как "дешевый и жизнерадостный" механизм автозаполнения, не упустите M-/. Он полностью эвристичен и не зависит от языка, но на удивление эффективен.

Ответ 6

Помимо автозаполнения для вашего собственного кода, вы также можете получить автозаполнение (с помощью apidocs even) для стандартной библиотеки, имена импорта и имена прагмы, используя company-ghc. Я нашел это руководство, чтобы быть очень полезным. Заметьте, я не получил, чтобы он работал полностью для себя, но я чувствую, что я близок: -)