HASKELL AutoCimpletion em EMACs usando o modo Haskell
-
26-09-2019 - |
Pergunta
Eu instalei haskel-mode
em Emacs. Então eu escrevo nos meus .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)
O que devo adicionar ao meu arquivo conf que o Emacs poderia preencher automaticamente o Haskell? Ou o modo Haskell não existe essa possibilidade?
Solução
Quando não há suporte específico para linguagem, você pode usar Tag. Este é um mecanismo de conclusão genérico.
Gerar a
TAGS
arquivo, que contém uma lista de identificadores e onde eles são definidos. Emacs vem com oetags
programa para fazer isso em vários idiomas, mas não em Haskell; GHC vem comhasktags
.Carregue o
TAGS
arquivo comM-x visit-tags-table
.
As tags não são dependentes do contexto, portanto sugerem indiscriminadamente tipos, valores, construtores, etc. em todos os lugares. Eles também não fornecerão recursos avançados, como mostrar facilmente o tipo de valor. Os comandos de tags mais importantes são:
M-TAB
(complete-symbol
) Conclui um identificador de acordo com a lista carregada de tags.M-.
(find-tag
) vai para o local onde o identificador no ponto é definido, abrindo o arquivo contendo, se necessário.M-*
(pop-tag-mark
) volta onde você estava antesM-.
.M-x tags-apropos
mostra uma lista de identificadores que correspondem a um regexp.
Para obter mais informações, procure em "Tags" no manual do EMACS.
Para um mecanismo uniforme, mas totalmente automático, existe o abrev dinâmico característica. C-M-/
(dabbrev-completion
) olhares na maioria dos buffers abertos para uma conclusão; Isso é completamente independente da linguagem, por isso encontrará palavras em cordas, comentários, qualquer que seja. M-/
(dabbrev-expand
) é semelhante, mas completa diretamente para a partida mais próxima antes do ponto.
Outras dicas
GHC-MOD Fornece alguma conclusão para o Haskell na EMACS, bem como verificando com HLINT e GHC. Em combinação com M-/, é bom o suficiente para mim.
haskell-mode
Atualmente não oferece essa possibilidade. Há algum trabalho sobre a implementação do Haskell Parser para Cedet - neste caso, os usuários obterão recursos de conclusão automaticamente automaticamente. Mas esse trabalho começou não muito tempo atrás ...
Meu configurar é um pouco mais complicado. Ele usa o autocompletar Infraestrutura que mostra uma lista suspensa de candidatos automaticamente semelhante aos IDEs tradicionais. Eu baixei Este script que codificam todas as palavras -chave. Além disso, eu uso GHC-MOD Para gerar nomes de módulos.
Como um mecanismo de preenchimento automático "barato e alegre", não esqueça M-/
. É completamente heurístico e independente da linguagem, mas surpreendentemente eficaz.
Além da conclusão automática para o seu próprio código, você também pode obter preenchimento automático (com APidocs uniformes) para a biblioteca padrão, nomes de importação e nomes de Pragma usando Empresa-GHC. eu encontrei este guia para ser muito útil. Observe que ainda não consegui funcionar completamente para mim, mas posso sentir que estou perto :-)