# HG changeset patch # User Steve Yegge # Date 1248760655 0 # Node ID d4d230a6489cb3bfc2599c78c46c098bd8316750 # Parent e3c595123485c2a21fb88b877b39016c2f1916b3 added js2-mode.el diff -r e3c595123485 -r d4d230a6489c etc/NEWS --- a/etc/NEWS Tue Jul 28 02:09:52 2009 +0000 +++ b/etc/NEWS Tue Jul 28 05:57:35 2009 +0000 @@ -138,6 +138,11 @@ functions and variables. +* New Modes and Packages in Emacs 23.2 + +** js2-mode.el is a new major mode for JavaScript files. + + * Installation Changes in Emacs 23.1 ** The default X toolkit is now Gtk+, rather than Lucid. diff -r e3c595123485 -r d4d230a6489c lisp/ChangeLog --- a/lisp/ChangeLog Tue Jul 28 02:09:52 2009 +0000 +++ b/lisp/ChangeLog Tue Jul 28 05:57:35 2009 +0000 @@ -1,3 +1,7 @@ +2009-07-28 Steve Yegge > + + * progmodes/js2-mode.el: New file. + 2009-07-28 Nick Roberts * progmodes/gud.el (jdb): Add gud-pstar to dump object information. diff -r e3c595123485 -r d4d230a6489c lisp/Makefile.in --- a/lisp/Makefile.in Tue Jul 28 02:09:52 2009 +0000 +++ b/lisp/Makefile.in Tue Jul 28 05:57:35 2009 +0000 @@ -1051,6 +1051,7 @@ $(lisp)/progmodes/idlw-toolbar.elc \ $(lisp)/progmodes/idlwave.elc \ $(lisp)/progmodes/inf-lisp.elc \ + $(lisp)/progmodes/js2-mode.elc \ $(lisp)/progmodes/ld-script.elc \ $(lisp)/progmodes/m4-mode.elc \ $(lisp)/progmodes/make-mode.elc \ diff -r e3c595123485 -r d4d230a6489c lisp/progmodes/js2-mode.el --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/progmodes/js2-mode.el Tue Jul 28 05:57:35 2009 +0000 @@ -0,0 +1,11358 @@ +;;; js2-mode.el --- an improved JavaScript editing mode + +;; Copyright (C) 2009 Free Software Foundation, Inc. + +;; Author: Steve Yegge +;; Version: See `js2-mode-version' +;; Keywords: languages, javascript + +;; 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 to 1.8 +;; - 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 +;; - typing helpers such as automatic insertion of matching braces/parens +;; - many customization options + +;; 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