Absolutamente recomendaría tern. Lo descubrí a mitad de mi pasantía (trabajando en Node.js) el verano pasado, y funcionó maravillosamente con company-modey js2-mode.
js2-modePor sí mismo es bastante poderoso. Puede manejar el M-.salto habitual dentro de un archivo la mayor parte del tiempo, y lo terncomplementa muy bien con el salto entre archivos / módulos (especialmente en el ecosistema de nodos).
El primer paso para usar tern es instalar el binario. Yo personalmente usé npm para hacerlo:
$ sudo npm install -g tern
Luego instale en Emacs. La sección relevante de mi init.eles:
;;; tern
(package-require 'tern)
(add-hook 'js2-mode-hook (lambda () (tern-mode t)))
El paso final es configurar un .tern-projectarchivo en el directorio raíz de su proyecto . Para los proyectos de Node.js, uso esto como punto de partida:
{
"loadEagerly": [
"src/**.js"
],
"plugins": {
"node": {
}
}
}
Si lo usa company-mode, la instalación company-terntambién es muy recomendable:
(package-require 'company-tern)
(eval-after-load 'company
'(add-to-list 'company-backends 'company-tern))
Como nota, tuve algunos problemas con el servidor tern muriendo ocasionalmente el verano pasado (2014). Ejecutar lo siguiente lo solucionó constantemente:
M-: (delete-process "Tern") RET
No pude averiguar exactamente qué lo estaba causando, pero sucedió con poca frecuencia como para ser poco más que una molestia.
Referencias
ternpágina de inicio dice "El manual de referencia debería ser su primera parada para descubrir cómo usar Tern. " Al menos son honestos oO