GNU ELPA - js2-mode


Improved JavaScript editing mode
js2-mode-20201220.tar, 2020-Dec-20, 600 KiB
Steve Yegge <>
Home page
Browse ELPA's repository
CGit or Gitweb

To install this package, run in Emacs:

M-x package-install RET js2-mode RET

Old versions

js2-mode-20190219.tar.lz2019-Feb-19 130 KiB
js2-mode-20180301.tar.lz2018-Mar-01 130 KiB
js2-mode-20170721.tar.lz2017-Jul-21 128 KiB
js2-mode-20170116.tar.lz2017-Jan-16 117 KiB
js2-mode-20160623.tar.lz2016-Jun-23 116 KiB
js2-mode-20150909.tar.lz2015-Sep-10 111 KiB
js2-mode-20150713.tar.lz2015-Jul-13 110 KiB
js2-mode-20150202.tar.lz2015-Feb-04 107 KiB
js2-mode-20141118.tar.lz2014-Nov-1999.8 KiB
js2-mode-20141115.tar.lz2014-Nov-1699.8 KiB
js2-mode-20140114.tar.lz2014-Jan-1688.5 KiB
js2-mode-20131106.tar.lz2013-Nov-0890.9 KiB
js2-mode-20130619.el.lz2013-Jun-1984.7 KiB
js2-mode-20130619.tar.lz2013-Aug-1588.9 KiB
js2-mode-20130608.el.lz2013-Jun-0984.7 KiB
js2-mode-20130510.el.lz2013-May-1184.5 KiB
js2-mode-20130307.el.lz2013-Mar-0883.9 KiB
js2-mode-20130228.el.lz2013-Feb-2883.9 KiB
js2-mode-20130219.el.lz2013-Feb-1985.0 KiB
js2-mode-20130217.el.lz2013-Feb-1784.8 KiB
js2-mode-20090814.el.lz2012-Nov-2982.8 KiB
js2-mode-1.1.el.lz2012-Dec-2584.7 KiB


# History of user-visible changes

## 2020-12-20

* Support for logical assignment operators ([#564](
* Support for the nullish coalescing operator ([#561](
* Emacs 27 now provides improved JSX indentation support, along with
  new JSX highlighting and detection support. Install Emacs 27 and use
  `js-mode` with `js2-minor-mode` (see README), rather than
* Using `js2-jsx-mode` will now trigger a warning in Emacs 27.
* Support for optional-chaining operator `?.`

## 2019-02-19

* Changed the default of `js2-strict-trailing-comma-warning` to nil.

## 2018-03-01

* Support single-line JSDocs.
* New face `js2-object-property-access`.
* Support for trailing comma in function arguments
* JSDoc highlighting for `@yield`, `@yields`, `@abstract`, `@virtual` and `@typedef`.
* Support for anonymous class exports.

## 2017-07-21

* Support for async arrow function without parentheses.
* Support for `/*jslint` declarations.
* User option `js2-getprop-has-side-effects`.
* Support for trailing commas in function parameter lists.
* Support for ES7 public class fields.
* New user option `js2-ignored-warnings`.

## 2017-01-16

* `js2-include-*-externs` are now evaluated on demand.  As a result,
  they can now be effectively used as file- or directory-local
* Support for ES7 exponentiation operator.

## 2016-06-23

* New variable `js2-mode-assume-strict`, for use with ES6 modules.
* Support for JSDoc @callback, @func and @method tags.
* Object properties are highlighted using a different face:
  `js2-object-property`, which has no color by default.
* Experimental support for object rest/spread ECMAScript proposal.
* `js2-getter-setter-node` is renamed to `js2-method-node`, together with
  its related functions.  It already handles generator methods, and we
  added support for async methods (see below), so the old name would get
  more confusing.
* Support for default parameters in destructuring.  It should work for both
  objects and arrays, in both literals and function arguments.
* New mode: `js2-jsx-mode`, deriving from `js2-mode`.  Supports indentation of
  JSXElement expressions wrapped within parentheses or as function arguments.
  Indentation is customizable via `sgml-attribute-offset`.
* Experimental support for async/await ECMAScript proposal.

## 20150909

* `js2-mode` now derives from `js-mode`. That means the former
  function will run `js-mode-hook`, as well as `js2-mode-hook`. The
  key bindings will default to `js-mode-map` where they're not set in
  `js2-mode-map`. And in Emacs 25 or later (including the snapshot
  builds), `js2-mode` uses the indentation code from `js-mode`.  Where
  feasible, the user options (and functions) now have aliases, but if
  you're using Emacs 25 and you see an indentation-related setting
  that stopped working, try looking for a corresponding one in the
  `js` group: `M-x customize-group RET js RET`.

* New command: `js2-jump-to-definition`. It's bound to `M-.` by
  default, via remapping `js-find-symbol`. To get back to the default
  `M-.` binding (e.g. `find-tag`), put this in your init file:

      (eval-after-load 'js (define-key js-mode-map (kbd "M-.") nil))

## 20150713

* More comprehensive strict mode warnings and syntax errors.
* New minor mode: `js2-highlight-unused-variables-mode`.
* `js2-pretty-multiline-declarations` can take the value `dynamic` now.

## 20150202

Support for:

* [ES6 modules](
* [Short-hand object literals](
* [Method definitions](
* ['u' and 'y' RegExp flags](
* [Computed property names](
* [Class statements and expression...