Eu recomendaria absolutamente tern. Eu o descobri na metade do meu estágio (trabalhando no Node.js) no último verão e funcionou maravilhosamente com company-modee js2-mode.
js2-modepor si só é bastante poderoso. Ele pode lidar com o M-.salto usual em um arquivo na maioria das vezes e terncomplementa-o muito bem com o salto entre arquivos / módulo (especialmente no ecossistema de nós).
O primeiro passo para usar o tern é instalar o binário. Eu pessoalmente usei o npm para fazer isso:
$ sudo npm install -g tern
Em seguida, instale no Emacs. A seção relevante do meu init.elé:
;;; tern
(package-require 'tern)
(add-hook 'js2-mode-hook (lambda () (tern-mode t)))
A etapa final é configurar um .tern-projectarquivo no diretório raiz do seu projeto . Para projetos Node.js, eu uso isso como ponto de partida:
{
"loadEagerly": [
"src/**.js"
],
"plugins": {
"node": {
}
}
}
Se você usar company-mode, a instalação company-terntambém é altamente recomendada:
(package-require 'company-tern)
(eval-after-load 'company
'(add-to-list 'company-backends 'company-tern))
Como nota, tive alguns problemas com o servidor andorinha-do-mar que morre ocasionalmente no verão passado (2014). A execução do seguinte corrigiu-o consistentemente:
M-: (delete-process "Tern") RET
Eu não era capaz de descobrir exatamente o que estava causando isso, mas acontecia com pouca frequência para ser pouco mais que um incômodo.
Referências:
ternpágina inicial, ele diz "O manual de referência deve ser sua primeira parada para descobrir como usar o Tern. " Pelo menos eles são honestos oO