JavaScript code intelligence for atom with Tern. Adds support for ES5, ES6, ES7, Node.js, jQuery, Angular and more. Extendable via plugins. Uses suggestion provider by autocomplete-plus.
Configure your project
In order to use third party plugins read the Third party plugins section!
In order to use third party plugins from within your project's node_modules read the Third party plugins local section! This is also an alternative if Third party plugins aren't working.
If configure project does not work for you
Example .tern-project file (customize to your own needs):
{"ecmaVersion": 6,"libs": ["browser","jquery"],"loadEagerly": ["path/to/your/js/**/*.js"],"dontLoad": ["path/to/your/js/**/*.js"],"plugins": {"complete_strings": {"maxLength": 15},"node": {},"doc_comment": {"fullDocs": true,"strong": true}}}
./ as a prefix. This sometimes leads to an unexpected behaviour.node_modules.List of keybindings.
To use your own keybindings goto atom-ternjs package settings and disable keybindings.
In order to use third party plugins (e.g. tern-node-express):
$ cd ~/.atom/packages/atom-ternjs
$ npm install tern-node-express
Add the plugin to your .tern-project file:
{"ecmaVersion": 6,"libs": ["browser"],"loadEagerly": ["app/**/*.js"],"plugins": {"node-express": {}}}
Third party plugins are still an issue and sometimes do not work as expected, especially if the plugin is requiring a tern version that does not match the tern version that is used by atom-ternjs. Restart the server: Packages -> Atom Ternjs -> Restart server
Example for node-express. Open node_modules/tern-node-express/tern-express.js
Replace:
(function(mod) {if (typeof exports == "object" && typeof module == "object") // CommonJSreturn mod(require("tern/lib/infer"), require("tern/lib/tern"));if (typeof define == "function" && define.amd) // AMDreturn define([ "tern/lib/infer", "tern/lib/tern" ], mod);mod(tern, tern);}...
With
(function(mod) {return mod(process.__infer, process.__tern);}...
Restart Atom.
Click any item in the generated reference-list and navigate directly to file and position
Documentation
Find definition (set your cursor position to one of variable, function or instance -> open context-menu and trigger "Find definition") or use the keybindings:
Back from definition
Rename variable (set your cursor position to a variable -> open context-menu and trigger "Rename") or use the keybindings:
Good catch. Let us know what about this package looks wrong to you, and we'll investigate right away.