js2-mode 
- Description
- Improved JavaScript editing mode
- Latest
- js2-mode-20231224.0.20241205.14012.tar (.sig), 2024-Dec-05, 620 KiB
- Maintainer
- Steve Yegge <steve.yegge@gmail.com>, mooz <stillpedant@gmail.com>, Dmitry Gutov <dmitry@gutov.dev>
- 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-20231224.0.20240908.123607.tar.lz | 2024-Sep-08 | 121 KiB |
| js2-mode-20231224.0.20240418.608.tar.lz | 2024-Apr-18 | 121 KiB |
| js2-mode-20231224.0.20240221.35415.tar.lz | 2024-Feb-21 | 121 KiB |
| js2-mode-20231224.0.20231225.115039.tar.lz | 2023-Dec-25 | 121 KiB |
| js2-mode-20231224.0.20231224.185128.tar.lz | 2023-Dec-24 | 121 KiB |
| js2-mode-20230408.0.20231219.192621.tar.lz | 2023-Dec-19 | 121 KiB |
| js2-mode-20230408.0.20230628.23819.tar.lz | 2023-Jun-28 | 121 KiB |
| js2-mode-20220710.0.20221028.181938.tar.lz | 2022-Oct-28 | 121 KiB |
| js2-mode-20201220.0.20211228.121202.tar.lz | 2021-Dec-28 | 120 KiB |
| js2-mode-20190219.0.20201128.640.tar.lz | 2020-Dec-14 | 117 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 ... ...