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 imenu
will 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 of
syntax (#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-mode
withjs2-minor-mode
(see README), rather thanjs2-jsx-mode
. - 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 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-node
is 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-mode
now derives fromjs-mode
. That means the former function will runjs-mode-hook
, as well asjs2-mode-hook
. The ... ...