Haskell autocompletar en Emacs usando el modo haskell
autocomplete haskell-mode (6)
Además de autocompletar para su propio código, también puede obtener autocompletar (con apidocs incluso) para la biblioteca estándar, los nombres de importación y los nombres de pragma usando company-ghc . Encontré esta guía muy útil. Tenga en cuenta que todavía no logré que funcionara completamente, pero puedo sentir que estoy cerca :-)
Instalé haskel-mode
en emacs. Luego escribo en mi .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)
¿Qué debo agregar en mi archivo de configuración que emacs pueda completar automáticamente para Haskell? ¿O el modo Haskell no existe tal posibilidad?
Como un mecanismo de autocompletado "barato y alegre", no M-/
alto M-/
. Es completamente heurístico e independiente del lenguaje, pero sorprendentemente efectivo.
Cuando no hay soporte específico de idioma, puedes usar etiquetas . Este es un mecanismo de finalización genérico.
Genere un archivo
TAGS
, que contiene una lista de identificadores y dónde están definidos. Emacs viene con el programaetags
para hacer esto en muchos idiomas, pero no en Haskell; ghc viene conhasktags
.Cargue el archivo
TAGS
conMx visit-tags-table
.
Las etiquetas no dependen del contexto, por lo que sugerirán indiscriminadamente tipos, valores, constructores, etc. en todas partes. Tampoco proporcionan funciones avanzadas, como mostrar fácilmente el tipo de valor. Los comandos de etiquetas más importantes son:
M-TAB
(complete-symbol
) completa un identificador de acuerdo con la lista de etiquetas cargadas.M-.
(find-tag
) va al lugar donde se define el identificador en el punto, abriendo el archivo que contiene si es necesario.M-*
(pop-tag-mark
) vuelve a donde estabas antes deM-.
.Mx tags-apropos
muestra una lista de identificadores que coinciden con una expresión regular.
Para obtener más información, consulte "Etiquetas" en el manual de Emacs.
Para un mecanismo aún más burdo, pero completamente automático, existe la característica abreviatura dinámica . CM-/
( dabbrev-completion
) busca en la mayoría de los buffers abiertos para una terminación; esto es completamente independiente del lenguaje, por lo que incluso encontrará palabras en cadenas, comentarios, lo que sea. M-/
( dabbrev-expand
) es similar, pero se completa directamente a la coincidencia más cercana antes del punto.
Mi setup es un poco más complicada. Utiliza la infraestructura de auto-complete que muestra una lista desplegable de candidatos automáticamente similar a los IDE tradicionales. He descargado este script que codifica todas las palabras clave. Además de eso, uso ghc-mod para generar nombres de módulos.
ghc-mod proporciona algo de finalización para Haskell dentro de Emacs, así como la verificación con hlint y ghc. En combinación con M- /, es lo suficientemente bueno para mí.
haskell-mode
actualmente no ofrece tal posibilidad. Hay algún trabajo en la implementación del analizador de haskell para CEDET; en este caso, los usuarios obtendrán automáticamente las funciones de autocompletar. Pero este trabajo no había comenzado hace tanto tiempo ...