JavaScript code intelligence for atom with tern. Adds support for ES5, ES6, ES7, ES8, Node.js and more. Extendable via plugins.
This package provides the following services:
atom-ternjs
JavaScript code intelligence for atom with Tern. Adds support for ES5, ES6, ES7, ES8, Node.js and more. Extendable via plugins. Uses suggestion provider by autocomplete-plus.
Get started (configure your project)
- Open any JavaScript file from within your project
- Navigate to Packages -> Atom Ternjs -> Configure project
- The config view appears. Configure to your needs.
- Hit "Save & Restart Server" to create/update the .tern-project file. The configuration is now active.
Get started (in case you can't use configure your project)
- In your project root create a file named .tern-project. See docs @ http://ternjs.net/doc/manual.html#configuration.
- Restart the server via Packages -> Atom Ternjs -> Restart server
Example .tern-project file (customize to your own needs):
{
  "ecmaVersion": 8,
  "libs": [
    "browser"
  ],
  "loadEagerly": [
    "path/to/your/js/**/*.js"
  ],
  "dontLoad": [
    "node_modules/**",
    "path/to/your/js/**/*.js"
  ],
  "plugins": {
    "es_modules": {},
    "node": {},
    "doc_comment": {
      "fullDocs": true,
      "strong": true
    }
  }
}
EcmaVersion
- 5: use ECMAScript5
- 6: use ECMAScript6
- 7: use ECMAScript7
- 8: use ECMAScript8 (default)
Libs
- browser: completion for browser features like document.querySelector (optional)
- chai: completion for chai (optional)
- jquery: completion for jQuery (optional)
- react: completion for React (optional)
- underscore: completion for underscore (optional)
Options
- loadEagerly: provide the path to your projects JavaScript. For relative paths do not use ./as a prefix. This sometimes leads to an unexpected behaviour.
- loadEagerly is expensive. Do not add paths like node_modules.
- dontLoad: can be used to prevent Tern from loading certain files. It also takes an array of file names or glob patterns.
Plugins
- For a list of build in server plugins, visit: http://ternjs.net/doc/manual.html#plugins
Example configurations
- RequireJS: https://github.com/tststs/atom-ternjs-using-requirejs
Keybindings
List of keybindings.
To use your own keybindings goto atom-ternjs package settings and disable keybindings.
Third party plugins
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": 8,
  "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 requires a tern version that does not match the tern version that is used by atom-ternjs.
Restart the server: Packages -> Atom Ternjs -> Restart server
.tern-project created/modified
- After the file was created or has been modified, restart the server via Packages -> Atom Ternjs -> Restart server
Features
- Completion (autocompletion triggers automatically), or via the keybindings:
- ctrl+space
- ctrl+alt+space (force autocompletion in any context)
 


- Find references (set your cursor position to one of variable, function or instance -> open context-menu and trigger "Find references" or use the keybindings:
- ctrl+shift+r (macOS, Windows)
- ctrl+alt+shift+e (Linux)
 
Click any item in the generated reference-list and navigate directly to file and position

- 
Documentation - Show documentation for the thing under the cursor via alt+o (macOS, Windows, Linux)
 
- Also displayed if a suggestion with a valid documentation is selected in the autocomplete-plus select-list
 
- Show documentation for the thing under the cursor via alt+o (macOS, Windows, Linux)
- 
Find definition (set your cursor position to one of variable, function or instance -> open context-menu and trigger "Find definition") or use the keybindings: - cmd+click (macOS, Windows, Linux), requires https://atom.io/packages/hyperclick. Since cmd+click is also used for multi-line editing in macOS you should change the default hyperclick settings.
- ctrl+alt+shift+d (macOS, Windows, Linux)
 
- 
Navigate back or forward - ctrl+shift+cmd+left (macOS, Windows, Linux)
- ctrl+shift+cmd+right (macOS, Windows, Linux)
 
- 
Rename variable (set your cursor position to a variable -> open context-menu and trigger "Rename") or use the keybindings: - ctrl+alt+c (macOS, Windows)
- ctrl+alt+shift+c (Linux)