Tern is a stand-alone code-analysis engine for
JavaScript. It is intended to be used with a code
editor plugin to enhance the editor's support for intelligent
JavaScript editing. Features provided are:
- Autocompletion on variables and properties
- Function argument hints
- Querying the type of an expression
- Finding the definition of something
- Automatic refactoring
Tern is open-source (MIT license), written in
JavaScript, and capable of running both
on node.js and in
the browser.
Editor plugins
There is currently Tern support for the following editors:
Follow the links to find instructions on how to install the
plugins.
Community and support
There is a discussion
forum for questions and discussion around Tern. For announcements,
such as new releases, there is a
low-volume mailing
list. For reporting bugs, I prefer that you use
the github
issue tracker.
Code contributions are welcome, preferably
through pull
requests.
Documentation
The reference manual should be your
first stop for figuring out how to use Tern.
If you are interested in the way the system works internally, take
a look at this blog
post or the video
of the talk
I gave about it at the Curry On conference.
Release history
27-12-2019: Version 0.24.3
Small update release that fixes crashes when spread operator in object literal
13-10-2019: Version 0.24.2
Small update release that fixes crashes when writing catch clause
10-07-2019: Version 0.24.1
Small update release that fixes crashes when using doc_comment plugin
30-05-2019: Version 0.24
- Make bootstrapping of a Tern server easiert .
- Support complete string property name in object notation.
- Update def files for Date, DOM Node ...
- More robust JSDoc handler
- Fix bug where condense codes with spread operator.
- Fix bug where rename cause object property also affected.
10-11-2018: Version 0.23
- Upgrade Acorn to version 6.
- Fix some crash issues caused by ECMAScript 6 syntax.
- Update React definition.
- Add Clipboard API to browser definition.
27-09-2018: Version 0.22.3
Small update release that fixes crashes
affecting spread operator in object notation, rest operator in object pattern and export default anonymous class or function.
28-08-2018: Version 0.22
- Support async functions and async iteration.
- Make the base type definitions match the current standards.
- Make sure dynamic properties don't show up when completing object literal property names.
- Pre-emptively start analyzing on startup.
- Fix bug where renaming a variable might rename properties in the code.
18-02-2017: Version 0.21
- Support JSDoc-style object property docs in
doc_comments
plugin.
- Various fixes and completions in the type definitions.
- Fix bug where server self-resets left old state on AST.
- Improve and document the
webpack
plugin.
- Fix issue where file offsets were interpreted wrong when the file contained astral plane characters.
16-08-2016: Version 0.20
- Breaking: The
ecma5.json
and ecma6.json
definition files were combined
into ecmascript.json
. If you are explicitly loading
these, for example in a web page, you'll have to update your
filenames.
- Improved the typing of
Promise.resolve
calls
- Support webpack config files in the webpack plugin
- Make the Emacs mode mode robust when files are renamed
- New option
inLiteral
in the JSON protocol to turn
off completions inside string/regexp literals
- Define the ECMA7
Array.includes
method
11-07-2016: Version 0.19
- Breaking: Drops the
from_ts
utility
- New command line flag:
--ignore-stdin
to not exit when stdin is closed
- Fix another crash related to omitted array elements
- Improve handling of shorthand object properties during rename
15-03-2016: Version 0.18
- Improve typing of
this
bindings in arrow functions
- Fix crash when fetching the type of a module without known type
- Fix bug in scoping of renames, which erroneously included the scope's function name
- Full list of patches
04-01-2016: Version 0.17
- Support
@class
and @constructor
JSDoc directives
- Improve completion and finding of module exports and methods
- Server objects now have a
deleteDefs
method
- New plugin: webpack
- Full list of patches
27-10-2015: Version 0.16
- Support completion of imported names and package names from
package.json
- Allow importing non-ES6 modules using
import foo from "bar"
syntax
- Fix several crashes
- Small improvements to the browser and ECMA6 definitions
- Full list of patches
02-09-2015: Version 0.15
- Fix crash bug triggered by string/number properties in object literals
- Fix other crash bug triggered by holes in arrays
- Support doc comments above classes and class methods
- Full list of patches
31-08-2015: Version 0.14
- Support for ECMAScript 6 constructs and standard library
- Block scopes and let/const bindings
- Destructuring and default values
- Tuples/heterogenously typed arrays
- Rest arguments
- Generators
- Symbols and symbol properties
- For/of iteration
- Classes and super calls
- Extended object literal notation
- Arrow functions
- Template strings
- All methods and types added by the ES6 spec
- Improved existing support for Promises
- Overhauled module system for CommonJS modules, separated it from node plugin
- Add support for ES6 modules
- Plugins can now have dependencies. If your setup needs to explicitly load them, adjust accordingly
- The
node_exports
query type was renamed to exports
(and works on ES6 modules)
- The
registerPlugin
interface was changed. The old style (returning an object) will be supported until 1.0
- Improved completion of module names in CommonJS and ES6 module context
- Phantom objects were added to support
foo.bar.baz = 10
if foo.bar
doesn't have a type
- Fix broken handling of non-ASCII requests in the Emacs mode
- Full list of patches
28-07-2015: Version 0.13
- Parse input as ES6 (but ignore most ES6 constructs for now)
- Improved type inference for promises
- Fix another source of exponential complexity blowup
- Complete module names in the requirejs plugin
- Improved type guessing for overridden properties
- Fix a bug in the Emacs mode that caused cursor jumping in some situations
- Full list of patches
25-06-2015: Version 0.12
- Fix another infinite recursion bug
- Rework doc comment stripping, allow passing
docFormat: "full"
in a query to receive full strings.
- Add a
preParse
hook that plugins can register.
- Prevent observed calls from 'polluting' union types from JSON definitions.
- Full list of patches
29-04-2015: Version 0.11
- Fix infinite recursion bug in type's
toString
methods
- Support
defineProperties
- Full list of patches
25-03-2015: Version 0.10
- Fix a problem where the existence of an incompatible Acorn 1.0.0 on NPM breaks new installs
- Solve another infinitely-expanding-graph bug
- Rewrite type parser (for .json definitions) to be more predictable
- Full list of patches
02-03-2015: Version 0.9
- Add support for union types. The strings for types will now
often contain
|
characters separating alternatives.
Such types are also allowed in JSDoc comments.
- Add rough ECMAScript 6 type
definition, which adds some new variables and properties from ES6.
(note that this is still a far way off from real ES6 support.)
- Various small bugfixes (full list of patches)
13-01-2015: Version 0.8
- Support
@self
and @typedef
in doc_comments plugin
- Improved purging of stale properties on file reload
- Much improved completion of properties in object literals
- Added
fullDocs
option to retrieve entire doc comment blocks
- Improved support for
defineProperty
and getter/setter properties
- Support deleting files through requests to the server
- Support
module
object in RequireJS's simplified CommonJS mode
- Various small bugfixes (full list of patches)
14-08-2014: Version 0.7
- Further refinements of the RequireJS plugin's path resolution
- Add
isKeyword
and isProperty
fields to completion query JSON responses
- Various small bugfixes (full list of patches)
06-06-2014: Version 0.6.2
Small update release that fixes a crash
affecting asynchronous loading of files.
06-06-2014: Version 0.6
- Solves overload from pulling in huge dependency trees
- Fixes various issues with stale information sticking around after file reload
- Add support for a
~/.tern-config
default config file
- Support a
timeout
field in requests, to limit their running time
- Make it possible to load plugins installed with
npm
- Lots of small bugfixes (full list of patches)
10-10-2013: Version 0.5
- Improvements to the node plugin.
- Experimental Angular.js plugin.
- Rewrite of the
condense
tool, tests added.
- Better handling of “global”
this
in non-method calls.
- Support
Array.<content>
and Object.<key,value>
-style types in
the doc_comment
plugin.
12-08-2013: Version 0.4
- Several fixes for exponential running time on some inputs.
- New IDO completion frontend for the Emacs mode.
- Add missing
buffer
and timers
modules to node plugin.
- A few fixes to the
bin/condense
tool.
10-07-2013: Version 0.3
- Better
this
handling.
- Added underscore definition file.
- Improved dependency resolution in node plugin.
node_exports
query type added.
- Glob patterns in
loadEagerly
/dontLoad
settings.
11-06-2013: Version 0.2
- Make the codebase Windows-safe.
- Improved handling of large codebases.
- Move comment parsing logic into a plugin (
doc_comment
).
- Many bugfixes.
03-05-2013: Version 0.1
First numbered release. Should be considered
beta status, but usable enough to test.