Mercurial > emacs
annotate lisp/progmodes/js.el @ 110024:5428546bbb98
Add a new super-simple HTML renderer based on w3m -halfdump by Lars Magne Ingebrigtsen <larsi@gnus.org>.
* gnus-html.el: Start a new super-simple HTML renderer based on w3m.
author | Katsumi Yamaoka <yamaoka@jpl.org> |
---|---|
date | Mon, 30 Aug 2010 06:13:50 +0000 |
parents | 280c8ae2476d |
children | c7809974cd64 |
rev | line source |
---|---|
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1 ;;; js.el --- Major mode for editing JavaScript |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2 |
106815 | 3 ;; Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc. |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
4 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
5 ;; Author: Karl Landstrom <karl.landstrom@brgeight.se> |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
6 ;; Daniel Colascione <dan.colascione@gmail.com> |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
7 ;; Maintainer: Daniel Colascione <dan.colascione@gmail.com> |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
8 ;; Version: 9 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
9 ;; Date: 2009-07-25 |
110015
280c8ae2476d
Add "Package:" file headers to denote built-in packages.
Chong Yidong <cyd@stupidchicken.com>
parents:
109997
diff
changeset
|
10 ;; Keywords: languages, javascript |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
11 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
12 ;; This file is part of GNU Emacs. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
13 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
14 ;; GNU Emacs is free software: you can redistribute it and/or modify |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
15 ;; it under the terms of the GNU General Public License as published by |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
16 ;; the Free Software Foundation, either version 3 of the License, or |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
17 ;; (at your option) any later version. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
18 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
19 ;; GNU Emacs is distributed in the hope that it will be useful, |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
20 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
21 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
22 ;; GNU General Public License for more details. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
23 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
24 ;; You should have received a copy of the GNU General Public License |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
25 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
26 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
27 ;;; Commentary |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
28 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
29 ;; This is based on Karl Landstrom's barebones javascript-mode. This |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
30 ;; is much more robust and works with cc-mode's comment filling |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
31 ;; (mostly). |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
32 ;; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
33 ;; The main features of this JavaScript mode are syntactic |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
34 ;; highlighting (enabled with `font-lock-mode' or |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
35 ;; `global-font-lock-mode'), automatic indentation and filling of |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
36 ;; comments, C preprocessor fontification, and MozRepl integration. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
37 ;; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
38 ;; General Remarks: |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
39 ;; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
40 ;; XXX: This mode assumes that block comments are not nested inside block |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
41 ;; XXX: comments |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
42 ;; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
43 ;; Exported names start with "js-"; private names start with |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
44 ;; "js--". |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
45 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
46 ;;; Code: |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
47 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
48 (eval-and-compile |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
49 (require 'cc-mode) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
50 (require 'font-lock) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
51 (require 'newcomment) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
52 (require 'imenu) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
53 (require 'etags) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
54 (require 'thingatpt) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
55 (require 'easymenu) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
56 (require 'moz nil t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
57 (require 'json nil t)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
58 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
59 (eval-when-compile |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
60 (require 'cl) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
61 (require 'comint) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
62 (require 'ido)) |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
63 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
64 (defvar inferior-moz-buffer) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
65 (defvar moz-repl-name) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
66 (defvar ido-cur-list) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
67 (declare-function ido-mode "ido") |
104391
0642b524d60c
(inferior-moz-process): Fix declaration.
Glenn Morris <rgm@gnu.org>
parents:
104276
diff
changeset
|
68 (declare-function inferior-moz-process "ext:mozrepl" ()) |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
69 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
70 ;;; Constants |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
71 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
72 (defconst js--name-start-re "[a-zA-Z_$]" |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
73 "Regexp matching the start of a JavaScript identifier, without grouping.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
74 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
75 (defconst js--stmt-delim-chars "^;{}?:") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
76 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
77 (defconst js--name-re (concat js--name-start-re |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
78 "\\(?:\\s_\\|\\sw\\)*") |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
79 "Regexp matching a JavaScript identifier, without grouping.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
80 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
81 (defconst js--objfield-re (concat js--name-re ":") |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
82 "Regexp matching the start of a JavaScript object field.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
83 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
84 (defconst js--dotted-name-re |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
85 (concat js--name-re "\\(?:\\." js--name-re "\\)*") |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
86 "Regexp matching a dot-separated sequence of JavaScript names.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
87 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
88 (defconst js--cpp-name-re js--name-re |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
89 "Regexp matching a C preprocessor name.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
90 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
91 (defconst js--opt-cpp-start "^\\s-*#\\s-*\\([[:alnum:]]+\\)" |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
92 "Regexp matching the prefix of a cpp directive. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
93 This includes the directive name, or nil in languages without |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
94 preprocessor support. The first submatch surrounds the directive |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
95 name.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
96 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
97 (defconst js--plain-method-re |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
98 (concat "^\\s-*?\\(" js--dotted-name-re "\\)\\.prototype" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
99 "\\.\\(" js--name-re "\\)\\s-*?=\\s-*?\\(function\\)\\_>") |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
100 "Regexp matching an explicit JavaScript prototype \"method\" declaration. |
104683
2b8eeeaa8c1d
* international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents:
104391
diff
changeset
|
101 Group 1 is a (possibly-dotted) class name, group 2 is a method name, |
2b8eeeaa8c1d
* international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents:
104391
diff
changeset
|
102 and group 3 is the 'function' keyword.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
103 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
104 (defconst js--plain-class-re |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
105 (concat "^\\s-*\\(" js--dotted-name-re "\\)\\.prototype" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
106 "\\s-*=\\s-*{") |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
107 "Regexp matching a JavaScript explicit prototype \"class\" declaration. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
108 An example of this is \"Class.prototype = { method1: ...}\".") |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
109 |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
110 ;; var NewClass = BaseClass.extend( |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
111 (defconst js--mp-class-decl-re |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
112 (concat "^\\s-*var\\s-+" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
113 "\\(" js--name-re "\\)" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
114 "\\s-*=\\s-*" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
115 "\\(" js--dotted-name-re |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
116 "\\)\\.extend\\(?:Final\\)?\\s-*(\\s-*{?\\s-*$")) |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
117 |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
118 ;; var NewClass = Class.create() |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
119 (defconst js--prototype-obsolete-class-decl-re |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
120 (concat "^\\s-*\\(?:var\\s-+\\)?" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
121 "\\(" js--dotted-name-re "\\)" |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
122 "\\s-*=\\s-*Class\\.create()")) |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
123 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
124 (defconst js--prototype-objextend-class-decl-re-1 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
125 (concat "^\\s-*Object\\.extend\\s-*(" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
126 "\\(" js--dotted-name-re "\\)" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
127 "\\s-*,\\s-*{")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
128 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
129 (defconst js--prototype-objextend-class-decl-re-2 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
130 (concat "^\\s-*\\(?:var\\s-+\\)?" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
131 "\\(" js--dotted-name-re "\\)" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
132 "\\s-*=\\s-*Object\\.extend\\s-*\(")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
133 |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
134 ;; var NewClass = Class.create({ |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
135 (defconst js--prototype-class-decl-re |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
136 (concat "^\\s-*\\(?:var\\s-+\\)?" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
137 "\\(" js--name-re "\\)" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
138 "\\s-*=\\s-*Class\\.create\\s-*(\\s-*" |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
139 "\\(?:\\(" js--dotted-name-re "\\)\\s-*,\\s-*\\)?{?")) |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
140 |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
141 ;; Parent class name(s) (yes, multiple inheritance in JavaScript) are |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
142 ;; matched with dedicated font-lock matchers |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
143 (defconst js--dojo-class-decl-re |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
144 (concat "^\\s-*dojo\\.declare\\s-*(\"\\(" js--dotted-name-re "\\)")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
145 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
146 (defconst js--extjs-class-decl-re-1 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
147 (concat "^\\s-*Ext\\.extend\\s-*(" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
148 "\\s-*\\(" js--dotted-name-re "\\)" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
149 "\\s-*,\\s-*\\(" js--dotted-name-re "\\)") |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
150 "Regexp matching an ExtJS class declaration (style 1).") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
151 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
152 (defconst js--extjs-class-decl-re-2 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
153 (concat "^\\s-*\\(?:var\\s-+\\)?" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
154 "\\(" js--name-re "\\)" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
155 "\\s-*=\\s-*Ext\\.extend\\s-*(\\s-*" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
156 "\\(" js--dotted-name-re "\\)") |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
157 "Regexp matching an ExtJS class declaration (style 2).") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
158 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
159 (defconst js--mochikit-class-re |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
160 (concat "^\\s-*MochiKit\\.Base\\.update\\s-*(\\s-*" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
161 "\\(" js--dotted-name-re "\\)") |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
162 "Regexp matching a MochiKit class declaration.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
163 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
164 (defconst js--dummy-class-style |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
165 '(:name "[Automatically Generated Class]")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
166 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
167 (defconst js--class-styles |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
168 `((:name "Plain" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
169 :class-decl ,js--plain-class-re |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
170 :prototype t |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
171 :contexts (toplevel) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
172 :framework javascript) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
173 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
174 (:name "MochiKit" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
175 :class-decl ,js--mochikit-class-re |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
176 :prototype t |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
177 :contexts (toplevel) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
178 :framework mochikit) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
179 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
180 (:name "Prototype (Obsolete)" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
181 :class-decl ,js--prototype-obsolete-class-decl-re |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
182 :contexts (toplevel) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
183 :framework prototype) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
184 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
185 (:name "Prototype (Modern)" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
186 :class-decl ,js--prototype-class-decl-re |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
187 :contexts (toplevel) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
188 :framework prototype) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
189 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
190 (:name "Prototype (Object.extend)" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
191 :class-decl ,js--prototype-objextend-class-decl-re-1 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
192 :prototype t |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
193 :contexts (toplevel) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
194 :framework prototype) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
195 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
196 (:name "Prototype (Object.extend) 2" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
197 :class-decl ,js--prototype-objextend-class-decl-re-2 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
198 :prototype t |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
199 :contexts (toplevel) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
200 :framework prototype) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
201 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
202 (:name "Dojo" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
203 :class-decl ,js--dojo-class-decl-re |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
204 :contexts (toplevel) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
205 :framework dojo) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
206 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
207 (:name "ExtJS (style 1)" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
208 :class-decl ,js--extjs-class-decl-re-1 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
209 :prototype t |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
210 :contexts (toplevel) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
211 :framework extjs) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
212 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
213 (:name "ExtJS (style 2)" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
214 :class-decl ,js--extjs-class-decl-re-2 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
215 :contexts (toplevel) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
216 :framework extjs) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
217 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
218 (:name "Merrill Press" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
219 :class-decl ,js--mp-class-decl-re |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
220 :contexts (toplevel) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
221 :framework merrillpress)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
222 |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
223 "List of JavaScript class definition styles. |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
224 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
225 A class definition style is a plist with the following keys: |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
226 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
227 :name is a human-readable name of the class type |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
228 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
229 :class-decl is a regular expression giving the start of the |
104683
2b8eeeaa8c1d
* international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents:
104391
diff
changeset
|
230 class. Its first group must match the name of its class. If there |
2b8eeeaa8c1d
* international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents:
104391
diff
changeset
|
231 is a parent class, the second group should match, and it should be |
2b8eeeaa8c1d
* international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents:
104391
diff
changeset
|
232 the name of the class. |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
233 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
234 If :prototype is present and non-nil, the parser will merge |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
235 declarations for this constructs with others at the same lexical |
104683
2b8eeeaa8c1d
* international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents:
104391
diff
changeset
|
236 level that have the same name. Otherwise, multiple definitions |
2b8eeeaa8c1d
* international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents:
104391
diff
changeset
|
237 will create multiple top-level entries. Don't use :prototype |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
238 unnecessarily: it has an associated cost in performance. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
239 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
240 If :strip-prototype is present and non-nil, then if the class |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
241 name as matched contains |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
242 ") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
243 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
244 (defconst js--available-frameworks |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
245 (loop with available-frameworks |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
246 for style in js--class-styles |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
247 for framework = (plist-get style :framework) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
248 unless (memq framework available-frameworks) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
249 collect framework into available-frameworks |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
250 finally return available-frameworks) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
251 "List of available JavaScript frameworks symbols.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
252 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
253 (defconst js--function-heading-1-re |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
254 (concat |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
255 "^\\s-*function\\s-+\\(" js--name-re "\\)") |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
256 "Regexp matching the start of a JavaScript function header. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
257 Match group 1 is the name of the function.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
258 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
259 (defconst js--function-heading-2-re |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
260 (concat |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
261 "^\\s-*\\(" js--name-re "\\)\\s-*:\\s-*function\\_>") |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
262 "Regexp matching the start of a function entry in an associative array. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
263 Match group 1 is the name of the function.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
264 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
265 (defconst js--function-heading-3-re |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
266 (concat |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
267 "^\\s-*\\(?:var\\s-+\\)?\\(" js--dotted-name-re "\\)" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
268 "\\s-*=\\s-*function\\_>") |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
269 "Regexp matching a line in the JavaScript form \"var MUMBLE = function\". |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
270 Match group 1 is MUMBLE.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
271 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
272 (defconst js--macro-decl-re |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
273 (concat "^\\s-*#\\s-*define\\s-+\\(" js--cpp-name-re "\\)\\s-*(") |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
274 "Regexp matching a CPP macro definition, up to the opening parenthesis. |
104683
2b8eeeaa8c1d
* international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents:
104391
diff
changeset
|
275 Match group 1 is the name of the macro.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
276 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
277 (defun js--regexp-opt-symbol (list) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
278 "Like `regexp-opt', but surround the result with `\\\\_<' and `\\\\_>'." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
279 (concat "\\_<" (regexp-opt list t) "\\_>")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
280 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
281 (defconst js--keyword-re |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
282 (js--regexp-opt-symbol |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
283 '("abstract" "break" "case" "catch" "class" "const" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
284 "continue" "debugger" "default" "delete" "do" "else" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
285 "enum" "export" "extends" "final" "finally" "for" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
286 "function" "goto" "if" "implements" "import" "in" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
287 "instanceof" "interface" "native" "new" "package" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
288 "private" "protected" "public" "return" "static" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
289 "super" "switch" "synchronized" "throw" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
290 "throws" "transient" "try" "typeof" "var" "void" "let" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
291 "yield" "volatile" "while" "with")) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
292 "Regexp matching any JavaScript keyword.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
293 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
294 (defconst js--basic-type-re |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
295 (js--regexp-opt-symbol |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
296 '("boolean" "byte" "char" "double" "float" "int" "long" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
297 "short" "void")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
298 "Regular expression matching any predefined type in JavaScript.") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
299 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
300 (defconst js--constant-re |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
301 (js--regexp-opt-symbol '("false" "null" "undefined" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
302 "Infinity" "NaN" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
303 "true" "arguments" "this")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
304 "Regular expression matching any future reserved words in JavaScript.") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
305 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
306 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
307 (defconst js--font-lock-keywords-1 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
308 (list |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
309 "\\_<import\\_>" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
310 (list js--function-heading-1-re 1 font-lock-function-name-face) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
311 (list js--function-heading-2-re 1 font-lock-function-name-face)) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
312 "Level one font lock keywords for `js-mode'.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
313 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
314 (defconst js--font-lock-keywords-2 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
315 (append js--font-lock-keywords-1 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
316 (list (list js--keyword-re 1 font-lock-keyword-face) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
317 (list "\\_<for\\_>" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
318 "\\s-+\\(each\\)\\_>" nil nil |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
319 (list 1 'font-lock-keyword-face)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
320 (cons js--basic-type-re font-lock-type-face) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
321 (cons js--constant-re font-lock-constant-face))) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
322 "Level two font lock keywords for `js-mode'.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
323 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
324 ;; js--pitem is the basic building block of the lexical |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
325 ;; database. When one refers to a real part of the buffer, the region |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
326 ;; of text to which it refers is split into a conceptual header and |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
327 ;; body. Consider the (very short) block described by a hypothetical |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
328 ;; js--pitem: |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
329 ;; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
330 ;; function foo(a,b,c) { return 42; } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
331 ;; ^ ^ ^ |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
332 ;; | | | |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
333 ;; +- h-begin +- h-end +- b-end |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
334 ;; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
335 ;; (Remember that these are buffer positions, and therefore point |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
336 ;; between characters, not at them. An arrow drawn to a character |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
337 ;; indicates the corresponding position is between that character and |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
338 ;; the one immediately preceding it.) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
339 ;; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
340 ;; The header is the region of text [h-begin, h-end], and is |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
341 ;; the text needed to unambiguously recognize the start of the |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
342 ;; construct. If the entire header is not present, the construct is |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
343 ;; not recognized at all. No other pitems may be nested inside the |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
344 ;; header. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
345 ;; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
346 ;; The body is the region [h-end, b-end]. It may contain nested |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
347 ;; js--pitem instances. The body of a pitem may be empty: in |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
348 ;; that case, b-end is equal to header-end. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
349 ;; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
350 ;; The three points obey the following relationship: |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
351 ;; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
352 ;; h-begin < h-end <= b-end |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
353 ;; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
354 ;; We put a text property in the buffer on the character *before* |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
355 ;; h-end, and if we see it, on the character *before* b-end. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
356 ;; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
357 ;; The text property for h-end, js--pstate, is actually a list |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
358 ;; of all js--pitem instances open after the marked character. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
359 ;; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
360 ;; The text property for b-end, js--pend, is simply the |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
361 ;; js--pitem that ends after the marked character. (Because |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
362 ;; pitems always end when the paren-depth drops below a critical |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
363 ;; value, and because we can only drop one level per character, only |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
364 ;; one pitem may end at a given character.) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
365 ;; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
366 ;; In the structure below, we only store h-begin and (sometimes) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
367 ;; b-end. We can trivially and quickly find h-end by going to h-begin |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
368 ;; and searching for an js--pstate text property. Since no other |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
369 ;; js--pitem instances can be nested inside the header of a |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
370 ;; pitem, the location after the character with this text property |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
371 ;; must be h-end. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
372 ;; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
373 ;; js--pitem instances are never modified (with the exception |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
374 ;; of the b-end field). Instead, modified copies are added at subseqnce parse points. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
375 ;; (The exception for b-end and its caveats is described below.) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
376 ;; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
377 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
378 (defstruct (js--pitem (:type list)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
379 ;; IMPORTANT: Do not alter the position of fields within the list. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
380 ;; Various bits of code depend on their positions, particularly |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
381 ;; anything that manipulates the list of children. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
382 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
383 ;; List of children inside this pitem's body |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
384 (children nil :read-only t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
385 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
386 ;; When we reach this paren depth after h-end, the pitem ends |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
387 (paren-depth nil :read-only t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
388 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
389 ;; Symbol or class-style plist if this is a class |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
390 (type nil :read-only t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
391 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
392 ;; See above |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
393 (h-begin nil :read-only t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
394 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
395 ;; List of strings giving the parts of the name of this pitem (e.g., |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
396 ;; '("MyClass" "myMethod"), or t if this pitem is anonymous |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
397 (name nil :read-only t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
398 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
399 ;; THIS FIELD IS MUTATED, and its value is shared by all copies of |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
400 ;; this pitem: when we copy-and-modify pitem instances, we share |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
401 ;; their tail structures, so all the copies actually have the same |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
402 ;; terminating cons cell. We modify that shared cons cell directly. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
403 ;; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
404 ;; The field value is either a number (buffer location) or nil if |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
405 ;; unknown. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
406 ;; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
407 ;; If the field's value is greater than `js--cache-end', the |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
408 ;; value is stale and must be treated as if it were nil. Conversely, |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
409 ;; if this field is nil, it is guaranteed that this pitem is open up |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
410 ;; to at least `js--cache-end'. (This property is handy when |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
411 ;; computing whether we're inside a given pitem.) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
412 ;; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
413 (b-end nil)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
414 |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
415 ;; The pitem we start parsing with. |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
416 (defconst js--initial-pitem |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
417 (make-js--pitem |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
418 :paren-depth most-negative-fixnum |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
419 :type 'toplevel)) |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
420 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
421 ;;; User Customization |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
422 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
423 (defgroup js nil |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
424 "Customization variables for JavaScript mode." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
425 :tag "JavaScript" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
426 :group 'languages) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
427 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
428 (defcustom js-indent-level 4 |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
429 "Number of spaces for each indentation step in `js-mode'." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
430 :type 'integer |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
431 :group 'js) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
432 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
433 (defcustom js-expr-indent-offset 0 |
109997
f583ffa8d0d6
* progmodes/js.el: Make indentation more customizable (Bug#6914).
Chong Yidong <cyd@stupidchicken.com>
parents:
109561
diff
changeset
|
434 "Number of additional spaces for indenting continued expressions. |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
435 The value must be no less than minus `js-indent-level'." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
436 :type 'integer |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
437 :group 'js) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
438 |
109997
f583ffa8d0d6
* progmodes/js.el: Make indentation more customizable (Bug#6914).
Chong Yidong <cyd@stupidchicken.com>
parents:
109561
diff
changeset
|
439 (defcustom js-paren-indent-offset 0 |
f583ffa8d0d6
* progmodes/js.el: Make indentation more customizable (Bug#6914).
Chong Yidong <cyd@stupidchicken.com>
parents:
109561
diff
changeset
|
440 "Number of additional spaces for indenting expressions in parentheses. |
f583ffa8d0d6
* progmodes/js.el: Make indentation more customizable (Bug#6914).
Chong Yidong <cyd@stupidchicken.com>
parents:
109561
diff
changeset
|
441 The value must be no less than minus `js-indent-level'." |
f583ffa8d0d6
* progmodes/js.el: Make indentation more customizable (Bug#6914).
Chong Yidong <cyd@stupidchicken.com>
parents:
109561
diff
changeset
|
442 :type 'integer |
f583ffa8d0d6
* progmodes/js.el: Make indentation more customizable (Bug#6914).
Chong Yidong <cyd@stupidchicken.com>
parents:
109561
diff
changeset
|
443 :group 'js |
f583ffa8d0d6
* progmodes/js.el: Make indentation more customizable (Bug#6914).
Chong Yidong <cyd@stupidchicken.com>
parents:
109561
diff
changeset
|
444 :version "24.1") |
f583ffa8d0d6
* progmodes/js.el: Make indentation more customizable (Bug#6914).
Chong Yidong <cyd@stupidchicken.com>
parents:
109561
diff
changeset
|
445 |
f583ffa8d0d6
* progmodes/js.el: Make indentation more customizable (Bug#6914).
Chong Yidong <cyd@stupidchicken.com>
parents:
109561
diff
changeset
|
446 (defcustom js-square-indent-offset 0 |
f583ffa8d0d6
* progmodes/js.el: Make indentation more customizable (Bug#6914).
Chong Yidong <cyd@stupidchicken.com>
parents:
109561
diff
changeset
|
447 "Number of additional spaces for indenting expressions in square braces. |
f583ffa8d0d6
* progmodes/js.el: Make indentation more customizable (Bug#6914).
Chong Yidong <cyd@stupidchicken.com>
parents:
109561
diff
changeset
|
448 The value must be no less than minus `js-indent-level'." |
f583ffa8d0d6
* progmodes/js.el: Make indentation more customizable (Bug#6914).
Chong Yidong <cyd@stupidchicken.com>
parents:
109561
diff
changeset
|
449 :type 'integer |
f583ffa8d0d6
* progmodes/js.el: Make indentation more customizable (Bug#6914).
Chong Yidong <cyd@stupidchicken.com>
parents:
109561
diff
changeset
|
450 :group 'js |
f583ffa8d0d6
* progmodes/js.el: Make indentation more customizable (Bug#6914).
Chong Yidong <cyd@stupidchicken.com>
parents:
109561
diff
changeset
|
451 :version "24.1") |
f583ffa8d0d6
* progmodes/js.el: Make indentation more customizable (Bug#6914).
Chong Yidong <cyd@stupidchicken.com>
parents:
109561
diff
changeset
|
452 |
f583ffa8d0d6
* progmodes/js.el: Make indentation more customizable (Bug#6914).
Chong Yidong <cyd@stupidchicken.com>
parents:
109561
diff
changeset
|
453 (defcustom js-curly-indent-offset 0 |
f583ffa8d0d6
* progmodes/js.el: Make indentation more customizable (Bug#6914).
Chong Yidong <cyd@stupidchicken.com>
parents:
109561
diff
changeset
|
454 "Number of additional spaces for indenting expressions in curly braces. |
f583ffa8d0d6
* progmodes/js.el: Make indentation more customizable (Bug#6914).
Chong Yidong <cyd@stupidchicken.com>
parents:
109561
diff
changeset
|
455 The value must be no less than minus `js-indent-level'." |
f583ffa8d0d6
* progmodes/js.el: Make indentation more customizable (Bug#6914).
Chong Yidong <cyd@stupidchicken.com>
parents:
109561
diff
changeset
|
456 :type 'integer |
f583ffa8d0d6
* progmodes/js.el: Make indentation more customizable (Bug#6914).
Chong Yidong <cyd@stupidchicken.com>
parents:
109561
diff
changeset
|
457 :group 'js |
f583ffa8d0d6
* progmodes/js.el: Make indentation more customizable (Bug#6914).
Chong Yidong <cyd@stupidchicken.com>
parents:
109561
diff
changeset
|
458 :version "24.1") |
f583ffa8d0d6
* progmodes/js.el: Make indentation more customizable (Bug#6914).
Chong Yidong <cyd@stupidchicken.com>
parents:
109561
diff
changeset
|
459 |
107692
831fbe6bd8c0
Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents:
106815
diff
changeset
|
460 (defcustom js-auto-indent-flag t |
831fbe6bd8c0
Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents:
106815
diff
changeset
|
461 "Whether to automatically indent when typing punctuation characters. |
831fbe6bd8c0
Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents:
106815
diff
changeset
|
462 If non-nil, the characters {}();,: also indent the current line |
831fbe6bd8c0
Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents:
106815
diff
changeset
|
463 in Javascript mode." |
831fbe6bd8c0
Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents:
106815
diff
changeset
|
464 :type 'boolean |
831fbe6bd8c0
Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents:
106815
diff
changeset
|
465 :group 'js) |
831fbe6bd8c0
Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents:
106815
diff
changeset
|
466 |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
467 (defcustom js-flat-functions nil |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
468 "Treat nested functions as top-level functions in `js-mode'. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
469 This applies to function movement, marking, and so on." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
470 :type 'boolean |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
471 :group 'js) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
472 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
473 (defcustom js-comment-lineup-func #'c-lineup-C-comments |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
474 "Lineup function for `cc-mode-style', for C comments in `js-mode'." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
475 :type 'function |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
476 :group 'js) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
477 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
478 (defcustom js-enabled-frameworks js--available-frameworks |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
479 "Frameworks recognized by `js-mode'. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
480 To improve performance, you may turn off some frameworks you |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
481 seldom use, either globally or on a per-buffer basis." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
482 :type (cons 'set (mapcar (lambda (x) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
483 (list 'const x)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
484 js--available-frameworks)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
485 :group 'js) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
486 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
487 (defcustom js-js-switch-tabs |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
488 (and (memq system-type '(darwin)) t) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
489 "Whether `js-mode' should display tabs while selecting them. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
490 This is useful only if the windowing system has a good mechanism |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
491 for preventing Firefox from stealing the keyboard focus." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
492 :type 'boolean |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
493 :group 'js) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
494 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
495 (defcustom js-js-tmpdir |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
496 "~/.emacs.d/js/js" |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
497 "Temporary directory used by `js-mode' to communicate with Mozilla. |
109258 | 498 This directory must be readable and writable by both Mozilla and Emacs." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
499 :type 'directory |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
500 :group 'js) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
501 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
502 (defcustom js-js-timeout 5 |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
503 "Reply timeout for executing commands in Mozilla via `js-mode'. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
504 The value is given in seconds. Increase this value if you are |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
505 getting timeout messages." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
506 :type 'integer |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
507 :group 'js) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
508 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
509 ;;; KeyMap |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
510 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
511 (defvar js-mode-map |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
512 (let ((keymap (make-sparse-keymap))) |
107692
831fbe6bd8c0
Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents:
106815
diff
changeset
|
513 (mapc (lambda (key) |
831fbe6bd8c0
Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents:
106815
diff
changeset
|
514 (define-key keymap key #'js-insert-and-indent)) |
831fbe6bd8c0
Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents:
106815
diff
changeset
|
515 '("{" "}" "(" ")" ":" ";" ",")) |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
516 (define-key keymap [(control ?c) (meta ?:)] #'js-eval) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
517 (define-key keymap [(control ?c) (control ?j)] #'js-set-js-context) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
518 (define-key keymap [(control meta ?x)] #'js-eval-defun) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
519 (define-key keymap [(meta ?.)] #'js-find-symbol) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
520 (easy-menu-define nil keymap "Javascript Menu" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
521 '("Javascript" |
109258 | 522 ["Select New Mozilla Context..." js-set-js-context |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
523 (fboundp #'inferior-moz-process)] |
109258 | 524 ["Evaluate Expression in Mozilla Context..." js-eval |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
525 (fboundp #'inferior-moz-process)] |
109258 | 526 ["Send Current Function to Mozilla..." js-eval-defun |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
527 (fboundp #'inferior-moz-process)])) |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
528 keymap) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
529 "Keymap for `js-mode'.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
530 |
107692
831fbe6bd8c0
Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents:
106815
diff
changeset
|
531 (defun js-insert-and-indent (key) |
831fbe6bd8c0
Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents:
106815
diff
changeset
|
532 "Run the command bound to KEY, and indent if necessary. |
831fbe6bd8c0
Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents:
106815
diff
changeset
|
533 Indentation does not take place if point is in a string or |
831fbe6bd8c0
Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents:
106815
diff
changeset
|
534 comment." |
831fbe6bd8c0
Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents:
106815
diff
changeset
|
535 (interactive (list (this-command-keys))) |
831fbe6bd8c0
Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents:
106815
diff
changeset
|
536 (call-interactively (lookup-key (current-global-map) key)) |
831fbe6bd8c0
Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents:
106815
diff
changeset
|
537 (let ((syntax (save-restriction (widen) (syntax-ppss)))) |
831fbe6bd8c0
Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents:
106815
diff
changeset
|
538 (when (or (and (not (nth 8 syntax)) |
831fbe6bd8c0
Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents:
106815
diff
changeset
|
539 js-auto-indent-flag) |
831fbe6bd8c0
Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents:
106815
diff
changeset
|
540 (and (nth 4 syntax) |
831fbe6bd8c0
Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents:
106815
diff
changeset
|
541 (eq (current-column) |
831fbe6bd8c0
Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents:
106815
diff
changeset
|
542 (1+ (current-indentation))))) |
831fbe6bd8c0
Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents:
106815
diff
changeset
|
543 (indent-according-to-mode)))) |
831fbe6bd8c0
Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents:
106815
diff
changeset
|
544 |
831fbe6bd8c0
Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents:
106815
diff
changeset
|
545 |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
546 ;;; Syntax table and parsing |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
547 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
548 (defvar js-mode-syntax-table |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
549 (let ((table (make-syntax-table))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
550 (c-populate-syntax-table table) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
551 (modify-syntax-entry ?$ "_" table) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
552 table) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
553 "Syntax table for `js-mode'.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
554 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
555 (defvar js--quick-match-re nil |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
556 "Autogenerated regexp used by `js-mode' to match buffer constructs.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
557 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
558 (defvar js--quick-match-re-func nil |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
559 "Autogenerated regexp used by `js-mode' to match constructs and functions.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
560 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
561 (make-variable-buffer-local 'js--quick-match-re) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
562 (make-variable-buffer-local 'js--quick-match-re-func) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
563 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
564 (defvar js--cache-end 1 |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
565 "Last valid buffer position for the `js-mode' function cache.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
566 (make-variable-buffer-local 'js--cache-end) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
567 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
568 (defvar js--last-parse-pos nil |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
569 "Latest parse position reached by `js--ensure-cache'.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
570 (make-variable-buffer-local 'js--last-parse-pos) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
571 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
572 (defvar js--state-at-last-parse-pos nil |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
573 "Parse state at `js--last-parse-pos'.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
574 (make-variable-buffer-local 'js--state-at-last-parse-pos) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
575 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
576 (defun js--flatten-list (list) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
577 (loop for item in list |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
578 nconc (cond ((consp item) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
579 (js--flatten-list item)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
580 (item (list item))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
581 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
582 (defun js--maybe-join (prefix separator suffix &rest list) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
583 "Helper function for `js--update-quick-match-re'. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
584 If LIST contains any element that is not nil, return its non-nil |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
585 elements, separated by SEPARATOR, prefixed by PREFIX, and ended |
104683
2b8eeeaa8c1d
* international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents:
104391
diff
changeset
|
586 with SUFFIX as with `concat'. Otherwise, if LIST is empty, return |
2b8eeeaa8c1d
* international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents:
104391
diff
changeset
|
587 nil. If any element in LIST is itself a list, flatten that |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
588 element." |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
589 (setq list (js--flatten-list list)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
590 (when list |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
591 (concat prefix (mapconcat #'identity list separator) suffix))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
592 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
593 (defun js--update-quick-match-re () |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
594 "Internal function used by `js-mode' for caching buffer constructs. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
595 This updates `js--quick-match-re', based on the current set of |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
596 enabled frameworks." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
597 (setq js--quick-match-re |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
598 (js--maybe-join |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
599 "^[ \t]*\\(?:" "\\|" "\\)" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
600 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
601 ;; #define mumble |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
602 "#define[ \t]+[a-zA-Z_]" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
603 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
604 (when (memq 'extjs js-enabled-frameworks) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
605 "Ext\\.extend") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
606 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
607 (when (memq 'prototype js-enabled-frameworks) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
608 "Object\\.extend") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
609 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
610 ;; var mumble = THING ( |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
611 (js--maybe-join |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
612 "\\(?:var[ \t]+\\)?[a-zA-Z_$0-9.]+[ \t]*=[ \t]*\\(?:" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
613 "\\|" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
614 "\\)[ \t]*\(" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
615 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
616 (when (memq 'prototype js-enabled-frameworks) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
617 "Class\\.create") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
618 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
619 (when (memq 'extjs js-enabled-frameworks) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
620 "Ext\\.extend") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
621 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
622 (when (memq 'merrillpress js-enabled-frameworks) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
623 "[a-zA-Z_$0-9]+\\.extend\\(?:Final\\)?")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
624 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
625 (when (memq 'dojo js-enabled-frameworks) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
626 "dojo\\.declare[ \t]*\(") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
627 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
628 (when (memq 'mochikit js-enabled-frameworks) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
629 "MochiKit\\.Base\\.update[ \t]*\(") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
630 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
631 ;; mumble.prototypeTHING |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
632 (js--maybe-join |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
633 "[a-zA-Z_$0-9.]+\\.prototype\\(?:" "\\|" "\\)" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
634 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
635 (when (memq 'javascript js-enabled-frameworks) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
636 '( ;; foo.prototype.bar = function( |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
637 "\\.[a-zA-Z_$0-9]+[ \t]*=[ \t]*function[ \t]*\(" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
638 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
639 ;; mumble.prototype = { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
640 "[ \t]*=[ \t]*{"))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
641 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
642 (setq js--quick-match-re-func |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
643 (concat "function\\|" js--quick-match-re))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
644 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
645 (defun js--forward-text-property (propname) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
646 "Move over the next value of PROPNAME in the buffer. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
647 If found, return that value and leave point after the character |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
648 having that value; otherwise, return nil and leave point at EOB." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
649 (let ((next-value (get-text-property (point) propname))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
650 (if next-value |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
651 (forward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
652 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
653 (goto-char (next-single-property-change |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
654 (point) propname nil (point-max))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
655 (unless (eobp) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
656 (setq next-value (get-text-property (point) propname)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
657 (forward-char))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
658 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
659 next-value)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
660 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
661 (defun js--backward-text-property (propname) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
662 "Move over the previous value of PROPNAME in the buffer. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
663 If found, return that value and leave point just before the |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
664 character that has that value, otherwise return nil and leave |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
665 point at BOB." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
666 (unless (bobp) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
667 (let ((prev-value (get-text-property (1- (point)) propname))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
668 (if prev-value |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
669 (backward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
670 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
671 (goto-char (previous-single-property-change |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
672 (point) propname nil (point-min))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
673 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
674 (unless (bobp) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
675 (backward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
676 (setq prev-value (get-text-property (point) propname)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
677 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
678 prev-value))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
679 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
680 (defsubst js--forward-pstate () |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
681 (js--forward-text-property 'js--pstate)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
682 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
683 (defsubst js--backward-pstate () |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
684 (js--backward-text-property 'js--pstate)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
685 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
686 (defun js--pitem-goto-h-end (pitem) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
687 (goto-char (js--pitem-h-begin pitem)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
688 (js--forward-pstate)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
689 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
690 (defun js--re-search-forward-inner (regexp &optional bound count) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
691 "Helper function for `js--re-search-forward'." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
692 (let ((parse) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
693 str-terminator |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
694 (orig-macro-end (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
695 (when (js--beginning-of-macro) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
696 (c-end-of-macro) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
697 (point))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
698 (while (> count 0) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
699 (re-search-forward regexp bound) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
700 (setq parse (syntax-ppss)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
701 (cond ((setq str-terminator (nth 3 parse)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
702 (when (eq str-terminator t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
703 (setq str-terminator ?/)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
704 (re-search-forward |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
705 (concat "\\([^\\]\\|^\\)" (string str-terminator)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
706 (save-excursion (end-of-line) (point)) t)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
707 ((nth 7 parse) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
708 (forward-line)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
709 ((or (nth 4 parse) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
710 (and (eq (char-before) ?\/) (eq (char-after) ?\*))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
711 (re-search-forward "\\*/")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
712 ((and (not (and orig-macro-end |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
713 (<= (point) orig-macro-end))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
714 (js--beginning-of-macro)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
715 (c-end-of-macro)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
716 (t |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
717 (setq count (1- count)))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
718 (point)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
719 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
720 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
721 (defun js--re-search-forward (regexp &optional bound noerror count) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
722 "Search forward, ignoring strings, cpp macros, and comments. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
723 This function invokes `re-search-forward', but treats the buffer |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
724 as if strings, cpp macros, and comments have been removed. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
725 |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
726 If invoked while inside a macro, it treats the contents of the |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
727 macro as normal text." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
728 (let ((saved-point (point)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
729 (search-expr |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
730 (cond ((null count) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
731 '(js--re-search-forward-inner regexp bound 1)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
732 ((< count 0) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
733 '(js--re-search-backward-inner regexp bound (- count))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
734 ((> count 0) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
735 '(js--re-search-forward-inner regexp bound count))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
736 (condition-case err |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
737 (eval search-expr) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
738 (search-failed |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
739 (goto-char saved-point) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
740 (unless noerror |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
741 (error (error-message-string err))))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
742 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
743 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
744 (defun js--re-search-backward-inner (regexp &optional bound count) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
745 "Auxiliary function for `js--re-search-backward'." |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
746 (let ((parse) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
747 str-terminator |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
748 (orig-macro-start |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
749 (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
750 (and (js--beginning-of-macro) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
751 (point))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
752 (while (> count 0) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
753 (re-search-backward regexp bound) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
754 (when (and (> (point) (point-min)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
755 (save-excursion (backward-char) (looking-at "/[/*]"))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
756 (forward-char)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
757 (setq parse (syntax-ppss)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
758 (cond ((setq str-terminator (nth 3 parse)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
759 (when (eq str-terminator t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
760 (setq str-terminator ?/)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
761 (re-search-backward |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
762 (concat "\\([^\\]\\|^\\)" (string str-terminator)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
763 (save-excursion (beginning-of-line) (point)) t)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
764 ((nth 7 parse) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
765 (goto-char (nth 8 parse))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
766 ((or (nth 4 parse) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
767 (and (eq (char-before) ?/) (eq (char-after) ?*))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
768 (re-search-backward "/\\*")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
769 ((and (not (and orig-macro-start |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
770 (>= (point) orig-macro-start))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
771 (js--beginning-of-macro))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
772 (t |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
773 (setq count (1- count)))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
774 (point)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
775 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
776 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
777 (defun js--re-search-backward (regexp &optional bound noerror count) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
778 "Search backward, ignoring strings, preprocessor macros, and comments. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
779 |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
780 This function invokes `re-search-backward' but treats the buffer |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
781 as if strings, preprocessor macros, and comments have been |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
782 removed. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
783 |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
784 If invoked while inside a macro, treat the macro as normal text." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
785 (let ((saved-point (point)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
786 (search-expr |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
787 (cond ((null count) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
788 '(js--re-search-backward-inner regexp bound 1)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
789 ((< count 0) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
790 '(js--re-search-forward-inner regexp bound (- count))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
791 ((> count 0) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
792 '(js--re-search-backward-inner regexp bound count))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
793 (condition-case err |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
794 (eval search-expr) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
795 (search-failed |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
796 (goto-char saved-point) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
797 (unless noerror |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
798 (error (error-message-string err))))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
799 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
800 (defun js--forward-expression () |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
801 "Move forward over a whole JavaScript expression. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
802 This function doesn't move over expressions continued across |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
803 lines." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
804 (loop |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
805 ;; non-continued case; simplistic, but good enough? |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
806 do (loop until (or (eolp) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
807 (progn |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
808 (forward-comment most-positive-fixnum) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
809 (memq (char-after) '(?\, ?\; ?\] ?\) ?\})))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
810 do (forward-sexp)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
811 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
812 while (and (eq (char-after) ?\n) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
813 (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
814 (forward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
815 (js--continued-expression-p))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
816 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
817 (defun js--forward-function-decl () |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
818 "Move forward over a JavaScript function declaration. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
819 This puts point at the 'function' keyword. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
820 |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
821 If this is a syntactically-correct non-expression function, |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
822 return the name of the function, or t if the name could not be |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
823 determined. Otherwise, return nil." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
824 (assert (looking-at "\\_<function\\_>")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
825 (let ((name t)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
826 (forward-word) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
827 (forward-comment most-positive-fixnum) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
828 (when (looking-at js--name-re) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
829 (setq name (match-string-no-properties 0)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
830 (goto-char (match-end 0))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
831 (forward-comment most-positive-fixnum) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
832 (and (eq (char-after) ?\( ) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
833 (ignore-errors (forward-list) t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
834 (progn (forward-comment most-positive-fixnum) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
835 (and (eq (char-after) ?{) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
836 name))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
837 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
838 (defun js--function-prologue-beginning (&optional pos) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
839 "Return the start of the JavaScript function prologue containing POS. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
840 A function prologue is everything from start of the definition up |
104683
2b8eeeaa8c1d
* international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents:
104391
diff
changeset
|
841 to and including the opening brace. POS defaults to point. |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
842 If POS is not in a function prologue, return nil." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
843 (let (prologue-begin) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
844 (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
845 (if pos |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
846 (goto-char pos) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
847 (setq pos (point))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
848 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
849 (when (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
850 (forward-line 0) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
851 (or (looking-at js--function-heading-2-re) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
852 (looking-at js--function-heading-3-re))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
853 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
854 (setq prologue-begin (match-beginning 1)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
855 (when (<= prologue-begin pos) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
856 (goto-char (match-end 0)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
857 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
858 (skip-syntax-backward "w_") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
859 (and (or (looking-at "\\_<function\\_>") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
860 (js--re-search-backward "\\_<function\\_>" nil t)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
861 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
862 (save-match-data (goto-char (match-beginning 0)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
863 (js--forward-function-decl)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
864 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
865 (<= pos (point)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
866 (or prologue-begin (match-beginning 0)))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
867 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
868 (defun js--beginning-of-defun-raw () |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
869 "Helper function for `js-beginning-of-defun'. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
870 Go to previous defun-beginning and return the parse state for it, |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
871 or nil if we went all the way back to bob and don't find |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
872 anything." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
873 (js--ensure-cache) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
874 (let (pstate) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
875 (while (and (setq pstate (js--backward-pstate)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
876 (not (eq 'function (js--pitem-type (car pstate)))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
877 (and (not (bobp)) pstate))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
878 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
879 (defun js--pstate-is-toplevel-defun (pstate) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
880 "Helper function for `js--beginning-of-defun-nested'. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
881 If PSTATE represents a non-empty top-level defun, return the |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
882 top-most pitem. Otherwise, return nil." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
883 (loop for pitem in pstate |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
884 with func-depth = 0 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
885 with func-pitem |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
886 if (eq 'function (js--pitem-type pitem)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
887 do (incf func-depth) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
888 and do (setq func-pitem pitem) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
889 finally return (if (eq func-depth 1) func-pitem))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
890 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
891 (defun js--beginning-of-defun-nested () |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
892 "Helper function for `js--beginning-of-defun'. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
893 Return the pitem of the function we went to the beginning of." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
894 (or |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
895 ;; Look for the smallest function that encloses point... |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
896 (loop for pitem in (js--parse-state-at-point) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
897 if (and (eq 'function (js--pitem-type pitem)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
898 (js--inside-pitem-p pitem)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
899 do (goto-char (js--pitem-h-begin pitem)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
900 and return pitem) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
901 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
902 ;; ...and if that isn't found, look for the previous top-level |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
903 ;; defun |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
904 (loop for pstate = (js--backward-pstate) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
905 while pstate |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
906 if (js--pstate-is-toplevel-defun pstate) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
907 do (goto-char (js--pitem-h-begin it)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
908 and return it))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
909 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
910 (defun js--beginning-of-defun-flat () |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
911 "Helper function for `js-beginning-of-defun'." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
912 (let ((pstate (js--beginning-of-defun-raw))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
913 (when pstate |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
914 (goto-char (js--pitem-h-begin (car pstate)))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
915 |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
916 (defun js-beginning-of-defun (&optional arg) |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
917 "Value of `beginning-of-defun-function' for `js-mode'." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
918 (setq arg (or arg 1)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
919 (while (and (not (eobp)) (< arg 0)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
920 (incf arg) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
921 (when (and (not js-flat-functions) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
922 (or (eq (js-syntactic-context) 'function) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
923 (js--function-prologue-beginning))) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
924 (js-end-of-defun)) |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
925 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
926 (if (js--re-search-forward |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
927 "\\_<function\\_>" nil t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
928 (goto-char (js--function-prologue-beginning)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
929 (goto-char (point-max)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
930 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
931 (while (> arg 0) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
932 (decf arg) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
933 ;; If we're just past the end of a function, the user probably wants |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
934 ;; to go to the beginning of *that* function |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
935 (when (eq (char-before) ?}) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
936 (backward-char)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
937 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
938 (let ((prologue-begin (js--function-prologue-beginning))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
939 (cond ((and prologue-begin (< prologue-begin (point))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
940 (goto-char prologue-begin)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
941 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
942 (js-flat-functions |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
943 (js--beginning-of-defun-flat)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
944 (t |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
945 (js--beginning-of-defun-nested)))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
946 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
947 (defun js--flush-caches (&optional beg ignored) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
948 "Flush the `js-mode' syntax cache after position BEG. |
104683
2b8eeeaa8c1d
* international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents:
104391
diff
changeset
|
949 BEG defaults to `point-min', meaning to flush the entire cache." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
950 (interactive) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
951 (setq beg (or beg (save-restriction (widen) (point-min)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
952 (setq js--cache-end (min js--cache-end beg))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
953 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
954 (defmacro js--debug (&rest arguments) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
955 ;; `(message ,@arguments) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
956 ) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
957 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
958 (defun js--ensure-cache--pop-if-ended (open-items paren-depth) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
959 (let ((top-item (car open-items))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
960 (when (<= paren-depth (js--pitem-paren-depth top-item)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
961 (assert (not (get-text-property (1- (point)) 'js-pend))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
962 (put-text-property (1- (point)) (point) 'js--pend top-item) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
963 (setf (js--pitem-b-end top-item) (point)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
964 (setq open-items |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
965 ;; open-items must contain at least two items for this to |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
966 ;; work, but because we push a dummy item to start with, |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
967 ;; that assumption holds. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
968 (cons (js--pitem-add-child (second open-items) top-item) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
969 (cddr open-items))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
970 open-items) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
971 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
972 (defmacro js--ensure-cache--update-parse () |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
973 "Helper function for `js--ensure-cache'. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
974 Update parsing information up to point, referring to parse, |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
975 prev-parse-point, goal-point, and open-items bound lexically in |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
976 the body of `js--ensure-cache'." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
977 `(progn |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
978 (setq goal-point (point)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
979 (goto-char prev-parse-point) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
980 (while (progn |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
981 (setq open-items (js--ensure-cache--pop-if-ended |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
982 open-items (car parse))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
983 ;; Make sure parse-partial-sexp doesn't stop because we *entered* |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
984 ;; the given depth -- i.e., make sure we're deeper than the target |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
985 ;; depth. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
986 (assert (> (nth 0 parse) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
987 (js--pitem-paren-depth (car open-items)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
988 (setq parse (parse-partial-sexp |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
989 prev-parse-point goal-point |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
990 (js--pitem-paren-depth (car open-items)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
991 nil parse)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
992 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
993 ;; (let ((overlay (make-overlay prev-parse-point (point)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
994 ;; (overlay-put overlay 'face '(:background "red")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
995 ;; (unwind-protect |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
996 ;; (progn |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
997 ;; (js--debug "parsed: %S" parse) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
998 ;; (sit-for 1)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
999 ;; (delete-overlay overlay))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1000 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1001 (setq prev-parse-point (point)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1002 (< (point) goal-point))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1003 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1004 (setq open-items (js--ensure-cache--pop-if-ended |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1005 open-items (car parse))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1006 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1007 (defun js--show-cache-at-point () |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1008 (interactive) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1009 (require 'pp) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1010 (let ((prop (get-text-property (point) 'js--pstate))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1011 (with-output-to-temp-buffer "*Help*" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1012 (pp prop)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1013 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1014 (defun js--split-name (string) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1015 "Split a JavaScript name into its dot-separated parts. |
104683
2b8eeeaa8c1d
* international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents:
104391
diff
changeset
|
1016 This also removes any prototype parts from the split name |
2b8eeeaa8c1d
* international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents:
104391
diff
changeset
|
1017 \(unless the name is just \"prototype\" to start with)." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1018 (let ((name (save-match-data |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1019 (split-string string "\\." t)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1020 (unless (and (= (length name) 1) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1021 (equal (car name) "prototype")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1022 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1023 (setq name (remove "prototype" name))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1024 |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1025 (defvar js--guess-function-name-start nil) |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1026 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1027 (defun js--guess-function-name (position) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1028 "Guess the name of the JavaScript function at POSITION. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1029 POSITION should be just after the end of the word \"function\". |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1030 Return the name of the function, or nil if the name could not be |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1031 guessed. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1032 |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1033 This function clobbers match data. If we find the preamble |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1034 begins earlier than expected while guessing the function name, |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1035 set `js--guess-function-name-start' to that position; otherwise, |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1036 set that variable to nil." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1037 (setq js--guess-function-name-start nil) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1038 (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1039 (goto-char position) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1040 (forward-line 0) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1041 (cond |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1042 ((looking-at js--function-heading-3-re) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1043 (and (eq (match-end 0) position) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1044 (setq js--guess-function-name-start (match-beginning 1)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1045 (match-string-no-properties 1))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1046 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1047 ((looking-at js--function-heading-2-re) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1048 (and (eq (match-end 0) position) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1049 (setq js--guess-function-name-start (match-beginning 1)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1050 (match-string-no-properties 1)))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1051 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1052 (defun js--clear-stale-cache () |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1053 ;; Clear any endings that occur after point |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1054 (let (end-prop) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1055 (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1056 (while (setq end-prop (js--forward-text-property |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1057 'js--pend)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1058 (setf (js--pitem-b-end end-prop) nil)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1059 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1060 ;; Remove any cache properties after this point |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1061 (remove-text-properties (point) (point-max) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1062 '(js--pstate t js--pend t))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1063 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1064 (defun js--ensure-cache (&optional limit) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1065 "Ensures brace cache is valid up to the character before LIMIT. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1066 LIMIT defaults to point." |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1067 (setq limit (or limit (point))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1068 (when (< js--cache-end limit) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1069 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1070 (c-save-buffer-state |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1071 (open-items |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1072 orig-match-start |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1073 orig-match-end |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1074 orig-depth |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1075 parse |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1076 prev-parse-point |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1077 name |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1078 case-fold-search |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1079 filtered-class-styles |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1080 new-item |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1081 goal-point |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1082 end-prop) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1083 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1084 ;; Figure out which class styles we need to look for |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1085 (setq filtered-class-styles |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1086 (loop for style in js--class-styles |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1087 if (memq (plist-get style :framework) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1088 js-enabled-frameworks) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1089 collect style)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1090 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1091 (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1092 (save-restriction |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1093 (widen) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1094 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1095 ;; Find last known good position |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1096 (goto-char js--cache-end) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1097 (unless (bobp) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1098 (setq open-items (get-text-property |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1099 (1- (point)) 'js--pstate)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1100 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1101 (unless open-items |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1102 (goto-char (previous-single-property-change |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1103 (point) 'js--pstate nil (point-min))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1104 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1105 (unless (bobp) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1106 (setq open-items (get-text-property (1- (point)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1107 'js--pstate)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1108 (assert open-items)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1109 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1110 (unless open-items |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1111 ;; Make a placeholder for the top-level definition |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1112 (setq open-items (list js--initial-pitem))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1113 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1114 (setq parse (syntax-ppss)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1115 (setq prev-parse-point (point)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1116 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1117 (js--clear-stale-cache) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1118 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1119 (narrow-to-region (point-min) limit) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1120 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1121 (loop while (re-search-forward js--quick-match-re-func nil t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1122 for orig-match-start = (goto-char (match-beginning 0)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1123 for orig-match-end = (match-end 0) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1124 do (js--ensure-cache--update-parse) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1125 for orig-depth = (nth 0 parse) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1126 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1127 ;; Each of these conditions should return non-nil if |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1128 ;; we should add a new item and leave point at the end |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1129 ;; of the new item's header (h-end in the |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1130 ;; js--pitem diagram). This point is the one |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1131 ;; after the last character we need to unambiguously |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1132 ;; detect this construct. If one of these evaluates to |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1133 ;; nil, the location of the point is ignored. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1134 if (cond |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1135 ;; In comment or string |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1136 ((nth 8 parse) nil) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1137 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1138 ;; Regular function declaration |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1139 ((and (looking-at "\\_<function\\_>") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1140 (setq name (js--forward-function-decl))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1141 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1142 (when (eq name t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1143 (setq name (js--guess-function-name orig-match-end)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1144 (if name |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1145 (when js--guess-function-name-start |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1146 (setq orig-match-start |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1147 js--guess-function-name-start)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1148 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1149 (setq name t))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1150 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1151 (assert (eq (char-after) ?{)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1152 (forward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1153 (make-js--pitem |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1154 :paren-depth orig-depth |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1155 :h-begin orig-match-start |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1156 :type 'function |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1157 :name (if (eq name t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1158 name |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1159 (js--split-name name)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1160 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1161 ;; Macro |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1162 ((looking-at js--macro-decl-re) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1163 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1164 ;; Macros often contain unbalanced parentheses. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1165 ;; Make sure that h-end is at the textual end of |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1166 ;; the macro no matter what the parenthesis say. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1167 (c-end-of-macro) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1168 (js--ensure-cache--update-parse) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1169 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1170 (make-js--pitem |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1171 :paren-depth (nth 0 parse) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1172 :h-begin orig-match-start |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1173 :type 'macro |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1174 :name (list (match-string-no-properties 1)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1175 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1176 ;; "Prototype function" declaration |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1177 ((looking-at js--plain-method-re) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1178 (goto-char (match-beginning 3)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1179 (when (save-match-data |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1180 (js--forward-function-decl)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1181 (forward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1182 (make-js--pitem |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1183 :paren-depth orig-depth |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1184 :h-begin orig-match-start |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1185 :type 'function |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1186 :name (nconc (js--split-name |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1187 (match-string-no-properties 1)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1188 (list (match-string-no-properties 2)))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1189 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1190 ;; Class definition |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1191 ((loop with syntactic-context = |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1192 (js--syntactic-context-from-pstate open-items) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1193 for class-style in filtered-class-styles |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1194 if (and (memq syntactic-context |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1195 (plist-get class-style :contexts)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1196 (looking-at (plist-get class-style |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1197 :class-decl))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1198 do (goto-char (match-end 0)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1199 and return |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1200 (make-js--pitem |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1201 :paren-depth orig-depth |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1202 :h-begin orig-match-start |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1203 :type class-style |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1204 :name (js--split-name |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1205 (match-string-no-properties 1)))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1206 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1207 do (js--ensure-cache--update-parse) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1208 and do (push it open-items) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1209 and do (put-text-property |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1210 (1- (point)) (point) 'js--pstate open-items) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1211 else do (goto-char orig-match-end)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1212 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1213 (goto-char limit) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1214 (js--ensure-cache--update-parse) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1215 (setq js--cache-end limit) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1216 (setq js--last-parse-pos limit) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1217 (setq js--state-at-last-parse-pos open-items) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1218 ))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1219 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1220 (defun js--end-of-defun-flat () |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1221 "Helper function for `js-end-of-defun'." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1222 (loop while (js--re-search-forward "}" nil t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1223 do (js--ensure-cache) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1224 if (get-text-property (1- (point)) 'js--pend) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1225 if (eq 'function (js--pitem-type it)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1226 return t |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1227 finally do (goto-char (point-max)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1228 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1229 (defun js--end-of-defun-nested () |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1230 "Helper function for `js-end-of-defun'." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1231 (message "test") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1232 (let* (pitem |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1233 (this-end (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1234 (and (setq pitem (js--beginning-of-defun-nested)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1235 (js--pitem-goto-h-end pitem) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1236 (progn (backward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1237 (forward-list) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1238 (point))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1239 found) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1240 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1241 (if (and this-end (< (point) this-end)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1242 ;; We're already inside a function; just go to its end. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1243 (goto-char this-end) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1244 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1245 ;; Otherwise, go to the end of the next function... |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1246 (while (and (js--re-search-forward "\\_<function\\_>" nil t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1247 (not (setq found (progn |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1248 (goto-char (match-beginning 0)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1249 (js--forward-function-decl)))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1250 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1251 (if found (forward-list) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1252 ;; ... or eob. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1253 (goto-char (point-max)))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1254 |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1255 (defun js-end-of-defun (&optional arg) |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1256 "Value of `end-of-defun-function' for `js-mode'." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1257 (setq arg (or arg 1)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1258 (while (and (not (bobp)) (< arg 0)) |
105076
8a45209e673f
(js-end-of-defun): Remove malformed and unneeded let.
Glenn Morris <rgm@gnu.org>
parents:
104966
diff
changeset
|
1259 (incf arg) |
8a45209e673f
(js-end-of-defun): Remove malformed and unneeded let.
Glenn Morris <rgm@gnu.org>
parents:
104966
diff
changeset
|
1260 (js-beginning-of-defun) |
8a45209e673f
(js-end-of-defun): Remove malformed and unneeded let.
Glenn Morris <rgm@gnu.org>
parents:
104966
diff
changeset
|
1261 (js-beginning-of-defun) |
8a45209e673f
(js-end-of-defun): Remove malformed and unneeded let.
Glenn Morris <rgm@gnu.org>
parents:
104966
diff
changeset
|
1262 (unless (bobp) |
8a45209e673f
(js-end-of-defun): Remove malformed and unneeded let.
Glenn Morris <rgm@gnu.org>
parents:
104966
diff
changeset
|
1263 (js-end-of-defun))) |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1264 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1265 (while (> arg 0) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1266 (decf arg) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1267 ;; look for function backward. if we're inside it, go to that |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1268 ;; function's end. otherwise, search for the next function's end and |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1269 ;; go there |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1270 (if js-flat-functions |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1271 (js--end-of-defun-flat) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1272 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1273 ;; if we're doing nested functions, see whether we're in the |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1274 ;; prologue. If we are, go to the end of the function; otherwise, |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1275 ;; call js--end-of-defun-nested to do the real work |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1276 (let ((prologue-begin (js--function-prologue-beginning))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1277 (cond ((and prologue-begin (<= prologue-begin (point))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1278 (goto-char prologue-begin) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1279 (re-search-forward "\\_<function") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1280 (goto-char (match-beginning 0)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1281 (js--forward-function-decl) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1282 (forward-list)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1283 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1284 (t (js--end-of-defun-nested))))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1285 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1286 (defun js--beginning-of-macro (&optional lim) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1287 (let ((here (point))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1288 (save-restriction |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1289 (if lim (narrow-to-region lim (point-max))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1290 (beginning-of-line) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1291 (while (eq (char-before (1- (point))) ?\\) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1292 (forward-line -1)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1293 (back-to-indentation) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1294 (if (and (<= (point) here) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1295 (looking-at js--opt-cpp-start)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1296 t |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1297 (goto-char here) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1298 nil)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1299 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1300 (defun js--backward-syntactic-ws (&optional lim) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1301 "Simple implementation of `c-backward-syntactic-ws' for `js-mode'." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1302 (save-restriction |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1303 (when lim (narrow-to-region lim (point-max))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1304 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1305 (let ((in-macro (save-excursion (js--beginning-of-macro))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1306 (pos (point))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1307 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1308 (while (progn (unless in-macro (js--beginning-of-macro)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1309 (forward-comment most-negative-fixnum) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1310 (/= (point) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1311 (prog1 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1312 pos |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1313 (setq pos (point))))))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1314 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1315 (defun js--forward-syntactic-ws (&optional lim) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1316 "Simple implementation of `c-forward-syntactic-ws' for `js-mode'." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1317 (save-restriction |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1318 (when lim (narrow-to-region (point-min) lim)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1319 (let ((pos (point))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1320 (while (progn |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1321 (forward-comment most-positive-fixnum) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1322 (when (eq (char-after) ?#) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1323 (c-end-of-macro)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1324 (/= (point) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1325 (prog1 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1326 pos |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1327 (setq pos (point))))))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1328 |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1329 ;; Like (up-list -1), but only considers lists that end nearby" |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1330 (defun js--up-nearby-list () |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1331 (save-restriction |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1332 ;; Look at a very small region so our compuation time doesn't |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1333 ;; explode in pathological cases. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1334 (narrow-to-region (max (point-min) (- (point) 500)) (point)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1335 (up-list -1))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1336 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1337 (defun js--inside-param-list-p () |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1338 "Return non-nil iff point is in a function parameter list." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1339 (ignore-errors |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1340 (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1341 (js--up-nearby-list) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1342 (and (looking-at "(") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1343 (progn (forward-symbol -1) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1344 (or (looking-at "function") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1345 (progn (forward-symbol -1) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1346 (looking-at "function")))))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1347 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1348 (defun js--inside-dojo-class-list-p () |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1349 "Return non-nil iff point is in a Dojo multiple-inheritance class block." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1350 (ignore-errors |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1351 (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1352 (js--up-nearby-list) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1353 (let ((list-begin (point))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1354 (forward-line 0) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1355 (and (looking-at js--dojo-class-decl-re) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1356 (goto-char (match-end 0)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1357 (looking-at "\"\\s-*,\\s-*\\[") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1358 (eq (match-end 0) (1+ list-begin))))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1359 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1360 (defun js--syntax-begin-function () |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1361 (when (< js--cache-end (point)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1362 (goto-char (max (point-min) js--cache-end))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1363 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1364 (let ((pitem)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1365 (while (and (setq pitem (car (js--backward-pstate))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1366 (not (eq 0 (js--pitem-paren-depth pitem))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1367 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1368 (when pitem |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1369 (goto-char (js--pitem-h-begin pitem ))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1370 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1371 ;;; Font Lock |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1372 (defun js--make-framework-matcher (framework &rest regexps) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1373 "Helper function for building `js--font-lock-keywords'. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1374 Create a byte-compiled function for matching a concatenation of |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1375 REGEXPS, but only if FRAMEWORK is in `js-enabled-frameworks'." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1376 (setq regexps (apply #'concat regexps)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1377 (byte-compile |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1378 `(lambda (limit) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1379 (when (memq (quote ,framework) js-enabled-frameworks) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1380 (re-search-forward ,regexps limit t))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1381 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1382 (defvar js--tmp-location nil) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1383 (make-variable-buffer-local 'js--tmp-location) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1384 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1385 (defun js--forward-destructuring-spec (&optional func) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1386 "Move forward over a JavaScript destructuring spec. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1387 If FUNC is supplied, call it with no arguments before every |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1388 variable name in the spec. Return true iff this was actually a |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1389 spec. FUNC must preserve the match data." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1390 (case (char-after) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1391 (?\[ |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1392 (forward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1393 (while |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1394 (progn |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1395 (forward-comment most-positive-fixnum) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1396 (cond ((memq (char-after) '(?\[ ?\{)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1397 (js--forward-destructuring-spec func)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1398 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1399 ((eq (char-after) ?,) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1400 (forward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1401 t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1402 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1403 ((looking-at js--name-re) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1404 (and func (funcall func)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1405 (goto-char (match-end 0)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1406 t)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1407 (when (eq (char-after) ?\]) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1408 (forward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1409 t)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1410 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1411 (?\{ |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1412 (forward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1413 (forward-comment most-positive-fixnum) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1414 (while |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1415 (when (looking-at js--objfield-re) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1416 (goto-char (match-end 0)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1417 (forward-comment most-positive-fixnum) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1418 (and (cond ((memq (char-after) '(?\[ ?\{)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1419 (js--forward-destructuring-spec func)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1420 ((looking-at js--name-re) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1421 (and func (funcall func)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1422 (goto-char (match-end 0)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1423 t)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1424 (progn (forward-comment most-positive-fixnum) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1425 (when (eq (char-after) ?\,) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1426 (forward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1427 (forward-comment most-positive-fixnum) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1428 t))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1429 (when (eq (char-after) ?\}) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1430 (forward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1431 t)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1432 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1433 (defun js--variable-decl-matcher (limit) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1434 "Font-lock matcher for variable names in a variable declaration. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1435 This is a cc-mode-style matcher that *always* fails, from the |
104683
2b8eeeaa8c1d
* international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents:
104391
diff
changeset
|
1436 point of view of font-lock. It applies highlighting directly with |
2b8eeeaa8c1d
* international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents:
104391
diff
changeset
|
1437 `font-lock-apply-highlight'." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1438 (condition-case nil |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1439 (save-restriction |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1440 (narrow-to-region (point-min) limit) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1441 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1442 (let ((first t)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1443 (forward-comment most-positive-fixnum) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1444 (while |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1445 (and (or first |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1446 (when (eq (char-after) ?,) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1447 (forward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1448 (forward-comment most-positive-fixnum) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1449 t)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1450 (cond ((looking-at js--name-re) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1451 (font-lock-apply-highlight |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1452 '(0 font-lock-variable-name-face)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1453 (goto-char (match-end 0))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1454 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1455 ((save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1456 (js--forward-destructuring-spec)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1457 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1458 (js--forward-destructuring-spec |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1459 (lambda () |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1460 (font-lock-apply-highlight |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1461 '(0 font-lock-variable-name-face))))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1462 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1463 (forward-comment most-positive-fixnum) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1464 (when (eq (char-after) ?=) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1465 (forward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1466 (js--forward-expression) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1467 (forward-comment most-positive-fixnum)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1468 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1469 (setq first nil)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1470 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1471 ;; Conditions to handle |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1472 (scan-error nil) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1473 (end-of-buffer nil)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1474 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1475 ;; Matcher always "fails" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1476 nil) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1477 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1478 (defconst js--font-lock-keywords-3 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1479 `( |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1480 ;; This goes before keywords-2 so it gets used preferentially |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1481 ;; instead of the keywords in keywords-2. Don't use override |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1482 ;; because that will override syntactic fontification too, which |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1483 ;; will fontify commented-out directives as if they weren't |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1484 ;; commented out. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1485 ,@cpp-font-lock-keywords ; from font-lock.el |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1486 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1487 ,@js--font-lock-keywords-2 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1488 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1489 ("\\.\\(prototype\\)\\_>" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1490 (1 font-lock-constant-face)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1491 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1492 ;; Highlights class being declared, in parts |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1493 (js--class-decl-matcher |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1494 ,(concat "\\(" js--name-re "\\)\\(?:\\.\\|.*$\\)") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1495 (goto-char (match-beginning 1)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1496 nil |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1497 (1 font-lock-type-face)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1498 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1499 ;; Highlights parent class, in parts, if available |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1500 (js--class-decl-matcher |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1501 ,(concat "\\(" js--name-re "\\)\\(?:\\.\\|.*$\\)") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1502 (if (match-beginning 2) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1503 (progn |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1504 (setq js--tmp-location (match-end 2)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1505 (goto-char js--tmp-location) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1506 (insert "=") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1507 (goto-char (match-beginning 2))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1508 (setq js--tmp-location nil) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1509 (goto-char (point-at-eol))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1510 (when js--tmp-location |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1511 (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1512 (goto-char js--tmp-location) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1513 (delete-char 1))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1514 (1 font-lock-type-face)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1515 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1516 ;; Highlights parent class |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1517 (js--class-decl-matcher |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1518 (2 font-lock-type-face nil t)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1519 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1520 ;; Dojo needs its own matcher to override the string highlighting |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1521 (,(js--make-framework-matcher |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1522 'dojo |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1523 "^\\s-*dojo\\.declare\\s-*(\"" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1524 "\\(" js--dotted-name-re "\\)" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1525 "\\(?:\"\\s-*,\\s-*\\(" js--dotted-name-re "\\)\\)?") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1526 (1 font-lock-type-face t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1527 (2 font-lock-type-face nil t)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1528 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1529 ;; Match Dojo base classes. Of course Mojo has to be different |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1530 ;; from everything else under the sun... |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1531 (,(js--make-framework-matcher |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1532 'dojo |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1533 "^\\s-*dojo\\.declare\\s-*(\"" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1534 "\\(" js--dotted-name-re "\\)\"\\s-*,\\s-*\\[") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1535 ,(concat "[[,]\\s-*\\(" js--dotted-name-re "\\)\\s-*" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1536 "\\(?:\\].*$\\)?") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1537 (backward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1538 (end-of-line) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1539 (1 font-lock-type-face)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1540 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1541 ;; continued Dojo base-class list |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1542 (,(js--make-framework-matcher |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1543 'dojo |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1544 "^\\s-*" js--dotted-name-re "\\s-*[],]") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1545 ,(concat "\\(" js--dotted-name-re "\\)" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1546 "\\s-*\\(?:\\].*$\\)?") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1547 (if (save-excursion (backward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1548 (js--inside-dojo-class-list-p)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1549 (forward-symbol -1) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1550 (end-of-line)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1551 (end-of-line) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1552 (1 font-lock-type-face)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1553 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1554 ;; variable declarations |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1555 ,(list |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1556 (concat "\\_<\\(const\\|var\\|let\\)\\_>\\|" js--basic-type-re) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1557 (list #'js--variable-decl-matcher nil nil nil)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1558 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1559 ;; class instantiation |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1560 ,(list |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1561 (concat "\\_<new\\_>\\s-+\\(" js--dotted-name-re "\\)") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1562 (list 1 'font-lock-type-face)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1563 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1564 ;; instanceof |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1565 ,(list |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1566 (concat "\\_<instanceof\\_>\\s-+\\(" js--dotted-name-re "\\)") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1567 (list 1 'font-lock-type-face)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1568 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1569 ;; formal parameters |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1570 ,(list |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1571 (concat |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1572 "\\_<function\\_>\\(\\s-+" js--name-re "\\)?\\s-*(\\s-*" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1573 js--name-start-re) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1574 (list (concat "\\(" js--name-re "\\)\\(\\s-*).*\\)?") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1575 '(backward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1576 '(end-of-line) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1577 '(1 font-lock-variable-name-face))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1578 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1579 ;; continued formal parameter list |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1580 ,(list |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1581 (concat |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1582 "^\\s-*" js--name-re "\\s-*[,)]") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1583 (list js--name-re |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1584 '(if (save-excursion (backward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1585 (js--inside-param-list-p)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1586 (forward-symbol -1) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1587 (end-of-line)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1588 '(end-of-line) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1589 '(0 font-lock-variable-name-face)))) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1590 "Level three font lock for `js-mode'.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1591 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1592 (defun js--inside-pitem-p (pitem) |
104683
2b8eeeaa8c1d
* international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents:
104391
diff
changeset
|
1593 "Return whether point is inside the given pitem's header or body." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1594 (js--ensure-cache) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1595 (assert (js--pitem-h-begin pitem)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1596 (assert (js--pitem-paren-depth pitem)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1597 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1598 (and (> (point) (js--pitem-h-begin pitem)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1599 (or (null (js--pitem-b-end pitem)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1600 (> (js--pitem-b-end pitem) (point))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1601 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1602 (defun js--parse-state-at-point () |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1603 "Parse the JavaScript program state at point. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1604 Return a list of `js--pitem' instances that apply to point, most |
104683
2b8eeeaa8c1d
* international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents:
104391
diff
changeset
|
1605 specific first. In the worst case, the current toplevel instance |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1606 will be returned." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1607 (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1608 (save-restriction |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1609 (widen) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1610 (js--ensure-cache) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1611 (let* ((bound (if (eobp) (point) (1+ (point)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1612 (pstate (or (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1613 (js--backward-pstate)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1614 (list js--initial-pitem)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1615 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1616 ;; Loop until we either hit a pitem at BOB or pitem ends after |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1617 ;; point (or at point if we're at eob) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1618 (loop for pitem = (car pstate) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1619 until (or (eq (js--pitem-type pitem) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1620 'toplevel) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1621 (js--inside-pitem-p pitem)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1622 do (pop pstate)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1623 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1624 pstate)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1625 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1626 (defun js--syntactic-context-from-pstate (pstate) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1627 "Return the JavaScript syntactic context corresponding to PSTATE." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1628 (let ((type (js--pitem-type (car pstate)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1629 (cond ((memq type '(function macro)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1630 type) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1631 ((consp type) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1632 'class) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1633 (t 'toplevel)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1634 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1635 (defun js-syntactic-context () |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1636 "Return the JavaScript syntactic context at point. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1637 When called interatively, also display a message with that |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1638 context." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1639 (interactive) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1640 (let* ((syntactic-context (js--syntactic-context-from-pstate |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1641 (js--parse-state-at-point)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1642 |
105372
bd2966850aac
Use `called-interactively-p' instead of `interactive-p'.
Juanma Barranquero <lekktu@gmail.com>
parents:
105076
diff
changeset
|
1643 (when (called-interactively-p 'interactive) |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1644 (message "Syntactic context: %s" syntactic-context)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1645 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1646 syntactic-context)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1647 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1648 (defun js--class-decl-matcher (limit) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1649 "Font lock function used by `js-mode'. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1650 This performs fontification according to `js--class-styles'." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1651 (loop initially (js--ensure-cache limit) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1652 while (re-search-forward js--quick-match-re limit t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1653 for orig-end = (match-end 0) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1654 do (goto-char (match-beginning 0)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1655 if (loop for style in js--class-styles |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1656 for decl-re = (plist-get style :class-decl) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1657 if (and (memq (plist-get style :framework) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1658 js-enabled-frameworks) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1659 (memq (js-syntactic-context) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1660 (plist-get style :contexts)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1661 decl-re |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1662 (looking-at decl-re)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1663 do (goto-char (match-end 0)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1664 and return t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1665 return t |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1666 else do (goto-char orig-end))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1667 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1668 (defconst js--font-lock-keywords |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1669 '(js--font-lock-keywords-3 js--font-lock-keywords-1 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1670 js--font-lock-keywords-2 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1671 js--font-lock-keywords-3) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1672 "Font lock keywords for `js-mode'. See `font-lock-keywords'.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1673 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1674 ;; XXX: Javascript can continue a regexp literal across lines so long |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1675 ;; as the newline is escaped with \. Account for that in the regexp |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1676 ;; below. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1677 (defconst js--regexp-literal |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1678 "[=(,:]\\(?:\\s-\\|\n\\)*\\(/\\)\\(?:\\\\/\\|[^/*]\\)\\(?:\\\\/\\|[^/]\\)*\\(/\\)" |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1679 "Regexp matching a JavaScript regular expression literal. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1680 Match groups 1 and 2 are the characters forming the beginning and |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1681 end of the literal.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1682 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1683 ;; we want to match regular expressions only at the beginning of |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1684 ;; expressions |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1685 (defconst js-font-lock-syntactic-keywords |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1686 `((,js--regexp-literal (1 "|") (2 "|"))) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1687 "Syntactic font lock keywords matching regexps in JavaScript. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1688 See `font-lock-keywords'.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1689 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1690 ;;; Indentation |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1691 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1692 (defconst js--possibly-braceless-keyword-re |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1693 (js--regexp-opt-symbol |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1694 '("catch" "do" "else" "finally" "for" "if" "try" "while" "with" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1695 "each")) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1696 "Regexp matching keywords optionally followed by an opening brace.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1697 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1698 (defconst js--indent-operator-re |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1699 (concat "[-+*/%<>=&^|?:.]\\([^-+*/]\\|$\\)\\|" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1700 (js--regexp-opt-symbol '("in" "instanceof"))) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1701 "Regexp matching operators that affect indentation of continued expressions.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1702 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1703 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1704 (defun js--looking-at-operator-p () |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1705 "Return non-nil if point is on a JavaScript operator, other than a comma." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1706 (save-match-data |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1707 (and (looking-at js--indent-operator-re) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1708 (or (not (looking-at ":")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1709 (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1710 (and (js--re-search-backward "[?:{]\\|\\_<case\\_>" nil t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1711 (looking-at "?"))))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1712 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1713 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1714 (defun js--continued-expression-p () |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1715 "Return non-nil if the current line continues an expression." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1716 (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1717 (back-to-indentation) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1718 (or (js--looking-at-operator-p) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1719 (and (js--re-search-backward "\n" nil t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1720 (progn |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1721 (skip-chars-backward " \t") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1722 (or (bobp) (backward-char)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1723 (and (> (point) (point-min)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1724 (save-excursion (backward-char) (not (looking-at "[/*]/"))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1725 (js--looking-at-operator-p) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1726 (and (progn (backward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1727 (not (looking-at "++\\|--\\|/[/*]")))))))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1728 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1729 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1730 (defun js--end-of-do-while-loop-p () |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1731 "Return non-nil if point is on the \"while\" of a do-while statement. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1732 Otherwise, return nil. A braceless do-while statement spanning |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1733 several lines requires that the start of the loop is indented to |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1734 the same column as the current line." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1735 (interactive) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1736 (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1737 (save-match-data |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1738 (when (looking-at "\\s-*\\_<while\\_>") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1739 (if (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1740 (skip-chars-backward "[ \t\n]*}") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1741 (looking-at "[ \t\n]*}")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1742 (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1743 (backward-list) (forward-symbol -1) (looking-at "\\_<do\\_>")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1744 (js--re-search-backward "\\_<do\\_>" (point-at-bol) t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1745 (or (looking-at "\\_<do\\_>") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1746 (let ((saved-indent (current-indentation))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1747 (while (and (js--re-search-backward "^\\s-*\\_<" nil t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1748 (/= (current-indentation) saved-indent))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1749 (and (looking-at "\\s-*\\_<do\\_>") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1750 (not (js--re-search-forward |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1751 "\\_<while\\_>" (point-at-eol) t)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1752 (= (current-indentation) saved-indent))))))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1753 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1754 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1755 (defun js--ctrl-statement-indentation () |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1756 "Helper function for `js--proper-indentation'. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1757 Return the proper indentation of the current line if it starts |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1758 the body of a control statement without braces; otherwise, return |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1759 nil." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1760 (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1761 (back-to-indentation) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1762 (when (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1763 (and (not (eq (point-at-bol) (point-min))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1764 (not (looking-at "[{]")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1765 (progn |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1766 (js--re-search-backward "[[:graph:]]" nil t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1767 (or (eobp) (forward-char)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1768 (when (= (char-before) ?\)) (backward-list)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1769 (skip-syntax-backward " ") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1770 (skip-syntax-backward "w_") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1771 (looking-at js--possibly-braceless-keyword-re)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1772 (not (js--end-of-do-while-loop-p)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1773 (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1774 (goto-char (match-beginning 0)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1775 (+ (current-indentation) js-indent-level))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1776 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1777 (defun js--get-c-offset (symbol anchor) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1778 (let ((c-offsets-alist |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1779 (list (cons 'c js-comment-lineup-func)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1780 (c-get-syntactic-indentation (list (cons symbol anchor))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1781 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1782 (defun js--proper-indentation (parse-status) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1783 "Return the proper indentation for the current line." |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1784 (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1785 (back-to-indentation) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1786 (cond ((nth 4 parse-status) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1787 (js--get-c-offset 'c (nth 8 parse-status))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1788 ((nth 8 parse-status) 0) ; inside string |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1789 ((js--ctrl-statement-indentation)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1790 ((eq (char-after) ?#) 0) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1791 ((save-excursion (js--beginning-of-macro)) 4) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1792 ((nth 1 parse-status) |
109997
f583ffa8d0d6
* progmodes/js.el: Make indentation more customizable (Bug#6914).
Chong Yidong <cyd@stupidchicken.com>
parents:
109561
diff
changeset
|
1793 ;; A single closing paren/bracket should be indented at the |
f583ffa8d0d6
* progmodes/js.el: Make indentation more customizable (Bug#6914).
Chong Yidong <cyd@stupidchicken.com>
parents:
109561
diff
changeset
|
1794 ;; same level as the opening statement. Same goes for |
f583ffa8d0d6
* progmodes/js.el: Make indentation more customizable (Bug#6914).
Chong Yidong <cyd@stupidchicken.com>
parents:
109561
diff
changeset
|
1795 ;; "case" and "default". |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1796 (let ((same-indent-p (looking-at |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1797 "[]})]\\|\\_<case\\_>\\|\\_<default\\_>")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1798 (continued-expr-p (js--continued-expression-p))) |
109997
f583ffa8d0d6
* progmodes/js.el: Make indentation more customizable (Bug#6914).
Chong Yidong <cyd@stupidchicken.com>
parents:
109561
diff
changeset
|
1799 (goto-char (nth 1 parse-status)) ; go to the opening char |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1800 (if (looking-at "[({[]\\s-*\\(/[/*]\\|$\\)") |
109997
f583ffa8d0d6
* progmodes/js.el: Make indentation more customizable (Bug#6914).
Chong Yidong <cyd@stupidchicken.com>
parents:
109561
diff
changeset
|
1801 (progn ; nothing following the opening paren/bracket |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1802 (skip-syntax-backward " ") |
109997
f583ffa8d0d6
* progmodes/js.el: Make indentation more customizable (Bug#6914).
Chong Yidong <cyd@stupidchicken.com>
parents:
109561
diff
changeset
|
1803 (when (eq (char-before) ?\)) (backward-list)) |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1804 (back-to-indentation) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1805 (cond (same-indent-p |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1806 (current-column)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1807 (continued-expr-p |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1808 (+ (current-column) (* 2 js-indent-level) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1809 js-expr-indent-offset)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1810 (t |
109997
f583ffa8d0d6
* progmodes/js.el: Make indentation more customizable (Bug#6914).
Chong Yidong <cyd@stupidchicken.com>
parents:
109561
diff
changeset
|
1811 (+ (current-column) js-indent-level |
f583ffa8d0d6
* progmodes/js.el: Make indentation more customizable (Bug#6914).
Chong Yidong <cyd@stupidchicken.com>
parents:
109561
diff
changeset
|
1812 (case (char-after (nth 1 parse-status)) |
f583ffa8d0d6
* progmodes/js.el: Make indentation more customizable (Bug#6914).
Chong Yidong <cyd@stupidchicken.com>
parents:
109561
diff
changeset
|
1813 (?\( js-paren-indent-offset) |
f583ffa8d0d6
* progmodes/js.el: Make indentation more customizable (Bug#6914).
Chong Yidong <cyd@stupidchicken.com>
parents:
109561
diff
changeset
|
1814 (?\[ js-square-indent-offset) |
f583ffa8d0d6
* progmodes/js.el: Make indentation more customizable (Bug#6914).
Chong Yidong <cyd@stupidchicken.com>
parents:
109561
diff
changeset
|
1815 (?\{ js-curly-indent-offset)))))) |
f583ffa8d0d6
* progmodes/js.el: Make indentation more customizable (Bug#6914).
Chong Yidong <cyd@stupidchicken.com>
parents:
109561
diff
changeset
|
1816 ;; If there is something following the opening |
f583ffa8d0d6
* progmodes/js.el: Make indentation more customizable (Bug#6914).
Chong Yidong <cyd@stupidchicken.com>
parents:
109561
diff
changeset
|
1817 ;; paren/bracket, everything else should be indented at |
f583ffa8d0d6
* progmodes/js.el: Make indentation more customizable (Bug#6914).
Chong Yidong <cyd@stupidchicken.com>
parents:
109561
diff
changeset
|
1818 ;; the same level. |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1819 (unless same-indent-p |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1820 (forward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1821 (skip-chars-forward " \t")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1822 (current-column)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1823 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1824 ((js--continued-expression-p) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1825 (+ js-indent-level js-expr-indent-offset)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1826 (t 0)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1827 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1828 (defun js-indent-line () |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1829 "Indent the current line as JavaScript." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1830 (interactive) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1831 (save-restriction |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1832 (widen) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1833 (let* ((parse-status |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1834 (save-excursion (syntax-ppss (point-at-bol)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1835 (offset (- (current-column) (current-indentation)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1836 (indent-line-to (js--proper-indentation parse-status)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1837 (when (> offset 0) (forward-char offset))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1838 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1839 ;;; Filling |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1840 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1841 (defun js-c-fill-paragraph (&optional justify) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1842 "Fill the paragraph with `c-fill-paragraph'." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1843 (interactive "*P") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1844 (flet ((c-forward-sws |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1845 (&optional limit) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1846 (js--forward-syntactic-ws limit)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1847 (c-backward-sws |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1848 (&optional limit) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1849 (js--backward-syntactic-ws limit)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1850 (c-beginning-of-macro |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1851 (&optional limit) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1852 (js--beginning-of-macro limit))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1853 (let ((fill-paragraph-function 'c-fill-paragraph)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1854 (c-fill-paragraph justify)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1855 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1856 ;;; Type database and Imenu |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1857 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1858 ;; We maintain a cache of semantic information, i.e., the classes and |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1859 ;; functions we've encountered so far. In order to avoid having to |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1860 ;; re-parse the buffer on every change, we cache the parse state at |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1861 ;; each interesting point in the buffer. Each parse state is a |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1862 ;; modified copy of the previous one, or in the case of the first |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1863 ;; parse state, the empty state. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1864 ;; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1865 ;; The parse state itself is just a stack of js--pitem |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1866 ;; instances. It starts off containing one element that is never |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1867 ;; closed, that is initially js--initial-pitem. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1868 ;; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1869 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1870 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1871 (defun js--pitem-format (pitem) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1872 (let ((name (js--pitem-name pitem)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1873 (type (js--pitem-type pitem))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1874 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1875 (format "name:%S type:%S" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1876 name |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1877 (if (atom type) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1878 type |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1879 (plist-get type :name))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1880 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1881 (defun js--make-merged-item (item child name-parts) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1882 "Helper function for `js--splice-into-items'. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1883 Return a new item that is the result of merging CHILD into |
104683
2b8eeeaa8c1d
* international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents:
104391
diff
changeset
|
1884 ITEM. NAME-PARTS is a list of parts of the name of CHILD |
2b8eeeaa8c1d
* international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents:
104391
diff
changeset
|
1885 that we haven't consumed yet." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1886 (js--debug "js--make-merged-item: {%s} into {%s}" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1887 (js--pitem-format child) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1888 (js--pitem-format item)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1889 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1890 ;; If the item we're merging into isn't a class, make it into one |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1891 (unless (consp (js--pitem-type item)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1892 (js--debug "js--make-merged-item: changing dest into class") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1893 (setq item (make-js--pitem |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1894 :children (list item) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1895 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1896 ;; Use the child's class-style if it's available |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1897 :type (if (atom (js--pitem-type child)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1898 js--dummy-class-style |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1899 (js--pitem-type child)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1900 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1901 :name (js--pitem-strname item)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1902 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1903 ;; Now we can merge either a function or a class into a class |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1904 (cons (cond |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1905 ((cdr name-parts) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1906 (js--debug "js--make-merged-item: recursing") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1907 ;; if we have more name-parts to go before we get to the |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1908 ;; bottom of the class hierarchy, call the merger |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1909 ;; recursively |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1910 (js--splice-into-items (car item) child |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1911 (cdr name-parts))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1912 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1913 ((atom (js--pitem-type child)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1914 (js--debug "js--make-merged-item: straight merge") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1915 ;; Not merging a class, but something else, so just prepend |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1916 ;; it |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1917 (cons child (car item))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1918 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1919 (t |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1920 ;; Otherwise, merge the new child's items into those |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1921 ;; of the new class |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1922 (js--debug "js--make-merged-item: merging class contents") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1923 (append (car child) (car item)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1924 (cdr item))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1925 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1926 (defun js--pitem-strname (pitem) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1927 "Last part of the name of PITEM, as a string or symbol." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1928 (let ((name (js--pitem-name pitem))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1929 (if (consp name) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1930 (car (last name)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1931 name))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1932 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1933 (defun js--splice-into-items (items child name-parts) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1934 "Splice CHILD into the `js--pitem' ITEMS at NAME-PARTS. |
104683
2b8eeeaa8c1d
* international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents:
104391
diff
changeset
|
1935 If a class doesn't exist in the tree, create it. Return |
2b8eeeaa8c1d
* international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents:
104391
diff
changeset
|
1936 the new items list. NAME-PARTS is a list of strings given |
2b8eeeaa8c1d
* international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents:
104391
diff
changeset
|
1937 the broken-down class name of the item to insert." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1938 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1939 (let ((top-name (car name-parts)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1940 (item-ptr items) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1941 new-items last-new-item new-cons item) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1942 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1943 (js--debug "js--splice-into-items: name-parts: %S items:%S" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1944 name-parts |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1945 (mapcar #'js--pitem-name items)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1946 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1947 (assert (stringp top-name)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1948 (assert (> (length top-name) 0)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1949 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1950 ;; If top-name isn't found in items, then we build a copy of items |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1951 ;; and throw it away. But that's okay, since most of the time, we |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1952 ;; *will* find an instance. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1953 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1954 (while (and item-ptr |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1955 (cond ((equal (js--pitem-strname (car item-ptr)) top-name) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1956 ;; Okay, we found an entry with the right name. Splice |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1957 ;; the merged item into the list... |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1958 (setq new-cons (cons (js--make-merged-item |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1959 (car item-ptr) child |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1960 name-parts) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1961 (cdr item-ptr))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1962 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1963 (if last-new-item |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1964 (setcdr last-new-item new-cons) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1965 (setq new-items new-cons)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1966 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1967 ;; ...and terminate the loop |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1968 nil) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1969 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1970 (t |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1971 ;; Otherwise, copy the current cons and move onto the |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1972 ;; text. This is tricky; we keep track of the tail of |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1973 ;; the list that begins with new-items in |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1974 ;; last-new-item. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1975 (setq new-cons (cons (car item-ptr) nil)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1976 (if last-new-item |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1977 (setcdr last-new-item new-cons) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1978 (setq new-items new-cons)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1979 (setq last-new-item new-cons) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1980 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1981 ;; Go to the next cell in items |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1982 (setq item-ptr (cdr item-ptr)))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1983 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1984 (if item-ptr |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1985 ;; Yay! We stopped because we found something, not because |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1986 ;; we ran out of items to search. Just return the new |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1987 ;; list. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1988 (progn |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1989 (js--debug "search succeeded: %S" name-parts) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1990 new-items) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1991 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1992 ;; We didn't find anything. If the child is a class and we don't |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1993 ;; have any classes to drill down into, just push that class; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1994 ;; otherwise, make a fake class and carry on. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1995 (js--debug "search failed: %S" name-parts) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1996 (cons (if (cdr name-parts) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1997 ;; We have name-parts left to process. Make a fake |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1998 ;; class for this particular part... |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1999 (make-js--pitem |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2000 ;; ...and recursively digest the rest of the name |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2001 :children (js--splice-into-items |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2002 nil child (cdr name-parts)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2003 :type js--dummy-class-style |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2004 :name top-name) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2005 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2006 ;; Otherwise, this is the only name we have, so stick |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2007 ;; the item on the front of the list |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2008 child) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2009 items)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2010 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2011 (defun js--pitem-add-child (pitem child) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2012 "Copy `js--pitem' PITEM, and push CHILD onto its list of children." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2013 (assert (integerp (js--pitem-h-begin child))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2014 (assert (if (consp (js--pitem-name child)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2015 (loop for part in (js--pitem-name child) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2016 always (stringp part)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2017 t)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2018 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2019 ;; This trick works because we know (based on our defstructs) that |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2020 ;; the child list is always the first element, and so the second |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2021 ;; element and beyond can be shared when we make our "copy". |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2022 (cons |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2023 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2024 (let ((name (js--pitem-name child)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2025 (type (js--pitem-type child))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2026 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2027 (cond ((cdr-safe name) ; true if a list of at least two elements |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2028 ;; Use slow path because we need class lookup |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2029 (js--splice-into-items (car pitem) child name)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2030 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2031 ((and (consp type) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2032 (plist-get type :prototype)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2033 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2034 ;; Use slow path because we need class merging. We know |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2035 ;; name is a list here because down in |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2036 ;; `js--ensure-cache', we made sure to only add |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2037 ;; class entries with lists for :name |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2038 (assert (consp name)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2039 (js--splice-into-items (car pitem) child name)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2040 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2041 (t |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2042 ;; Fast path |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2043 (cons child (car pitem))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2044 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2045 (cdr pitem))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2046 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2047 (defun js--maybe-make-marker (location) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2048 "Return a marker for LOCATION if `imenu-use-markers' is non-nil." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2049 (if imenu-use-markers |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2050 (set-marker (make-marker) location) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2051 location)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2052 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2053 (defun js--pitems-to-imenu (pitems unknown-ctr) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2054 "Convert PITEMS, a list of `js--pitem' structures, to imenu format." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2055 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2056 (let (imenu-items pitem pitem-type pitem-name subitems) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2057 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2058 (while (setq pitem (pop pitems)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2059 (setq pitem-type (js--pitem-type pitem)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2060 (setq pitem-name (js--pitem-strname pitem)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2061 (when (eq pitem-name t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2062 (setq pitem-name (format "[unknown %s]" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2063 (incf (car unknown-ctr))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2064 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2065 (cond |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2066 ((memq pitem-type '(function macro)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2067 (assert (integerp (js--pitem-h-begin pitem))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2068 (push (cons pitem-name |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2069 (js--maybe-make-marker |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2070 (js--pitem-h-begin pitem))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2071 imenu-items)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2072 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2073 ((consp pitem-type) ; class definition |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2074 (setq subitems (js--pitems-to-imenu |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2075 (js--pitem-children pitem) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2076 unknown-ctr)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2077 (cond (subitems |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2078 (push (cons pitem-name subitems) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2079 imenu-items)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2080 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2081 ((js--pitem-h-begin pitem) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2082 (assert (integerp (js--pitem-h-begin pitem))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2083 (setq subitems (list |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2084 (cons "[empty]" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2085 (js--maybe-make-marker |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2086 (js--pitem-h-begin pitem))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2087 (push (cons pitem-name subitems) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2088 imenu-items)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2089 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2090 (t (error "Unknown item type: %S" pitem-type)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2091 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2092 imenu-items)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2093 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2094 (defun js--imenu-create-index () |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2095 "Return an imenu index for the current buffer." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2096 (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2097 (save-restriction |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2098 (widen) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2099 (goto-char (point-max)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2100 (js--ensure-cache) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2101 (assert (or (= (point-min) (point-max)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2102 (eq js--last-parse-pos (point)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2103 (when js--last-parse-pos |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2104 (let ((state js--state-at-last-parse-pos) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2105 (unknown-ctr (cons -1 nil))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2106 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2107 ;; Make sure everything is closed |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2108 (while (cdr state) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2109 (setq state |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2110 (cons (js--pitem-add-child (second state) (car state)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2111 (cddr state)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2112 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2113 (assert (= (length state) 1)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2114 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2115 ;; Convert the new-finalized state into what imenu expects |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2116 (js--pitems-to-imenu |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2117 (car (js--pitem-children state)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2118 unknown-ctr)))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2119 |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2120 ;; Silence the compiler. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2121 (defvar which-func-imenu-joiner-function) |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2122 |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2123 (defun js--which-func-joiner (parts) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2124 (mapconcat #'identity parts ".")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2125 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2126 (defun js--imenu-to-flat (items prefix symbols) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2127 (loop for item in items |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2128 if (imenu--subalist-p item) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2129 do (js--imenu-to-flat |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2130 (cdr item) (concat prefix (car item) ".") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2131 symbols) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2132 else |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2133 do (let* ((name (concat prefix (car item))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2134 (name2 name) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2135 (ctr 0)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2136 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2137 (while (gethash name2 symbols) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2138 (setq name2 (format "%s<%d>" name (incf ctr)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2139 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2140 (puthash name2 (cdr item) symbols)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2141 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2142 (defun js--get-all-known-symbols () |
104683
2b8eeeaa8c1d
* international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents:
104391
diff
changeset
|
2143 "Return a hash table of all JavaScript symbols. |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2144 This searches all existing `js-mode' buffers. Each key is the |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2145 name of a symbol (possibly disambiguated with <N>, where N > 1), |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2146 and each value is a marker giving the location of that symbol." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2147 (loop with symbols = (make-hash-table :test 'equal) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2148 with imenu-use-markers = t |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2149 for buffer being the buffers |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2150 for imenu-index = (with-current-buffer buffer |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2151 (when (eq major-mode 'js-mode) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2152 (js--imenu-create-index))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2153 do (js--imenu-to-flat imenu-index "" symbols) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2154 finally return symbols)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2155 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2156 (defvar js--symbol-history nil |
104683
2b8eeeaa8c1d
* international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents:
104391
diff
changeset
|
2157 "History of entered JavaScript symbols.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2158 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2159 (defun js--read-symbol (symbols-table prompt &optional initial-input) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2160 "Helper function for `js-find-symbol'. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2161 Read a symbol from SYMBOLS-TABLE, which is a hash table like the |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2162 one from `js--get-all-known-symbols', using prompt PROMPT and |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2163 initial input INITIAL-INPUT. Return a cons of (SYMBOL-NAME |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2164 . LOCATION), where SYMBOL-NAME is a string and LOCATION is a |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2165 marker." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2166 (unless ido-mode |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2167 (ido-mode t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2168 (ido-mode nil)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2169 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2170 (let ((choice (ido-completing-read |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2171 prompt |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2172 (loop for key being the hash-keys of symbols-table |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2173 collect key) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2174 nil t initial-input 'js--symbol-history))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2175 (cons choice (gethash choice symbols-table)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2176 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2177 (defun js--guess-symbol-at-point () |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2178 (let ((bounds (bounds-of-thing-at-point 'symbol))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2179 (when bounds |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2180 (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2181 (goto-char (car bounds)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2182 (when (eq (char-before) ?.) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2183 (backward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2184 (setf (car bounds) (point)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2185 (buffer-substring (car bounds) (cdr bounds))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2186 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2187 (defun js-find-symbol (&optional arg) |
104683
2b8eeeaa8c1d
* international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents:
104391
diff
changeset
|
2188 "Read a JavaScript symbol and jump to it. |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2189 With a prefix argument, restrict symbols to those from the |
104683
2b8eeeaa8c1d
* international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents:
104391
diff
changeset
|
2190 current buffer. Pushes a mark onto the tag ring just like |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2191 `find-tag'." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2192 (interactive "P") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2193 (let (symbols marker) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2194 (if (not arg) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2195 (setq symbols (js--get-all-known-symbols)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2196 (setq symbols (make-hash-table :test 'equal)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2197 (js--imenu-to-flat (js--imenu-create-index) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2198 "" symbols)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2199 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2200 (setq marker (cdr (js--read-symbol |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2201 symbols "Jump to: " |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2202 (js--guess-symbol-at-point)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2203 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2204 (ring-insert find-tag-marker-ring (point-marker)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2205 (switch-to-buffer (marker-buffer marker)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2206 (push-mark) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2207 (goto-char marker))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2208 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2209 ;;; MozRepl integration |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2210 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2211 (put 'js-moz-bad-rpc 'error-conditions '(error timeout)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2212 (put 'js-moz-bad-rpc 'error-message "Mozilla RPC Error") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2213 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2214 (put 'js-js-error 'error-conditions '(error js-error)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2215 (put 'js-js-error 'error-message "Javascript Error") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2216 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2217 (defun js--wait-for-matching-output |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2218 (process regexp timeout &optional start) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2219 "Wait TIMEOUT seconds for PROCESS to output a match for REGEXP. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2220 On timeout, return nil. On success, return t with match data |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2221 set. If START is non-nil, look for output starting from START. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2222 Otherwise, use the current value of `process-mark'." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2223 (with-current-buffer (process-buffer process) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2224 (loop with start-pos = (or start |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2225 (marker-position (process-mark process))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2226 with end-time = (+ (float-time) timeout) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2227 for time-left = (- end-time (float-time)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2228 do (goto-char (point-max)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2229 if (looking-back regexp start-pos) return t |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2230 while (> time-left 0) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2231 do (accept-process-output process time-left nil t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2232 do (goto-char (process-mark process)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2233 finally do (signal |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2234 'js-moz-bad-rpc |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2235 (list (format "Timed out waiting for output matching %S" regexp)))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2236 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2237 (defstruct js--js-handle |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2238 ;; Integer, mirrors the value we see in JS |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2239 (id nil :read-only t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2240 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2241 ;; Process to which this thing belongs |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2242 (process nil :read-only t)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2243 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2244 (defun js--js-handle-expired-p (x) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2245 (not (eq (js--js-handle-process x) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2246 (inferior-moz-process)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2247 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2248 (defvar js--js-references nil |
104683
2b8eeeaa8c1d
* international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents:
104391
diff
changeset
|
2249 "Maps Elisp JavaScript proxy objects to their JavaScript IDs.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2250 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2251 (defvar js--js-process nil |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2252 "The most recent MozRepl process object.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2253 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2254 (defvar js--js-gc-idle-timer nil |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2255 "Idle timer for cleaning up JS object references.") |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2256 |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2257 (defvar js--js-last-gcs-done nil) |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2258 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2259 (defconst js--moz-interactor |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2260 (replace-regexp-in-string |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2261 "[ \n]+" " " |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2262 ; */" Make Emacs happy |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2263 "(function(repl) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2264 repl.defineInteractor('js', { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2265 onStart: function onStart(repl) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2266 if(!repl._jsObjects) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2267 repl._jsObjects = {}; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2268 repl._jsLastID = 0; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2269 repl._jsGC = this._jsGC; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2270 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2271 this._input = ''; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2272 }, |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2273 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2274 _jsGC: function _jsGC(ids_in_use) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2275 var objects = this._jsObjects; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2276 var keys = []; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2277 var num_freed = 0; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2278 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2279 for(var pn in objects) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2280 keys.push(Number(pn)); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2281 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2282 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2283 keys.sort(function(x, y) x - y); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2284 ids_in_use.sort(function(x, y) x - y); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2285 var i = 0; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2286 var j = 0; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2287 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2288 while(i < ids_in_use.length && j < keys.length) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2289 var id = ids_in_use[i++]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2290 while(j < keys.length && keys[j] !== id) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2291 var k_id = keys[j++]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2292 delete objects[k_id]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2293 ++num_freed; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2294 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2295 ++j; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2296 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2297 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2298 while(j < keys.length) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2299 var k_id = keys[j++]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2300 delete objects[k_id]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2301 ++num_freed; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2302 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2303 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2304 return num_freed; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2305 }, |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2306 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2307 _mkArray: function _mkArray() { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2308 var result = []; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2309 for(var i = 0; i < arguments.length; ++i) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2310 result.push(arguments[i]); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2311 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2312 return result; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2313 }, |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2314 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2315 _parsePropDescriptor: function _parsePropDescriptor(parts) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2316 if(typeof parts === 'string') { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2317 parts = [ parts ]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2318 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2319 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2320 var obj = parts[0]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2321 var start = 1; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2322 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2323 if(typeof obj === 'string') { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2324 obj = window; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2325 start = 0; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2326 } else if(parts.length < 2) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2327 throw new Error('expected at least 2 arguments'); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2328 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2329 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2330 for(var i = start; i < parts.length - 1; ++i) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2331 obj = obj[parts[i]]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2332 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2333 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2334 return [obj, parts[parts.length - 1]]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2335 }, |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2336 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2337 _getProp: function _getProp(/*...*/) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2338 if(arguments.length === 0) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2339 throw new Error('no arguments supplied to getprop'); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2340 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2341 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2342 if(arguments.length === 1 && |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2343 (typeof arguments[0]) !== 'string') |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2344 { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2345 return arguments[0]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2346 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2347 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2348 var [obj, propname] = this._parsePropDescriptor(arguments); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2349 return obj[propname]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2350 }, |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2351 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2352 _putProp: function _putProp(properties, value) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2353 var [obj, propname] = this._parsePropDescriptor(properties); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2354 obj[propname] = value; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2355 }, |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2356 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2357 _delProp: function _delProp(propname) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2358 var [obj, propname] = this._parsePropDescriptor(arguments); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2359 delete obj[propname]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2360 }, |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2361 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2362 _typeOf: function _typeOf(thing) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2363 return typeof thing; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2364 }, |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2365 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2366 _callNew: function(constructor) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2367 if(typeof constructor === 'string') |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2368 { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2369 constructor = window[constructor]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2370 } else if(constructor.length === 1 && |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2371 typeof constructor[0] !== 'string') |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2372 { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2373 constructor = constructor[0]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2374 } else { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2375 var [obj,propname] = this._parsePropDescriptor(constructor); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2376 constructor = obj[propname]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2377 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2378 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2379 /* Hacky, but should be robust */ |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2380 var s = 'new constructor('; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2381 for(var i = 1; i < arguments.length; ++i) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2382 if(i != 1) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2383 s += ','; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2384 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2385 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2386 s += 'arguments[' + i + ']'; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2387 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2388 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2389 s += ')'; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2390 return eval(s); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2391 }, |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2392 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2393 _callEval: function(thisobj, js) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2394 return eval.call(thisobj, js); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2395 }, |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2396 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2397 getPrompt: function getPrompt(repl) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2398 return 'EVAL>' |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2399 }, |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2400 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2401 _lookupObject: function _lookupObject(repl, id) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2402 if(typeof id === 'string') { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2403 switch(id) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2404 case 'global': |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2405 return window; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2406 case 'nil': |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2407 return null; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2408 case 't': |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2409 return true; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2410 case 'false': |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2411 return false; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2412 case 'undefined': |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2413 return undefined; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2414 case 'repl': |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2415 return repl; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2416 case 'interactor': |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2417 return this; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2418 case 'NaN': |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2419 return NaN; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2420 case 'Infinity': |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2421 return Infinity; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2422 case '-Infinity': |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2423 return -Infinity; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2424 default: |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2425 throw new Error('No object with special id:' + id); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2426 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2427 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2428 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2429 var ret = repl._jsObjects[id]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2430 if(ret === undefined) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2431 throw new Error('No object with id:' + id + '(' + typeof id + ')'); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2432 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2433 return ret; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2434 }, |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2435 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2436 _findOrAllocateObject: function _findOrAllocateObject(repl, value) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2437 if(typeof value !== 'object' && typeof value !== 'function') { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2438 throw new Error('_findOrAllocateObject called on non-object(' |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2439 + typeof(value) + '): ' |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2440 + value) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2441 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2442 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2443 for(var id in repl._jsObjects) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2444 id = Number(id); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2445 var obj = repl._jsObjects[id]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2446 if(obj === value) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2447 return id; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2448 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2449 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2450 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2451 var id = ++repl._jsLastID; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2452 repl._jsObjects[id] = value; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2453 return id; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2454 }, |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2455 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2456 _fixupList: function _fixupList(repl, list) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2457 for(var i = 0; i < list.length; ++i) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2458 if(list[i] instanceof Array) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2459 this._fixupList(repl, list[i]); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2460 } else if(typeof list[i] === 'object') { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2461 var obj = list[i]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2462 if(obj.funcall) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2463 var parts = obj.funcall; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2464 this._fixupList(repl, parts); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2465 var [thisobj, func] = this._parseFunc(parts[0]); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2466 list[i] = func.apply(thisobj, parts.slice(1)); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2467 } else if(obj.objid) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2468 list[i] = this._lookupObject(repl, obj.objid); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2469 } else { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2470 throw new Error('Unknown object type: ' + obj.toSource()); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2471 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2472 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2473 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2474 }, |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2475 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2476 _parseFunc: function(func) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2477 var thisobj = null; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2478 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2479 if(typeof func === 'string') { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2480 func = window[func]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2481 } else if(func instanceof Array) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2482 if(func.length === 1 && typeof func[0] !== 'string') { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2483 func = func[0]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2484 } else { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2485 [thisobj, func] = this._parsePropDescriptor(func); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2486 func = thisobj[func]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2487 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2488 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2489 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2490 return [thisobj,func]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2491 }, |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2492 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2493 _encodeReturn: function(value, array_as_mv) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2494 var ret; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2495 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2496 if(value === null) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2497 ret = ['special', 'null']; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2498 } else if(value === true) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2499 ret = ['special', 'true']; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2500 } else if(value === false) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2501 ret = ['special', 'false']; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2502 } else if(value === undefined) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2503 ret = ['special', 'undefined']; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2504 } else if(typeof value === 'number') { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2505 if(isNaN(value)) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2506 ret = ['special', 'NaN']; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2507 } else if(value === Infinity) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2508 ret = ['special', 'Infinity']; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2509 } else if(value === -Infinity) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2510 ret = ['special', '-Infinity']; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2511 } else { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2512 ret = ['atom', value]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2513 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2514 } else if(typeof value === 'string') { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2515 ret = ['atom', value]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2516 } else if(array_as_mv && value instanceof Array) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2517 ret = ['array', value.map(this._encodeReturn, this)]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2518 } else { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2519 ret = ['objid', this._findOrAllocateObject(repl, value)]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2520 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2521 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2522 return ret; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2523 }, |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2524 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2525 _handleInputLine: function _handleInputLine(repl, line) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2526 var ret; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2527 var array_as_mv = false; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2528 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2529 try { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2530 if(line[0] === '*') { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2531 array_as_mv = true; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2532 line = line.substring(1); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2533 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2534 var parts = eval(line); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2535 this._fixupList(repl, parts); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2536 var [thisobj, func] = this._parseFunc(parts[0]); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2537 ret = this._encodeReturn( |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2538 func.apply(thisobj, parts.slice(1)), |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2539 array_as_mv); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2540 } catch(x) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2541 ret = ['error', x.toString() ]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2542 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2543 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2544 var JSON = Components.classes['@mozilla.org/dom/json;1'].createInstance(Components.interfaces.nsIJSON); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2545 repl.print(JSON.encode(ret)); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2546 repl._prompt(); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2547 }, |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2548 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2549 handleInput: function handleInput(repl, chunk) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2550 this._input += chunk; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2551 var match, line; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2552 while(match = this._input.match(/.*\\n/)) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2553 line = match[0]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2554 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2555 if(line === 'EXIT\\n') { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2556 repl.popInteractor(); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2557 repl._prompt(); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2558 return; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2559 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2560 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2561 this._input = this._input.substring(line.length); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2562 this._handleInputLine(repl, line); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2563 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2564 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2565 }); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2566 }) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2567 ") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2568 |
104683
2b8eeeaa8c1d
* international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents:
104391
diff
changeset
|
2569 "String to set MozRepl up into a simple-minded evaluation mode.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2570 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2571 (defun js--js-encode-value (x) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2572 "Marshall the given value for JS. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2573 Strings and numbers are JSON-encoded. Lists (including nil) are |
104683
2b8eeeaa8c1d
* international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents:
104391
diff
changeset
|
2574 made into JavaScript array literals and their contents encoded |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2575 with `js--js-encode-value'." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2576 (cond ((stringp x) (json-encode-string x)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2577 ((numberp x) (json-encode-number x)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2578 ((symbolp x) (format "{objid:%S}" (symbol-name x))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2579 ((js--js-handle-p x) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2580 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2581 (when (js--js-handle-expired-p x) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2582 (error "Stale JS handle")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2583 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2584 (format "{objid:%s}" (js--js-handle-id x))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2585 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2586 ((sequencep x) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2587 (if (eq (car-safe x) 'js--funcall) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2588 (format "{funcall:[%s]}" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2589 (mapconcat #'js--js-encode-value (cdr x) ",")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2590 (concat |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2591 "[" (mapconcat #'js--js-encode-value x ",") "]"))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2592 (t |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2593 (error "Unrecognized item: %S" x)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2594 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2595 (defconst js--js-prompt-regexp "\\(repl[0-9]*\\)> $") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2596 (defconst js--js-repl-prompt-regexp "^EVAL>$") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2597 (defvar js--js-repl-depth 0) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2598 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2599 (defun js--js-wait-for-eval-prompt () |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2600 (js--wait-for-matching-output |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2601 (inferior-moz-process) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2602 js--js-repl-prompt-regexp js-js-timeout |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2603 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2604 ;; start matching against the beginning of the line in |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2605 ;; order to catch a prompt that's only partially arrived |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2606 (save-excursion (forward-line 0) (point)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2607 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2608 (defun js--js-enter-repl () |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2609 (inferior-moz-process) ; called for side-effect |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2610 (with-current-buffer inferior-moz-buffer |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2611 (goto-char (point-max)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2612 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2613 ;; Do some initialization the first time we see a process |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2614 (unless (eq (inferior-moz-process) js--js-process) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2615 (setq js--js-process (inferior-moz-process)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2616 (setq js--js-references (make-hash-table :test 'eq :weakness t)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2617 (setq js--js-repl-depth 0) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2618 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2619 ;; Send interactor definition |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2620 (comint-send-string js--js-process js--moz-interactor) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2621 (comint-send-string js--js-process |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2622 (concat "(" moz-repl-name ")\n")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2623 (js--wait-for-matching-output |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2624 (inferior-moz-process) js--js-prompt-regexp |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2625 js-js-timeout)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2626 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2627 ;; Sanity check |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2628 (when (looking-back js--js-prompt-regexp |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2629 (save-excursion (forward-line 0) (point))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2630 (setq js--js-repl-depth 0)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2631 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2632 (if (> js--js-repl-depth 0) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2633 ;; If js--js-repl-depth > 0, we *should* be seeing an |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2634 ;; EVAL> prompt. If we don't, give Mozilla a chance to catch |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2635 ;; up with us. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2636 (js--js-wait-for-eval-prompt) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2637 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2638 ;; Otherwise, tell Mozilla to enter the interactor mode |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2639 (insert (match-string-no-properties 1) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2640 ".pushInteractor('js')") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2641 (comint-send-input nil t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2642 (js--wait-for-matching-output |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2643 (inferior-moz-process) js--js-repl-prompt-regexp |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2644 js-js-timeout)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2645 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2646 (incf js--js-repl-depth))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2647 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2648 (defun js--js-leave-repl () |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2649 (assert (> js--js-repl-depth 0)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2650 (when (= 0 (decf js--js-repl-depth)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2651 (with-current-buffer inferior-moz-buffer |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2652 (goto-char (point-max)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2653 (js--js-wait-for-eval-prompt) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2654 (insert "EXIT") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2655 (comint-send-input nil t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2656 (js--wait-for-matching-output |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2657 (inferior-moz-process) js--js-prompt-regexp |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2658 js-js-timeout)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2659 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2660 (defsubst js--js-not (value) |
106457
c15d1227e860
* progmodes/js.el (js--js-not): Add null to the list of values.
Chong Yidong <cyd@stupidchicken.com>
parents:
105372
diff
changeset
|
2661 (memq value '(nil null false undefined))) |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2662 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2663 (defsubst js--js-true (value) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2664 (not (js--js-not value))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2665 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2666 (eval-and-compile |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2667 (defun js--optimize-arglist (arglist) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2668 "Convert immediate js< and js! references to deferred ones." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2669 (loop for item in arglist |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2670 if (eq (car-safe item) 'js<) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2671 collect (append (list 'list ''js--funcall |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2672 '(list 'interactor "_getProp")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2673 (js--optimize-arglist (cdr item))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2674 else if (eq (car-safe item) 'js>) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2675 collect (append (list 'list ''js--funcall |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2676 '(list 'interactor "_putProp")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2677 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2678 (if (atom (cadr item)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2679 (list (cadr item)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2680 (list |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2681 (append |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2682 (list 'list ''js--funcall |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2683 '(list 'interactor "_mkArray")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2684 (js--optimize-arglist (cadr item))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2685 (js--optimize-arglist (cddr item))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2686 else if (eq (car-safe item) 'js!) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2687 collect (destructuring-bind (ignored function &rest body) item |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2688 (append (list 'list ''js--funcall |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2689 (if (consp function) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2690 (cons 'list |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2691 (js--optimize-arglist function)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2692 function)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2693 (js--optimize-arglist body))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2694 else |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2695 collect item))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2696 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2697 (defmacro js--js-get-service (class-name interface-name) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2698 `(js! ("Components" "classes" ,class-name "getService") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2699 (js< "Components" "interfaces" ,interface-name))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2700 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2701 (defmacro js--js-create-instance (class-name interface-name) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2702 `(js! ("Components" "classes" ,class-name "createInstance") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2703 (js< "Components" "interfaces" ,interface-name))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2704 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2705 (defmacro js--js-qi (object interface-name) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2706 `(js! (,object "QueryInterface") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2707 (js< "Components" "interfaces" ,interface-name))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2708 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2709 (defmacro with-js (&rest forms) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2710 "Run FORMS with the Mozilla repl set up for js commands. |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2711 Inside the lexical scope of `with-js', `js?', `js!', |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2712 `js-new', `js-eval', `js-list', `js<', `js>', `js-get-service', |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2713 `js-create-instance', and `js-qi' are defined." |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2714 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2715 `(progn |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2716 (js--js-enter-repl) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2717 (unwind-protect |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2718 (macrolet ((js? (&rest body) `(js--js-true ,@body)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2719 (js! (function &rest body) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2720 `(js--js-funcall |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2721 ,(if (consp function) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2722 (cons 'list |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2723 (js--optimize-arglist function)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2724 function) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2725 ,@(js--optimize-arglist body))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2726 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2727 (js-new (function &rest body) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2728 `(js--js-new |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2729 ,(if (consp function) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2730 (cons 'list |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2731 (js--optimize-arglist function)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2732 function) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2733 ,@body)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2734 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2735 (js-eval (thisobj js) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2736 `(js--js-eval |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2737 ,@(js--optimize-arglist |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2738 (list thisobj js)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2739 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2740 (js-list (&rest args) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2741 `(js--js-list |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2742 ,@(js--optimize-arglist args))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2743 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2744 (js-get-service (&rest args) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2745 `(js--js-get-service |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2746 ,@(js--optimize-arglist args))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2747 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2748 (js-create-instance (&rest args) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2749 `(js--js-create-instance |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2750 ,@(js--optimize-arglist args))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2751 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2752 (js-qi (&rest args) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2753 `(js--js-qi |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2754 ,@(js--optimize-arglist args))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2755 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2756 (js< (&rest body) `(js--js-get |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2757 ,@(js--optimize-arglist body))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2758 (js> (props value) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2759 `(js--js-funcall |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2760 '(interactor "_putProp") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2761 ,(if (consp props) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2762 (cons 'list |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2763 (js--optimize-arglist props)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2764 props) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2765 ,@(js--optimize-arglist (list value)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2766 )) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2767 (js-handle? (arg) `(js--js-handle-p ,arg))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2768 ,@forms) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2769 (js--js-leave-repl)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2770 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2771 (defvar js--js-array-as-list nil |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2772 "Whether to listify any Array returned by a Mozilla function. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2773 If nil, the whole Array is treated as a JS symbol.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2774 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2775 (defun js--js-decode-retval (result) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2776 (ecase (intern (first result)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2777 (atom (second result)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2778 (special (intern (second result))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2779 (array |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2780 (mapcar #'js--js-decode-retval (second result))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2781 (objid |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2782 (or (gethash (second result) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2783 js--js-references) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2784 (puthash (second result) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2785 (make-js--js-handle |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2786 :id (second result) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2787 :process (inferior-moz-process)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2788 js--js-references))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2789 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2790 (error (signal 'js-js-error (list (second result)))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2791 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2792 (defun js--js-funcall (function &rest arguments) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2793 "Call the Mozilla function FUNCTION with arguments ARGUMENTS. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2794 If function is a string, look it up as a property on the global |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2795 object and use the global object for `this'. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2796 If FUNCTION is a list with one element, use that element as the |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2797 function with the global object for `this', except that if that |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2798 single element is a string, look it up on the global object. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2799 If FUNCTION is a list with more than one argument, use the list |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2800 up to the last value as a property descriptor and the last |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2801 argument as a function." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2802 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2803 (with-js |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2804 (let ((argstr (js--js-encode-value |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2805 (cons function arguments)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2806 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2807 (with-current-buffer inferior-moz-buffer |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2808 ;; Actual funcall |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2809 (when js--js-array-as-list |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2810 (insert "*")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2811 (insert argstr) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2812 (comint-send-input nil t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2813 (js--wait-for-matching-output |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2814 (inferior-moz-process) "EVAL>" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2815 js-js-timeout) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2816 (goto-char comint-last-input-end) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2817 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2818 ;; Read the result |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2819 (let* ((json-array-type 'list) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2820 (result (prog1 (json-read) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2821 (goto-char (point-max))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2822 (js--js-decode-retval result)))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2823 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2824 (defun js--js-new (constructor &rest arguments) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2825 "Call CONSTRUCTOR as a constructor, with arguments ARGUMENTS. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2826 CONSTRUCTOR is a JS handle, a string, or a list of these things." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2827 (apply #'js--js-funcall |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2828 '(interactor "_callNew") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2829 constructor arguments)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2830 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2831 (defun js--js-eval (thisobj js) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2832 (js--js-funcall '(interactor "_callEval") thisobj js)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2833 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2834 (defun js--js-list (&rest arguments) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2835 "Return a Lisp array resulting from evaluating each of ARGUMENTS." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2836 (let ((js--js-array-as-list t)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2837 (apply #'js--js-funcall '(interactor "_mkArray") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2838 arguments))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2839 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2840 (defun js--js-get (&rest props) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2841 (apply #'js--js-funcall '(interactor "_getProp") props)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2842 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2843 (defun js--js-put (props value) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2844 (js--js-funcall '(interactor "_putProp") props value)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2845 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2846 (defun js-gc (&optional force) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2847 "Tell the repl about any objects we don't reference anymore. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2848 With argument, run even if no intervening GC has happened." |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2849 (interactive) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2850 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2851 (when force |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2852 (setq js--js-last-gcs-done nil)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2853 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2854 (let ((this-gcs-done gcs-done) keys num) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2855 (when (and js--js-references |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2856 (boundp 'inferior-moz-buffer) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2857 (buffer-live-p inferior-moz-buffer) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2858 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2859 ;; Don't bother running unless we've had an intervening |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2860 ;; garbage collection; without a gc, nothing is deleted |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2861 ;; from the weak hash table, so it's pointless telling |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2862 ;; MozRepl about that references we still hold |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2863 (not (eq js--js-last-gcs-done this-gcs-done)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2864 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2865 ;; Are we looking at a normal prompt? Make sure not to |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2866 ;; interrupt the user if he's doing something |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2867 (with-current-buffer inferior-moz-buffer |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2868 (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2869 (goto-char (point-max)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2870 (looking-back js--js-prompt-regexp |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2871 (save-excursion (forward-line 0) (point)))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2872 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2873 (setq keys (loop for x being the hash-keys |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2874 of js--js-references |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2875 collect x)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2876 (setq num (js--js-funcall '(repl "_jsGC") (or keys []))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2877 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2878 (setq js--js-last-gcs-done this-gcs-done) |
105372
bd2966850aac
Use `called-interactively-p' instead of `interactive-p'.
Juanma Barranquero <lekktu@gmail.com>
parents:
105076
diff
changeset
|
2879 (when (called-interactively-p 'interactive) |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2880 (message "Cleaned %s entries" num)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2881 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2882 num))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2883 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2884 (run-with-idle-timer 30 t #'js-gc) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2885 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2886 (defun js-eval (js) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2887 "Evaluate the JavaScript in JS and return JSON-decoded result." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2888 (interactive "MJavascript to evaluate: ") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2889 (with-js |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2890 (let* ((content-window (js--js-content-window |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2891 (js--get-js-context))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2892 (result (js-eval content-window js))) |
105372
bd2966850aac
Use `called-interactively-p' instead of `interactive-p'.
Juanma Barranquero <lekktu@gmail.com>
parents:
105076
diff
changeset
|
2893 (when (called-interactively-p 'interactive) |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2894 (message "%s" (js! "String" result))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2895 result))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2896 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2897 (defun js--get-tabs () |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2898 "Enumerate all JavaScript contexts available. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2899 Each context is a list: |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2900 (TITLE URL BROWSER TAB TABBROWSER) for content documents |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2901 (TITLE URL WINDOW) for windows |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2902 |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2903 All tabs of a given window are grouped together. The most recent |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2904 window is first. Within each window, the tabs are returned |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2905 left-to-right." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2906 (with-js |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2907 (let (windows) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2908 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2909 (loop with window-mediator = (js! ("Components" "classes" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2910 "@mozilla.org/appshell/window-mediator;1" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2911 "getService") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2912 (js< "Components" "interfaces" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2913 "nsIWindowMediator")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2914 with enumerator = (js! (window-mediator "getEnumerator") nil) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2915 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2916 while (js? (js! (enumerator "hasMoreElements"))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2917 for window = (js! (enumerator "getNext")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2918 for window-info = (js-list window |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2919 (js< window "document" "title") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2920 (js! (window "location" "toString")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2921 (js< window "closed") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2922 (js< window "windowState")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2923 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2924 unless (or (js? (fourth window-info)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2925 (eq (fifth window-info) 2)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2926 do (push window-info windows)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2927 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2928 (loop for window-info in windows |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2929 for window = (first window-info) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2930 collect (list (second window-info) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2931 (third window-info) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2932 window) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2933 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2934 for gbrowser = (js< window "gBrowser") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2935 if (js-handle? gbrowser) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2936 nconc (loop |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2937 for x below (js< gbrowser "browsers" "length") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2938 collect (js-list (js< gbrowser |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2939 "browsers" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2940 x |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2941 "contentDocument" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2942 "title") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2943 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2944 (js! (gbrowser |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2945 "browsers" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2946 x |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2947 "contentWindow" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2948 "location" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2949 "toString")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2950 (js< gbrowser |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2951 "browsers" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2952 x) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2953 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2954 (js! (gbrowser |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2955 "tabContainer" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2956 "childNodes" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2957 "item") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2958 x) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2959 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2960 gbrowser)))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2961 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2962 (defvar js-read-tab-history nil) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2963 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2964 (defun js--read-tab (prompt) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2965 "Read a Mozilla tab with prompt PROMPT. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2966 Return a cons of (TYPE . OBJECT). TYPE is either 'window or |
104683
2b8eeeaa8c1d
* international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents:
104391
diff
changeset
|
2967 'tab, and OBJECT is a JavaScript handle to a ChromeWindow or a |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2968 browser, respectively." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2969 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2970 ;; Prime IDO |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2971 (unless ido-mode |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2972 (ido-mode t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2973 (ido-mode nil)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2974 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2975 (with-js |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2976 (lexical-let ((tabs (js--get-tabs)) selected-tab-cname |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2977 selected-tab prev-hitab) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2978 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2979 ;; Disambiguate names |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2980 (setq tabs (loop with tab-names = (make-hash-table :test 'equal) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2981 for tab in tabs |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2982 for cname = (format "%s (%s)" (second tab) (first tab)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2983 for num = (incf (gethash cname tab-names -1)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2984 if (> num 0) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2985 do (setq cname (format "%s <%d>" cname num)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2986 collect (cons cname tab))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2987 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2988 (labels ((find-tab-by-cname |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2989 (cname) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2990 (loop for tab in tabs |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2991 if (equal (car tab) cname) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2992 return (cdr tab))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2993 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2994 (mogrify-highlighting |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2995 (hitab unhitab) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2996 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2997 ;; Hack to reduce the number of |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2998 ;; round-trips to mozilla |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2999 (let (cmds) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3000 (cond |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3001 ;; Highlighting tab |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3002 ((fourth hitab) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3003 (push '(js! ((fourth hitab) "setAttribute") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3004 "style" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3005 "color: red; font-weight: bold") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3006 cmds) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3007 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3008 ;; Highlight window proper |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3009 (push '(js! ((third hitab) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3010 "setAttribute") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3011 "style" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3012 "border: 8px solid red") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3013 cmds) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3014 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3015 ;; Select tab, when appropriate |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3016 (when js-js-switch-tabs |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3017 (push |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3018 '(js> ((fifth hitab) "selectedTab") (fourth hitab)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3019 cmds))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3020 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3021 ;; Hilighting whole window |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3022 ((third hitab) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3023 (push '(js! ((third hitab) "document" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3024 "documentElement" "setAttribute") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3025 "style" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3026 (concat "-moz-appearance: none;" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3027 "border: 8px solid red;")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3028 cmds))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3029 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3030 (cond |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3031 ;; Unhighlighting tab |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3032 ((fourth unhitab) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3033 (push '(js! ((fourth unhitab) "setAttribute") "style" "") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3034 cmds) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3035 (push '(js! ((third unhitab) "setAttribute") "style" "") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3036 cmds)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3037 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3038 ;; Unhighlighting window |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3039 ((third unhitab) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3040 (push '(js! ((third unhitab) "document" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3041 "documentElement" "setAttribute") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3042 "style" "") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3043 cmds))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3044 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3045 (eval (list 'with-js |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3046 (cons 'js-list (nreverse cmds)))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3047 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3048 (command-hook |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3049 () |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3050 (let* ((tab (find-tab-by-cname (car ido-matches)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3051 (mogrify-highlighting tab prev-hitab) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3052 (setq prev-hitab tab))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3053 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3054 (setup-hook |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3055 () |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3056 ;; Fiddle with the match list a bit: if our first match |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3057 ;; is a tabbrowser window, rotate the match list until |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3058 ;; the active tab comes up |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3059 (let ((matched-tab (find-tab-by-cname (car ido-matches)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3060 (when (and matched-tab |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3061 (null (fourth matched-tab)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3062 (equal "navigator:browser" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3063 (js! ((third matched-tab) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3064 "document" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3065 "documentElement" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3066 "getAttribute") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3067 "windowtype"))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3068 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3069 (loop with tab-to-match = (js< (third matched-tab) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3070 "gBrowser" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3071 "selectedTab") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3072 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3073 with index = 0 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3074 for match in ido-matches |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3075 for candidate-tab = (find-tab-by-cname match) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3076 if (eq (fourth candidate-tab) tab-to-match) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3077 do (setq ido-cur-list (ido-chop ido-cur-list match)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3078 and return t))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3079 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3080 (add-hook 'post-command-hook #'command-hook t t))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3081 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3082 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3083 (unwind-protect |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3084 (setq selected-tab-cname |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3085 (let ((ido-minibuffer-setup-hook |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3086 (cons #'setup-hook ido-minibuffer-setup-hook))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3087 (ido-completing-read |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3088 prompt |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3089 (mapcar #'car tabs) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3090 nil t nil |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3091 'js-read-tab-history))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3092 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3093 (when prev-hitab |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3094 (mogrify-highlighting nil prev-hitab) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3095 (setq prev-hitab nil))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3096 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3097 (add-to-history 'js-read-tab-history selected-tab-cname) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3098 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3099 (setq selected-tab (loop for tab in tabs |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3100 if (equal (car tab) selected-tab-cname) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3101 return (cdr tab))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3102 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3103 (if (fourth selected-tab) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3104 (cons 'browser (third selected-tab)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3105 (cons 'window (third selected-tab))))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3106 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3107 (defun js--guess-eval-defun-info (pstate) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
3108 "Helper function for `js-eval-defun'. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
3109 Return a list (NAME . CLASSPARTS), where CLASSPARTS is a list of |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
3110 strings making up the class name and NAME is the name of the |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
3111 function part." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3112 (cond ((and (= (length pstate) 3) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3113 (eq (js--pitem-type (first pstate)) 'function) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3114 (= (length (js--pitem-name (first pstate))) 1) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3115 (consp (js--pitem-type (second pstate)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3116 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3117 (append (js--pitem-name (second pstate)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3118 (list (first (js--pitem-name (first pstate)))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3119 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3120 ((and (= (length pstate) 2) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3121 (eq (js--pitem-type (first pstate)) 'function)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3122 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3123 (append |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3124 (butlast (js--pitem-name (first pstate))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3125 (list (car (last (js--pitem-name (first pstate))))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3126 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3127 (t (error "Function not a toplevel defun or class member")))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3128 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3129 (defvar js--js-context nil |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
3130 "The current JavaScript context. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
3131 This is a cons like the one returned from `js--read-tab'. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
3132 Change with `js-set-js-context'.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3133 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3134 (defconst js--js-inserter |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3135 "(function(func_info,func) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3136 func_info.unshift('window'); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3137 var obj = window; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3138 for(var i = 1; i < func_info.length - 1; ++i) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3139 var next = obj[func_info[i]]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3140 if(typeof next !== 'object' && typeof next !== 'function') { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3141 next = obj.prototype && obj.prototype[func_info[i]]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3142 if(typeof next !== 'object' && typeof next !== 'function') { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3143 alert('Could not find ' + func_info.slice(0, i+1).join('.') + |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3144 ' or ' + func_info.slice(0, i+1).join('.') + '.prototype'); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3145 return; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3146 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3147 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3148 func_info.splice(i+1, 0, 'prototype'); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3149 ++i; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3150 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3151 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3152 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3153 obj[func_info[i]] = func; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3154 alert('Successfully updated '+func_info.join('.')); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3155 })") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3156 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3157 (defun js-set-js-context (context) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
3158 "Set the JavaScript context to CONTEXT. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
3159 When called interactively, prompt for CONTEXT." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3160 (interactive (list (js--read-tab "Javascript Context: "))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3161 (setq js--js-context context)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3162 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3163 (defun js--get-js-context () |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
3164 "Return a valid JavaScript context. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
3165 If one hasn't been set, or if it's stale, prompt for a new one." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3166 (with-js |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3167 (when (or (null js--js-context) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3168 (js--js-handle-expired-p (cdr js--js-context)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3169 (ecase (car js--js-context) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3170 (window (js? (js< (cdr js--js-context) "closed"))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3171 (browser (not (js? (js< (cdr js--js-context) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3172 "contentDocument")))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3173 (setq js--js-context (js--read-tab "Javascript Context: "))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3174 js--js-context)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3175 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3176 (defun js--js-content-window (context) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3177 (with-js |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3178 (ecase (car context) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3179 (window (cdr context)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3180 (browser (js< (cdr context) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3181 "contentWindow" "wrappedJSObject"))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3182 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3183 (defun js--make-nsilocalfile (path) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3184 (with-js |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3185 (let ((file (js-create-instance "@mozilla.org/file/local;1" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3186 "nsILocalFile"))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3187 (js! (file "initWithPath") path) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3188 file))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3189 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3190 (defun js--js-add-resource-alias (alias path) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3191 (with-js |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3192 (let* ((io-service (js-get-service "@mozilla.org/network/io-service;1" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3193 "nsIIOService")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3194 (res-prot (js! (io-service "getProtocolHandler") "resource")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3195 (res-prot (js-qi res-prot "nsIResProtocolHandler")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3196 (path-file (js--make-nsilocalfile path)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3197 (path-uri (js! (io-service "newFileURI") path-file))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3198 (js! (res-prot "setSubstitution") alias path-uri)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3199 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3200 (defun* js-eval-defun () |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
3201 "Update a Mozilla tab using the JavaScript defun at point." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3202 (interactive) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3203 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3204 ;; This function works by generating a temporary file that contains |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3205 ;; the function we'd like to insert. We then use the elisp-js bridge |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3206 ;; to command mozilla to load this file by inserting a script tag |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3207 ;; into the document we set. This way, debuggers and such will have |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3208 ;; a way to find the source of the just-inserted function. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3209 ;; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3210 ;; We delete the temporary file if there's an error, but otherwise |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3211 ;; we add an unload event listener on the Mozilla side to delete the |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3212 ;; file. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3213 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3214 (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3215 (let (begin end pstate defun-info temp-name defun-body) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
3216 (js-end-of-defun) |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3217 (setq end (point)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3218 (js--ensure-cache) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
3219 (js-beginning-of-defun) |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3220 (re-search-forward "\\_<function\\_>") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3221 (setq begin (match-beginning 0)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3222 (setq pstate (js--forward-pstate)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3223 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3224 (when (or (null pstate) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3225 (> (point) end)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3226 (error "Could not locate function definition")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3227 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3228 (setq defun-info (js--guess-eval-defun-info pstate)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3229 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3230 (let ((overlay (make-overlay begin end))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3231 (overlay-put overlay 'face 'highlight) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3232 (unwind-protect |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3233 (unless (y-or-n-p (format "Send %s to Mozilla? " |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3234 (mapconcat #'identity defun-info "."))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3235 (message "") ; question message lingers until next command |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3236 (return-from js-eval-defun)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3237 (delete-overlay overlay))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3238 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3239 (setq defun-body (buffer-substring-no-properties begin end)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3240 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3241 (make-directory js-js-tmpdir t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3242 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3243 ;; (Re)register a Mozilla resource URL to point to the |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3244 ;; temporary directory |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3245 (js--js-add-resource-alias "js" js-js-tmpdir) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3246 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3247 (setq temp-name (make-temp-file (concat js-js-tmpdir |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3248 "/js-") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3249 nil ".js")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3250 (unwind-protect |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3251 (with-js |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3252 (with-temp-buffer |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3253 (insert js--js-inserter) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3254 (insert "(") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3255 (insert (json-encode-list defun-info)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3256 (insert ",\n") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3257 (insert defun-body) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3258 (insert "\n)") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3259 (write-region (point-min) (point-max) temp-name |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3260 nil 1)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3261 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3262 ;; Give Mozilla responsibility for deleting this file |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3263 (let* ((content-window (js--js-content-window |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3264 (js--get-js-context))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3265 (content-document (js< content-window "document")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3266 (head (if (js? (js< content-document "body")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3267 ;; Regular content |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3268 (js< (js! (content-document "getElementsByTagName") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3269 "head") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3270 0) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3271 ;; Chrome |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3272 (js< content-document "documentElement"))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3273 (elem (js! (content-document "createElementNS") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3274 "http://www.w3.org/1999/xhtml" "script"))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3275 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3276 (js! (elem "setAttribute") "type" "text/javascript") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3277 (js! (elem "setAttribute") "src" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3278 (format "resource://js/%s" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3279 (file-name-nondirectory temp-name))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3280 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3281 (js! (head "appendChild") elem) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3282 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3283 (js! (content-window "addEventListener") "unload" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3284 (js! ((js-new |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3285 "Function" "file" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3286 "return function() { file.remove(false) }")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3287 (js--make-nsilocalfile temp-name)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3288 'false) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3289 (setq temp-name nil) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3290 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3291 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3292 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3293 )) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3294 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3295 ;; temp-name is set to nil on success |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3296 (when temp-name |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3297 (delete-file temp-name)))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3298 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3299 ;;; Main Function |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3300 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3301 ;;;###autoload |
109561
d7a517f1b312
Derive programming modes from prog-mode.
Juanma Barranquero <lekktu@gmail.com>
parents:
109258
diff
changeset
|
3302 (define-derived-mode js-mode prog-mode "js" |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
3303 "Major mode for editing JavaScript. |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3304 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3305 Key bindings: |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3306 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3307 \\{js-mode-map}" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3308 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3309 :group 'js |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3310 :syntax-table js-mode-syntax-table |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3311 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3312 (set (make-local-variable 'indent-line-function) 'js-indent-line) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3313 (set (make-local-variable 'beginning-of-defun-function) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
3314 'js-beginning-of-defun) |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3315 (set (make-local-variable 'end-of-defun-function) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
3316 'js-end-of-defun) |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3317 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3318 (set (make-local-variable 'open-paren-in-column-0-is-defun-start) nil) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3319 (set (make-local-variable 'font-lock-defaults) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3320 (list js--font-lock-keywords |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3321 nil nil nil nil |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3322 '(font-lock-syntactic-keywords |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
3323 . js-font-lock-syntactic-keywords))) |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3324 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3325 (set (make-local-variable 'parse-sexp-ignore-comments) t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3326 (set (make-local-variable 'parse-sexp-lookup-properties) t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3327 (set (make-local-variable 'which-func-imenu-joiner-function) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3328 #'js--which-func-joiner) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3329 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3330 ;; Comments |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3331 (setq comment-start "// ") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3332 (setq comment-end "") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3333 (set (make-local-variable 'fill-paragraph-function) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3334 'js-c-fill-paragraph) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3335 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3336 ;; Parse cache |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3337 (add-hook 'before-change-functions #'js--flush-caches t t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3338 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3339 ;; Frameworks |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3340 (js--update-quick-match-re) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3341 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3342 ;; Imenu |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3343 (setq imenu-case-fold-search nil) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3344 (set (make-local-variable 'imenu-create-index-function) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3345 #'js--imenu-create-index) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3346 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3347 (setq major-mode 'js-mode) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3348 (setq mode-name "Javascript") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3349 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3350 ;; for filling, pretend we're cc-mode |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3351 (setq c-comment-prefix-regexp "//+\\|\\**" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3352 c-paragraph-start "$" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3353 c-paragraph-separate "$" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3354 c-block-comment-prefix "* " |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3355 c-line-comment-starter "//" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3356 c-comment-start-regexp "/[*/]\\|\\s!" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3357 comment-start-skip "\\(//+\\|/\\*+\\)\\s *") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3358 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3359 (let ((c-buffer-is-cc-mode t)) |
108363
642b031fce0f
Make paragraph vars local for js-mode (Bug#6071).
Chong Yidong <cyd@stupidchicken.com>
parents:
107692
diff
changeset
|
3360 ;; FIXME: These are normally set by `c-basic-common-init'. Should |
642b031fce0f
Make paragraph vars local for js-mode (Bug#6071).
Chong Yidong <cyd@stupidchicken.com>
parents:
107692
diff
changeset
|
3361 ;; we call it instead? (Bug#6071) |
642b031fce0f
Make paragraph vars local for js-mode (Bug#6071).
Chong Yidong <cyd@stupidchicken.com>
parents:
107692
diff
changeset
|
3362 (make-local-variable 'paragraph-start) |
642b031fce0f
Make paragraph vars local for js-mode (Bug#6071).
Chong Yidong <cyd@stupidchicken.com>
parents:
107692
diff
changeset
|
3363 (make-local-variable 'paragraph-separate) |
642b031fce0f
Make paragraph vars local for js-mode (Bug#6071).
Chong Yidong <cyd@stupidchicken.com>
parents:
107692
diff
changeset
|
3364 (make-local-variable 'paragraph-ignore-fill-prefix) |
642b031fce0f
Make paragraph vars local for js-mode (Bug#6071).
Chong Yidong <cyd@stupidchicken.com>
parents:
107692
diff
changeset
|
3365 (make-local-variable 'adaptive-fill-mode) |
642b031fce0f
Make paragraph vars local for js-mode (Bug#6071).
Chong Yidong <cyd@stupidchicken.com>
parents:
107692
diff
changeset
|
3366 (make-local-variable 'adaptive-fill-regexp) |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3367 (c-setup-paragraph-variables)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3368 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3369 (set (make-local-variable 'syntax-begin-function) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3370 #'js--syntax-begin-function) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3371 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3372 ;; Important to fontify the whole buffer syntactically! If we don't, |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3373 ;; then we might have regular expression literals that aren't marked |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3374 ;; as strings, which will screw up parse-partial-sexp, scan-lists, |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3375 ;; etc. and and produce maddening "unbalanced parenthesis" errors. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3376 ;; When we attempt to find the error and scroll to the portion of |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3377 ;; the buffer containing the problem, JIT-lock will apply the |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3378 ;; correct syntax to the regular expresion literal and the problem |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3379 ;; will mysteriously disappear. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3380 (font-lock-set-defaults) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3381 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3382 (let (font-lock-keywords) ; leaves syntactic keywords intact |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3383 (font-lock-fontify-buffer))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3384 |
106794
c177971c1cec
* progmodes/js.el: Autoload javascript-mode alias.
Chong Yidong <cyd@stupidchicken.com>
parents:
106457
diff
changeset
|
3385 ;;;###autoload |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3386 (defalias 'javascript-mode 'js-mode) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3387 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3388 (eval-after-load 'folding |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3389 '(when (fboundp 'folding-add-to-marks-list) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3390 (folding-add-to-marks-list 'js-mode "// {{{" "// }}}" ))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3391 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3392 (provide 'js) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3393 |
104276 | 3394 ;; arch-tag: 1a0d0409-e87f-4fc7-a58c-3731c66ddaac |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3395 ;; js.el ends here |