;;; js2-mode.el --- Improved JavaScript editing mode ;; Copyright (C) 2009, 2011-2016 Free Software Foundation, Inc. ;; Author: Steve Yegge ;; mooz ;; Dmitry Gutov ;; URL: https://github.com/mooz/js2-mode/ ;; http://code.google.com/p/js2-mode/ ;; Version: 20160623 ;; Keywords: languages, javascript ;; Package-Requires: ((emacs "24.1") (cl-lib "0.5")) ;; This file is part of GNU Emacs. ;; GNU Emacs is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; GNU Emacs is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs. If not, see . ;;; Commentary: ;; 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)) ;; Support for JSX is available via the derived mode `js2-jsx-mode'. If you ;; also want JSX support, use that mode instead: ;; (add-to-list 'auto-mode-alist '("\\.jsx?\\'" . js2-jsx-mode)) ;; (add-to-list 'interpreter-mode-alist '("node" . js2-jsx-mode)) ;; 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