js2-mode
- Description
- Improved JavaScript editing mode
- Latest
- js2-mode-20231224.tar (.sig), 2024-Mar-31, 620 KiB
- Maintainer
- Steve Yegge <steve.yegge@gmail.com>, mooz <stillpedant@gmail.com>, Dmitry Gutov <dgutov@yandex.ru>
- Atom feed
- js2-mode.xml
- Website
- https://github.com/mooz/js2-mode/
- Browse ELPA's repository
- CGit or Gitweb
- 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
| js2-mode-20230408.tar.lz | 2023-Apr-08 | 121 KiB |
| js2-mode-20220710.tar.lz | 2022-Jul-10 | 121 KiB |
| js2-mode-20211229.tar.lz | 2021-Dec-29 | 120 KiB |
| js2-mode-20201220.tar.lz | 2020-Dec-20 | 119 KiB |
| js2-mode-20190219.tar.lz | 2019-Feb-19 | 130 KiB |
| js2-mode-20180301.tar.lz | 2018-Mar-01 | 130 KiB |
| js2-mode-20170721.tar.lz | 2017-Jul-21 | 128 KiB |
| js2-mode-20170116.tar.lz | 2017-Jan-16 | 117 KiB |
| js2-mode-20160623.tar.lz | 2016-Jun-23 | 116 KiB |
| js2-mode-20150909.tar.lz | 2015-Sep-10 | 111 KiB |
| js2-mode-20150713.tar.lz | 2015-Jul-13 | 110 KiB |
| js2-mode-20150202.tar.lz | 2015-Feb-04 | 107 KiB |
| js2-mode-20141118.tar.lz | 2014-Nov-19 | 99.8 KiB |
| js2-mode-20141115.tar.lz | 2014-Nov-16 | 99.8 KiB |
| js2-mode-20140114.tar.lz | 2014-Jan-16 | 88.5 KiB |
| js2-mode-20131106.tar.lz | 2013-Nov-08 | 90.9 KiB |
| js2-mode-20130619.tar.lz | 2013-Aug-15 | 88.9 KiB |
| js2-mode-20130228.el.lz | 2013-Feb-28 | 83.9 KiB |
| js2-mode-20090814.el.lz | 2012-Nov-29 | 82.8 KiB |
| js2-mode-1.1.el.lz | 2012-Dec-25 | 84.7 KiB |
News
History of user-visible changes
2023-12-24
- Support for async generators in method notation (#598).
- Support for static initialization blocks (#594).
2023-04-08
2022-07-10
- Fix for node position of
js2-new-node(#591). - Support the d (hasIndices) and s (dotAll) regexp flags (#590).
- Support for
_separator in numbers (i.e., numeric separator) (#584).
2021-12-29
- Imenu support for mocha-like (includes Jasmine and Cypress) test
files: i.e.,
M-x imenuwill now list test blocks defined withdescribe()andit()(#576). - Minor improvements in
js2-jump-to-definition(#423). - Support for private class members (#537).
- Support for dynamic imports and
import.meta(#547). - Support for trailing comma in arrow function parameters (#480).
- Support for
for await ofsyntax (#543).
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-modewithjs2-minor-mode(see README), rather thanjs2-jsx-mode. - Using
js2-jsx-modewill now trigger a warning in Emacs 27. - Support for optional-chaining operator
?.
2019-02-19
- Changed the default of
js2-strict-trailing-comma-warningto 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,@virtualand@typedef. - Support for anonymous class exports.
2017-07-21
- Support for async arrow function without parentheses.
- Support for
/*jslintdeclarations. - 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-*-externsare now evaluated on demand. As a result, they can now be effectively used as file- or directory-local variables.- 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-nodeis renamed tojs2-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 fromjs2-mode. Supports indentation of JSXElement expressions wrapped within parentheses or as function arguments. Indentation is customizable viasgml-attribute-offset. - Experimental support for async/await ECMAScript proposal.
20150909
js2-modenow derives fromjs-mode. That means the former function will runjs-mode-hook, as well asjs2-mode-hook. The ... ...