GNU ELPA — js2-mode

js2-mode Atom Feed

Description
Improved JavaScript editing mode
Latest
js2-mode-20231224.tar (.sig), 2026-May-17, 620 KiB
Maintainer
Steve Yegge <steve.yegge@gmail.com>, mooz <stillpedant@gmail.com>, Dmitry Gutov <dgutov@yandex.ru>
Website
https://github.com/mooz/js2-mode/
Browse ELPA's repository
CGit or Gitweb
All Dependencies
cl-lib (.tar)
Badge

To install this package from Emacs, use package-install or list-packages.

Full description

This JavaScript editing mode supports:

 - strict recognition of the Ecma-262 language standard
 - support for most Rhino and SpiderMonkey extensions from 1.5 and up
 - parsing support for ECMAScript for XML (E4X, ECMA-357)
 - accurate syntax highlighting using a recursive-descent parser
 - on-the-fly reporting of syntax errors and strict-mode warnings
 - undeclared-variable warnings using a configurable externs framework
 - "bouncing" line indentation to choose among alternate indentation points
 - smart line-wrapping within comments and strings
 - code folding:
   - show some or all function bodies as {...}
   - show some or all block comments as /*...*/
 - context-sensitive menu bar and popup menus
 - code browsing using the `imenu' package
 - many customization options

Installation:

To install it as your major mode for JavaScript editing:

  (add-to-list 'auto-mode-alist '("\\.js\\'" . js2-mode))

Alternatively, to install it as a minor mode just for JavaScript linting,
you must add it to the appropriate major-mode hook.  Normally this would be:

  (add-hook 'js-mode-hook 'js2-minor-mode)

You may also want to hook it in for shell scripts running via node.js:

  (add-to-list 'interpreter-mode-alist '("node" . js2-mode))

Use Emacs 27 and want to write JSX?  Then use `js2-minor-mode' as described
above.  Use Emacs 26 or earlier?  Then use `js2-jsx-mode':

  (add-to-list 'auto-mode-alist '("\\.jsx?\\'" . js2-jsx-mode))
  (add-to-list 'interpreter-mode-alist '("node" . js2-jsx-mode))

Note that linting of JSX code may fail in both modes.

To customize how it works:
  M-x customize-group RET js2-mode RET

Notes:

This mode includes a port of Mozilla Rhino's scanner, parser and
symbol table.  Ideally it should stay in sync with Rhino, keeping
`js2-mode' current as the EcmaScript language standard evolves.

Unlike cc-engine based language modes, js2-mode's line-indentation is not
customizable.  It is a surprising amount of work to support customizable
indentation.  The current compromise is that the tab key lets you cycle among
various likely indentation points, similar to the behavior of python-mode.

This mode does not yet work with "multi-mode" modes such as `mmm-mode'
and `mumamo', although it could be made to do so with some effort.
This means that `js2-mode' is currently only useful for editing JavaScript
files, and not for editing JavaScript within <script> tags or templates.

The project page on GitHub is used for development and issue tracking.
The original homepage at Google Code has outdated information and is mostly
unmaintained.

Old versions

News

History of user-visible changes

2023-12-24

2023-04-08

2022-07-10

2021-12-29

2020-12-20

2019-02-19

2018-03-01

2017-07-21

2017-01-16

2016-06-23

20150909