Mercurial > emacs
annotate lisp/progmodes/js.el @ 107353:14a34dbaa721
Fix bug# in ChangeLog.
author | Kenichi Handa <handa@m17n.org> |
---|---|
date | Mon, 08 Mar 2010 20:39:36 +0900 |
parents | 1d1d5d9bd884 |
children | 831fbe6bd8c0 |
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 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
10 ;; Keywords: languages, oop, javascript |
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 |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
434 "Number of additional spaces used for indentation of continued expressions. |
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 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
439 (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
|
440 "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
|
441 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
|
442 :type 'boolean |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
443 :group 'js) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
444 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
445 (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
|
446 "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
|
447 :type 'function |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
448 :group 'js) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
449 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
450 (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
|
451 "Frameworks recognized by `js-mode'. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
452 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
|
453 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
|
454 :type (cons 'set (mapcar (lambda (x) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
455 (list 'const x)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
456 js--available-frameworks)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
457 :group 'js) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
458 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
459 (defcustom js-js-switch-tabs |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
460 (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
|
461 "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
|
462 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
|
463 for preventing Firefox from stealing the keyboard focus." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
464 :type 'boolean |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
465 :group 'js) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
466 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
467 (defcustom js-js-tmpdir |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
468 "~/.emacs.d/js/js" |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
469 "Temporary directory used by `js-mode' to communicate with Mozilla. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
470 This directory must be readable and writable by both Mozilla and |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
471 Emacs." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
472 :type 'directory |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
473 :group 'js) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
474 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
475 (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
|
476 "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
|
477 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
|
478 getting timeout messages." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
479 :type 'integer |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
480 :group 'js) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
481 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
482 ;;; KeyMap |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
483 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
484 (defvar js-mode-map |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
485 (let ((keymap (make-sparse-keymap))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
486 (define-key keymap [(control ?c) (meta ?:)] #'js-eval) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
487 (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
|
488 (define-key keymap [(control meta ?x)] #'js-eval-defun) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
489 (define-key keymap [(meta ?.)] #'js-find-symbol) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
490 (easy-menu-define nil keymap "Javascript Menu" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
491 '("Javascript" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
492 ["Select new Mozilla context…" js-set-js-context |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
493 (fboundp #'inferior-moz-process)] |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
494 ["Evaluate expression in Mozilla context…" js-eval |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
495 (fboundp #'inferior-moz-process)] |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
496 ["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
|
497 (fboundp #'inferior-moz-process)])) |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
498 keymap) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
499 "Keymap for `js-mode'.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
500 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
501 ;;; Syntax table and parsing |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
502 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
503 (defvar js-mode-syntax-table |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
504 (let ((table (make-syntax-table))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
505 (c-populate-syntax-table table) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
506 (modify-syntax-entry ?$ "_" table) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
507 table) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
508 "Syntax table for `js-mode'.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
509 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
510 (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
|
511 "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
|
512 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
513 (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
|
514 "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
|
515 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
516 (make-variable-buffer-local 'js--quick-match-re) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
517 (make-variable-buffer-local 'js--quick-match-re-func) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
518 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
519 (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
|
520 "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
|
521 (make-variable-buffer-local 'js--cache-end) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
522 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
523 (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
|
524 "Latest parse position reached by `js--ensure-cache'.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
525 (make-variable-buffer-local 'js--last-parse-pos) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
526 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
527 (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
|
528 "Parse state at `js--last-parse-pos'.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
529 (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
|
530 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
531 (defun js--flatten-list (list) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
532 (loop for item in list |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
533 nconc (cond ((consp item) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
534 (js--flatten-list item)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
535 (item (list item))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
536 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
537 (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
|
538 "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
|
539 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
|
540 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
|
541 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
|
542 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
|
543 element." |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
544 (setq list (js--flatten-list list)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
545 (when list |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
546 (concat prefix (mapconcat #'identity list separator) suffix))) |
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 (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
|
549 "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
|
550 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
|
551 enabled frameworks." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
552 (setq js--quick-match-re |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
553 (js--maybe-join |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
554 "^[ \t]*\\(?:" "\\|" "\\)" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
555 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
556 ;; #define mumble |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
557 "#define[ \t]+[a-zA-Z_]" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
558 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
559 (when (memq 'extjs js-enabled-frameworks) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
560 "Ext\\.extend") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
561 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
562 (when (memq 'prototype js-enabled-frameworks) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
563 "Object\\.extend") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
564 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
565 ;; var mumble = THING ( |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
566 (js--maybe-join |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
567 "\\(?:var[ \t]+\\)?[a-zA-Z_$0-9.]+[ \t]*=[ \t]*\\(?:" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
568 "\\|" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
569 "\\)[ \t]*\(" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
570 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
571 (when (memq 'prototype js-enabled-frameworks) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
572 "Class\\.create") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
573 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
574 (when (memq 'extjs js-enabled-frameworks) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
575 "Ext\\.extend") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
576 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
577 (when (memq 'merrillpress js-enabled-frameworks) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
578 "[a-zA-Z_$0-9]+\\.extend\\(?:Final\\)?")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
579 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
580 (when (memq 'dojo js-enabled-frameworks) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
581 "dojo\\.declare[ \t]*\(") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
582 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
583 (when (memq 'mochikit js-enabled-frameworks) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
584 "MochiKit\\.Base\\.update[ \t]*\(") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
585 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
586 ;; mumble.prototypeTHING |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
587 (js--maybe-join |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
588 "[a-zA-Z_$0-9.]+\\.prototype\\(?:" "\\|" "\\)" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
589 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
590 (when (memq 'javascript js-enabled-frameworks) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
591 '( ;; foo.prototype.bar = function( |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
592 "\\.[a-zA-Z_$0-9]+[ \t]*=[ \t]*function[ \t]*\(" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
593 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
594 ;; mumble.prototype = { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
595 "[ \t]*=[ \t]*{"))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
596 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
597 (setq js--quick-match-re-func |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
598 (concat "function\\|" js--quick-match-re))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
599 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
600 (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
|
601 "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
|
602 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
|
603 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
|
604 (let ((next-value (get-text-property (point) propname))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
605 (if next-value |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
606 (forward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
607 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
608 (goto-char (next-single-property-change |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
609 (point) propname nil (point-max))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
610 (unless (eobp) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
611 (setq next-value (get-text-property (point) propname)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
612 (forward-char))) |
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 next-value)) |
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 (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
|
617 "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
|
618 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
|
619 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
|
620 point at BOB." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
621 (unless (bobp) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
622 (let ((prev-value (get-text-property (1- (point)) propname))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
623 (if prev-value |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
624 (backward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
625 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
626 (goto-char (previous-single-property-change |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
627 (point) propname nil (point-min))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
628 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
629 (unless (bobp) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
630 (backward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
631 (setq prev-value (get-text-property (point) propname)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
632 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
633 prev-value))) |
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 (defsubst js--forward-pstate () |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
636 (js--forward-text-property 'js--pstate)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
637 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
638 (defsubst js--backward-pstate () |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
639 (js--backward-text-property 'js--pstate)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
640 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
641 (defun js--pitem-goto-h-end (pitem) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
642 (goto-char (js--pitem-h-begin pitem)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
643 (js--forward-pstate)) |
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--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
|
646 "Helper function for `js--re-search-forward'." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
647 (let ((parse) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
648 str-terminator |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
649 (orig-macro-end (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
650 (when (js--beginning-of-macro) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
651 (c-end-of-macro) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
652 (point))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
653 (while (> count 0) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
654 (re-search-forward regexp bound) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
655 (setq parse (syntax-ppss)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
656 (cond ((setq str-terminator (nth 3 parse)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
657 (when (eq str-terminator t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
658 (setq str-terminator ?/)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
659 (re-search-forward |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
660 (concat "\\([^\\]\\|^\\)" (string str-terminator)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
661 (save-excursion (end-of-line) (point)) t)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
662 ((nth 7 parse) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
663 (forward-line)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
664 ((or (nth 4 parse) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
665 (and (eq (char-before) ?\/) (eq (char-after) ?\*))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
666 (re-search-forward "\\*/")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
667 ((and (not (and orig-macro-end |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
668 (<= (point) orig-macro-end))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
669 (js--beginning-of-macro)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
670 (c-end-of-macro)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
671 (t |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
672 (setq count (1- count)))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
673 (point)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
674 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
675 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
676 (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
|
677 "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
|
678 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
|
679 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
|
680 |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
681 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
|
682 macro as normal text." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
683 (let ((saved-point (point)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
684 (search-expr |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
685 (cond ((null count) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
686 '(js--re-search-forward-inner regexp bound 1)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
687 ((< count 0) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
688 '(js--re-search-backward-inner regexp bound (- count))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
689 ((> count 0) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
690 '(js--re-search-forward-inner regexp bound count))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
691 (condition-case err |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
692 (eval search-expr) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
693 (search-failed |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
694 (goto-char saved-point) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
695 (unless noerror |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
696 (error (error-message-string err))))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
697 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
698 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
699 (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
|
700 "Auxiliary function for `js--re-search-backward'." |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
701 (let ((parse) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
702 str-terminator |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
703 (orig-macro-start |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
704 (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
705 (and (js--beginning-of-macro) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
706 (point))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
707 (while (> count 0) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
708 (re-search-backward regexp bound) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
709 (when (and (> (point) (point-min)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
710 (save-excursion (backward-char) (looking-at "/[/*]"))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
711 (forward-char)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
712 (setq parse (syntax-ppss)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
713 (cond ((setq str-terminator (nth 3 parse)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
714 (when (eq str-terminator t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
715 (setq str-terminator ?/)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
716 (re-search-backward |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
717 (concat "\\([^\\]\\|^\\)" (string str-terminator)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
718 (save-excursion (beginning-of-line) (point)) t)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
719 ((nth 7 parse) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
720 (goto-char (nth 8 parse))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
721 ((or (nth 4 parse) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
722 (and (eq (char-before) ?/) (eq (char-after) ?*))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
723 (re-search-backward "/\\*")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
724 ((and (not (and orig-macro-start |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
725 (>= (point) orig-macro-start))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
726 (js--beginning-of-macro))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
727 (t |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
728 (setq count (1- count)))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
729 (point)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
730 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
731 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
732 (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
|
733 "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
|
734 |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
735 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
|
736 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
|
737 removed. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
738 |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
739 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
|
740 (let ((saved-point (point)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
741 (search-expr |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
742 (cond ((null count) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
743 '(js--re-search-backward-inner regexp bound 1)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
744 ((< count 0) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
745 '(js--re-search-forward-inner regexp bound (- count))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
746 ((> count 0) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
747 '(js--re-search-backward-inner regexp bound count))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
748 (condition-case err |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
749 (eval search-expr) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
750 (search-failed |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
751 (goto-char saved-point) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
752 (unless noerror |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
753 (error (error-message-string err))))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
754 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
755 (defun js--forward-expression () |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
756 "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
|
757 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
|
758 lines." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
759 (loop |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
760 ;; non-continued case; simplistic, but good enough? |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
761 do (loop until (or (eolp) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
762 (progn |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
763 (forward-comment most-positive-fixnum) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
764 (memq (char-after) '(?\, ?\; ?\] ?\) ?\})))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
765 do (forward-sexp)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
766 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
767 while (and (eq (char-after) ?\n) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
768 (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
769 (forward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
770 (js--continued-expression-p))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
771 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
772 (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
|
773 "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
|
774 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
|
775 |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
776 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
|
777 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
|
778 determined. Otherwise, return nil." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
779 (assert (looking-at "\\_<function\\_>")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
780 (let ((name t)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
781 (forward-word) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
782 (forward-comment most-positive-fixnum) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
783 (when (looking-at js--name-re) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
784 (setq name (match-string-no-properties 0)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
785 (goto-char (match-end 0))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
786 (forward-comment most-positive-fixnum) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
787 (and (eq (char-after) ?\( ) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
788 (ignore-errors (forward-list) t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
789 (progn (forward-comment most-positive-fixnum) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
790 (and (eq (char-after) ?{) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
791 name))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
792 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
793 (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
|
794 "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
|
795 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
|
796 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
|
797 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
|
798 (let (prologue-begin) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
799 (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
800 (if pos |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
801 (goto-char pos) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
802 (setq pos (point))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
803 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
804 (when (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
805 (forward-line 0) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
806 (or (looking-at js--function-heading-2-re) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
807 (looking-at js--function-heading-3-re))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
808 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
809 (setq prologue-begin (match-beginning 1)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
810 (when (<= prologue-begin pos) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
811 (goto-char (match-end 0)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
812 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
813 (skip-syntax-backward "w_") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
814 (and (or (looking-at "\\_<function\\_>") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
815 (js--re-search-backward "\\_<function\\_>" nil t)) |
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 (save-match-data (goto-char (match-beginning 0)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
818 (js--forward-function-decl)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
819 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
820 (<= pos (point)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
821 (or prologue-begin (match-beginning 0)))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
822 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
823 (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
|
824 "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
|
825 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
|
826 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
|
827 anything." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
828 (js--ensure-cache) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
829 (let (pstate) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
830 (while (and (setq pstate (js--backward-pstate)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
831 (not (eq 'function (js--pitem-type (car pstate)))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
832 (and (not (bobp)) pstate))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
833 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
834 (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
|
835 "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
|
836 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
|
837 top-most pitem. Otherwise, return nil." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
838 (loop for pitem in pstate |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
839 with func-depth = 0 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
840 with func-pitem |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
841 if (eq 'function (js--pitem-type pitem)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
842 do (incf func-depth) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
843 and do (setq func-pitem pitem) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
844 finally return (if (eq func-depth 1) func-pitem))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
845 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
846 (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
|
847 "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
|
848 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
|
849 (or |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
850 ;; Look for the smallest function that encloses point... |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
851 (loop for pitem in (js--parse-state-at-point) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
852 if (and (eq 'function (js--pitem-type pitem)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
853 (js--inside-pitem-p pitem)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
854 do (goto-char (js--pitem-h-begin pitem)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
855 and return pitem) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
856 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
857 ;; ...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
|
858 ;; defun |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
859 (loop for pstate = (js--backward-pstate) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
860 while pstate |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
861 if (js--pstate-is-toplevel-defun pstate) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
862 do (goto-char (js--pitem-h-begin it)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
863 and return it))) |
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 (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
|
866 "Helper function for `js-beginning-of-defun'." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
867 (let ((pstate (js--beginning-of-defun-raw))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
868 (when pstate |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
869 (goto-char (js--pitem-h-begin (car pstate)))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
870 |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
871 (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
|
872 "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
|
873 (setq arg (or arg 1)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
874 (while (and (not (eobp)) (< arg 0)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
875 (incf arg) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
876 (when (and (not js-flat-functions) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
877 (or (eq (js-syntactic-context) 'function) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
878 (js--function-prologue-beginning))) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
879 (js-end-of-defun)) |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
880 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
881 (if (js--re-search-forward |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
882 "\\_<function\\_>" nil t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
883 (goto-char (js--function-prologue-beginning)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
884 (goto-char (point-max)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
885 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
886 (while (> arg 0) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
887 (decf arg) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
888 ;; 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
|
889 ;; to go to the beginning of *that* function |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
890 (when (eq (char-before) ?}) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
891 (backward-char)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
892 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
893 (let ((prologue-begin (js--function-prologue-beginning))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
894 (cond ((and prologue-begin (< prologue-begin (point))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
895 (goto-char prologue-begin)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
896 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
897 (js-flat-functions |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
898 (js--beginning-of-defun-flat)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
899 (t |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
900 (js--beginning-of-defun-nested)))))) |
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 (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
|
903 "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
|
904 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
|
905 (interactive) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
906 (setq beg (or beg (save-restriction (widen) (point-min)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
907 (setq js--cache-end (min js--cache-end beg))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
908 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
909 (defmacro js--debug (&rest arguments) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
910 ;; `(message ,@arguments) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
911 ) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
912 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
913 (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
|
914 (let ((top-item (car open-items))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
915 (when (<= paren-depth (js--pitem-paren-depth top-item)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
916 (assert (not (get-text-property (1- (point)) 'js-pend))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
917 (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
|
918 (setf (js--pitem-b-end top-item) (point)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
919 (setq open-items |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
920 ;; 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
|
921 ;; 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
|
922 ;; that assumption holds. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
923 (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
|
924 (cddr open-items))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
925 open-items) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
926 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
927 (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
|
928 "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
|
929 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
|
930 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
|
931 the body of `js--ensure-cache'." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
932 `(progn |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
933 (setq goal-point (point)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
934 (goto-char prev-parse-point) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
935 (while (progn |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
936 (setq open-items (js--ensure-cache--pop-if-ended |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
937 open-items (car parse))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
938 ;; 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
|
939 ;; 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
|
940 ;; depth. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
941 (assert (> (nth 0 parse) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
942 (js--pitem-paren-depth (car open-items)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
943 (setq parse (parse-partial-sexp |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
944 prev-parse-point goal-point |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
945 (js--pitem-paren-depth (car open-items)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
946 nil parse)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
947 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
948 ;; (let ((overlay (make-overlay prev-parse-point (point)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
949 ;; (overlay-put overlay 'face '(:background "red")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
950 ;; (unwind-protect |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
951 ;; (progn |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
952 ;; (js--debug "parsed: %S" parse) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
953 ;; (sit-for 1)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
954 ;; (delete-overlay overlay))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
955 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
956 (setq prev-parse-point (point)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
957 (< (point) goal-point))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
958 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
959 (setq open-items (js--ensure-cache--pop-if-ended |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
960 open-items (car parse))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
961 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
962 (defun js--show-cache-at-point () |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
963 (interactive) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
964 (require 'pp) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
965 (let ((prop (get-text-property (point) 'js--pstate))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
966 (with-output-to-temp-buffer "*Help*" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
967 (pp prop)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
968 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
969 (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
|
970 "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
|
971 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
|
972 \(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
|
973 (let ((name (save-match-data |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
974 (split-string string "\\." t)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
975 (unless (and (= (length name) 1) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
976 (equal (car name) "prototype")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
977 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
978 (setq name (remove "prototype" name))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
979 |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
980 (defvar js--guess-function-name-start nil) |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
981 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
982 (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
|
983 "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
|
984 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
|
985 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
|
986 guessed. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
987 |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
988 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
|
989 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
|
990 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
|
991 set that variable to nil." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
992 (setq js--guess-function-name-start nil) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
993 (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
994 (goto-char position) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
995 (forward-line 0) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
996 (cond |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
997 ((looking-at js--function-heading-3-re) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
998 (and (eq (match-end 0) position) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
999 (setq js--guess-function-name-start (match-beginning 1)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1000 (match-string-no-properties 1))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1001 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1002 ((looking-at js--function-heading-2-re) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1003 (and (eq (match-end 0) position) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1004 (setq js--guess-function-name-start (match-beginning 1)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1005 (match-string-no-properties 1)))))) |
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--clear-stale-cache () |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1008 ;; Clear any endings that occur after point |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1009 (let (end-prop) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1010 (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1011 (while (setq end-prop (js--forward-text-property |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1012 'js--pend)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1013 (setf (js--pitem-b-end end-prop) nil)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1014 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1015 ;; Remove any cache properties after this point |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1016 (remove-text-properties (point) (point-max) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1017 '(js--pstate t js--pend t))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1018 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1019 (defun js--ensure-cache (&optional limit) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1020 "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
|
1021 LIMIT defaults to point." |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1022 (setq limit (or limit (point))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1023 (when (< js--cache-end limit) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1024 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1025 (c-save-buffer-state |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1026 (open-items |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1027 orig-match-start |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1028 orig-match-end |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1029 orig-depth |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1030 parse |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1031 prev-parse-point |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1032 name |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1033 case-fold-search |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1034 filtered-class-styles |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1035 new-item |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1036 goal-point |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1037 end-prop) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1038 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1039 ;; 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
|
1040 (setq filtered-class-styles |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1041 (loop for style in js--class-styles |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1042 if (memq (plist-get style :framework) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1043 js-enabled-frameworks) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1044 collect style)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1045 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1046 (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1047 (save-restriction |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1048 (widen) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1049 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1050 ;; Find last known good position |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1051 (goto-char js--cache-end) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1052 (unless (bobp) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1053 (setq open-items (get-text-property |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1054 (1- (point)) 'js--pstate)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1055 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1056 (unless open-items |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1057 (goto-char (previous-single-property-change |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1058 (point) 'js--pstate nil (point-min))) |
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 (unless (bobp) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1061 (setq open-items (get-text-property (1- (point)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1062 'js--pstate)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1063 (assert open-items)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1064 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1065 (unless open-items |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1066 ;; Make a placeholder for the top-level definition |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1067 (setq open-items (list js--initial-pitem))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1068 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1069 (setq parse (syntax-ppss)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1070 (setq prev-parse-point (point)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1071 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1072 (js--clear-stale-cache) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1073 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1074 (narrow-to-region (point-min) limit) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1075 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1076 (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
|
1077 for orig-match-start = (goto-char (match-beginning 0)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1078 for orig-match-end = (match-end 0) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1079 do (js--ensure-cache--update-parse) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1080 for orig-depth = (nth 0 parse) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1081 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1082 ;; Each of these conditions should return non-nil if |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1083 ;; 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
|
1084 ;; 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
|
1085 ;; js--pitem diagram). This point is the one |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1086 ;; after the last character we need to unambiguously |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1087 ;; detect this construct. If one of these evaluates to |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1088 ;; nil, the location of the point is ignored. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1089 if (cond |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1090 ;; In comment or string |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1091 ((nth 8 parse) nil) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1092 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1093 ;; Regular function declaration |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1094 ((and (looking-at "\\_<function\\_>") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1095 (setq name (js--forward-function-decl))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1096 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1097 (when (eq name t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1098 (setq name (js--guess-function-name orig-match-end)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1099 (if name |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1100 (when js--guess-function-name-start |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1101 (setq orig-match-start |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1102 js--guess-function-name-start)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1103 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1104 (setq name t))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1105 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1106 (assert (eq (char-after) ?{)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1107 (forward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1108 (make-js--pitem |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1109 :paren-depth orig-depth |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1110 :h-begin orig-match-start |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1111 :type 'function |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1112 :name (if (eq name t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1113 name |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1114 (js--split-name name)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1115 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1116 ;; Macro |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1117 ((looking-at js--macro-decl-re) |
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 ;; Macros often contain unbalanced parentheses. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1120 ;; 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
|
1121 ;; the macro no matter what the parenthesis say. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1122 (c-end-of-macro) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1123 (js--ensure-cache--update-parse) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1124 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1125 (make-js--pitem |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1126 :paren-depth (nth 0 parse) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1127 :h-begin orig-match-start |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1128 :type 'macro |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1129 :name (list (match-string-no-properties 1)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1130 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1131 ;; "Prototype function" declaration |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1132 ((looking-at js--plain-method-re) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1133 (goto-char (match-beginning 3)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1134 (when (save-match-data |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1135 (js--forward-function-decl)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1136 (forward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1137 (make-js--pitem |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1138 :paren-depth orig-depth |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1139 :h-begin orig-match-start |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1140 :type 'function |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1141 :name (nconc (js--split-name |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1142 (match-string-no-properties 1)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1143 (list (match-string-no-properties 2)))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1144 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1145 ;; Class definition |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1146 ((loop with syntactic-context = |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1147 (js--syntactic-context-from-pstate open-items) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1148 for class-style in filtered-class-styles |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1149 if (and (memq syntactic-context |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1150 (plist-get class-style :contexts)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1151 (looking-at (plist-get class-style |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1152 :class-decl))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1153 do (goto-char (match-end 0)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1154 and return |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1155 (make-js--pitem |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1156 :paren-depth orig-depth |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1157 :h-begin orig-match-start |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1158 :type class-style |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1159 :name (js--split-name |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1160 (match-string-no-properties 1)))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1161 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1162 do (js--ensure-cache--update-parse) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1163 and do (push it open-items) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1164 and do (put-text-property |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1165 (1- (point)) (point) 'js--pstate open-items) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1166 else do (goto-char orig-match-end)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1167 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1168 (goto-char limit) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1169 (js--ensure-cache--update-parse) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1170 (setq js--cache-end limit) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1171 (setq js--last-parse-pos limit) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1172 (setq js--state-at-last-parse-pos open-items) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1173 ))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1174 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1175 (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
|
1176 "Helper function for `js-end-of-defun'." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1177 (loop while (js--re-search-forward "}" nil t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1178 do (js--ensure-cache) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1179 if (get-text-property (1- (point)) 'js--pend) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1180 if (eq 'function (js--pitem-type it)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1181 return t |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1182 finally do (goto-char (point-max)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1183 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1184 (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
|
1185 "Helper function for `js-end-of-defun'." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1186 (message "test") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1187 (let* (pitem |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1188 (this-end (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1189 (and (setq pitem (js--beginning-of-defun-nested)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1190 (js--pitem-goto-h-end pitem) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1191 (progn (backward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1192 (forward-list) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1193 (point))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1194 found) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1195 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1196 (if (and this-end (< (point) this-end)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1197 ;; 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
|
1198 (goto-char this-end) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1199 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1200 ;; Otherwise, go to the end of the next function... |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1201 (while (and (js--re-search-forward "\\_<function\\_>" nil t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1202 (not (setq found (progn |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1203 (goto-char (match-beginning 0)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1204 (js--forward-function-decl)))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1205 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1206 (if found (forward-list) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1207 ;; ... or eob. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1208 (goto-char (point-max)))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1209 |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1210 (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
|
1211 "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
|
1212 (setq arg (or arg 1)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1213 (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
|
1214 (incf arg) |
8a45209e673f
(js-end-of-defun): Remove malformed and unneeded let.
Glenn Morris <rgm@gnu.org>
parents:
104966
diff
changeset
|
1215 (js-beginning-of-defun) |
8a45209e673f
(js-end-of-defun): Remove malformed and unneeded let.
Glenn Morris <rgm@gnu.org>
parents:
104966
diff
changeset
|
1216 (js-beginning-of-defun) |
8a45209e673f
(js-end-of-defun): Remove malformed and unneeded let.
Glenn Morris <rgm@gnu.org>
parents:
104966
diff
changeset
|
1217 (unless (bobp) |
8a45209e673f
(js-end-of-defun): Remove malformed and unneeded let.
Glenn Morris <rgm@gnu.org>
parents:
104966
diff
changeset
|
1218 (js-end-of-defun))) |
104272
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 (while (> arg 0) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1221 (decf arg) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1222 ;; 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
|
1223 ;; 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
|
1224 ;; go there |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1225 (if js-flat-functions |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1226 (js--end-of-defun-flat) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1227 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1228 ;; 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
|
1229 ;; 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
|
1230 ;; 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
|
1231 (let ((prologue-begin (js--function-prologue-beginning))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1232 (cond ((and prologue-begin (<= prologue-begin (point))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1233 (goto-char prologue-begin) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1234 (re-search-forward "\\_<function") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1235 (goto-char (match-beginning 0)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1236 (js--forward-function-decl) |
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 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1239 (t (js--end-of-defun-nested))))))) |
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 (defun js--beginning-of-macro (&optional lim) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1242 (let ((here (point))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1243 (save-restriction |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1244 (if lim (narrow-to-region lim (point-max))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1245 (beginning-of-line) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1246 (while (eq (char-before (1- (point))) ?\\) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1247 (forward-line -1)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1248 (back-to-indentation) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1249 (if (and (<= (point) here) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1250 (looking-at js--opt-cpp-start)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1251 t |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1252 (goto-char here) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1253 nil)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1254 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1255 (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
|
1256 "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
|
1257 (save-restriction |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1258 (when lim (narrow-to-region lim (point-max))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1259 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1260 (let ((in-macro (save-excursion (js--beginning-of-macro))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1261 (pos (point))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1262 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1263 (while (progn (unless in-macro (js--beginning-of-macro)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1264 (forward-comment most-negative-fixnum) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1265 (/= (point) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1266 (prog1 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1267 pos |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1268 (setq pos (point))))))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1269 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1270 (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
|
1271 "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
|
1272 (save-restriction |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1273 (when lim (narrow-to-region (point-min) lim)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1274 (let ((pos (point))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1275 (while (progn |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1276 (forward-comment most-positive-fixnum) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1277 (when (eq (char-after) ?#) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1278 (c-end-of-macro)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1279 (/= (point) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1280 (prog1 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1281 pos |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1282 (setq pos (point))))))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1283 |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1284 ;; 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
|
1285 (defun js--up-nearby-list () |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1286 (save-restriction |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1287 ;; 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
|
1288 ;; explode in pathological cases. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1289 (narrow-to-region (max (point-min) (- (point) 500)) (point)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1290 (up-list -1))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1291 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1292 (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
|
1293 "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
|
1294 (ignore-errors |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1295 (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1296 (js--up-nearby-list) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1297 (and (looking-at "(") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1298 (progn (forward-symbol -1) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1299 (or (looking-at "function") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1300 (progn (forward-symbol -1) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1301 (looking-at "function")))))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1302 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1303 (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
|
1304 "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
|
1305 (ignore-errors |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1306 (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1307 (js--up-nearby-list) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1308 (let ((list-begin (point))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1309 (forward-line 0) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1310 (and (looking-at js--dojo-class-decl-re) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1311 (goto-char (match-end 0)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1312 (looking-at "\"\\s-*,\\s-*\\[") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1313 (eq (match-end 0) (1+ list-begin))))))) |
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--syntax-begin-function () |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1316 (when (< js--cache-end (point)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1317 (goto-char (max (point-min) js--cache-end))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1318 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1319 (let ((pitem)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1320 (while (and (setq pitem (car (js--backward-pstate))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1321 (not (eq 0 (js--pitem-paren-depth pitem))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1322 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1323 (when pitem |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1324 (goto-char (js--pitem-h-begin pitem ))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1325 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1326 ;;; Font Lock |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1327 (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
|
1328 "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
|
1329 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
|
1330 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
|
1331 (setq regexps (apply #'concat regexps)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1332 (byte-compile |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1333 `(lambda (limit) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1334 (when (memq (quote ,framework) js-enabled-frameworks) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1335 (re-search-forward ,regexps limit t))))) |
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 (defvar js--tmp-location nil) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1338 (make-variable-buffer-local 'js--tmp-location) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1339 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1340 (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
|
1341 "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
|
1342 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
|
1343 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
|
1344 spec. FUNC must preserve the match data." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1345 (case (char-after) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1346 (?\[ |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1347 (forward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1348 (while |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1349 (progn |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1350 (forward-comment most-positive-fixnum) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1351 (cond ((memq (char-after) '(?\[ ?\{)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1352 (js--forward-destructuring-spec func)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1353 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1354 ((eq (char-after) ?,) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1355 (forward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1356 t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1357 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1358 ((looking-at js--name-re) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1359 (and func (funcall func)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1360 (goto-char (match-end 0)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1361 t)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1362 (when (eq (char-after) ?\]) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1363 (forward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1364 t)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1365 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1366 (?\{ |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1367 (forward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1368 (forward-comment most-positive-fixnum) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1369 (while |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1370 (when (looking-at js--objfield-re) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1371 (goto-char (match-end 0)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1372 (forward-comment most-positive-fixnum) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1373 (and (cond ((memq (char-after) '(?\[ ?\{)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1374 (js--forward-destructuring-spec func)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1375 ((looking-at js--name-re) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1376 (and func (funcall func)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1377 (goto-char (match-end 0)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1378 t)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1379 (progn (forward-comment most-positive-fixnum) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1380 (when (eq (char-after) ?\,) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1381 (forward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1382 (forward-comment most-positive-fixnum) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1383 t))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1384 (when (eq (char-after) ?\}) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1385 (forward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1386 t)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1387 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1388 (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
|
1389 "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
|
1390 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
|
1391 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
|
1392 `font-lock-apply-highlight'." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1393 (condition-case nil |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1394 (save-restriction |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1395 (narrow-to-region (point-min) limit) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1396 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1397 (let ((first t)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1398 (forward-comment most-positive-fixnum) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1399 (while |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1400 (and (or first |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1401 (when (eq (char-after) ?,) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1402 (forward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1403 (forward-comment most-positive-fixnum) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1404 t)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1405 (cond ((looking-at js--name-re) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1406 (font-lock-apply-highlight |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1407 '(0 font-lock-variable-name-face)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1408 (goto-char (match-end 0))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1409 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1410 ((save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1411 (js--forward-destructuring-spec)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1412 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1413 (js--forward-destructuring-spec |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1414 (lambda () |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1415 (font-lock-apply-highlight |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1416 '(0 font-lock-variable-name-face))))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1417 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1418 (forward-comment most-positive-fixnum) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1419 (when (eq (char-after) ?=) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1420 (forward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1421 (js--forward-expression) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1422 (forward-comment most-positive-fixnum)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1423 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1424 (setq first nil)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1425 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1426 ;; Conditions to handle |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1427 (scan-error nil) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1428 (end-of-buffer nil)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1429 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1430 ;; Matcher always "fails" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1431 nil) |
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 (defconst js--font-lock-keywords-3 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1434 `( |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1435 ;; 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
|
1436 ;; 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
|
1437 ;; because that will override syntactic fontification too, which |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1438 ;; 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
|
1439 ;; commented out. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1440 ,@cpp-font-lock-keywords ; from font-lock.el |
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 ,@js--font-lock-keywords-2 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1443 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1444 ("\\.\\(prototype\\)\\_>" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1445 (1 font-lock-constant-face)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1446 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1447 ;; Highlights class being declared, in parts |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1448 (js--class-decl-matcher |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1449 ,(concat "\\(" js--name-re "\\)\\(?:\\.\\|.*$\\)") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1450 (goto-char (match-beginning 1)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1451 nil |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1452 (1 font-lock-type-face)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1453 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1454 ;; Highlights parent class, in parts, if available |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1455 (js--class-decl-matcher |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1456 ,(concat "\\(" js--name-re "\\)\\(?:\\.\\|.*$\\)") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1457 (if (match-beginning 2) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1458 (progn |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1459 (setq js--tmp-location (match-end 2)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1460 (goto-char js--tmp-location) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1461 (insert "=") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1462 (goto-char (match-beginning 2))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1463 (setq js--tmp-location nil) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1464 (goto-char (point-at-eol))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1465 (when js--tmp-location |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1466 (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1467 (goto-char js--tmp-location) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1468 (delete-char 1))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1469 (1 font-lock-type-face)) |
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 ;; Highlights parent class |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1472 (js--class-decl-matcher |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1473 (2 font-lock-type-face nil t)) |
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 ;; 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
|
1476 (,(js--make-framework-matcher |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1477 'dojo |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1478 "^\\s-*dojo\\.declare\\s-*(\"" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1479 "\\(" js--dotted-name-re "\\)" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1480 "\\(?:\"\\s-*,\\s-*\\(" js--dotted-name-re "\\)\\)?") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1481 (1 font-lock-type-face t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1482 (2 font-lock-type-face nil t)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1483 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1484 ;; 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
|
1485 ;; from everything else under the sun... |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1486 (,(js--make-framework-matcher |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1487 'dojo |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1488 "^\\s-*dojo\\.declare\\s-*(\"" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1489 "\\(" js--dotted-name-re "\\)\"\\s-*,\\s-*\\[") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1490 ,(concat "[[,]\\s-*\\(" js--dotted-name-re "\\)\\s-*" |
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 (backward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1493 (end-of-line) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1494 (1 font-lock-type-face)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1495 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1496 ;; continued Dojo base-class list |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1497 (,(js--make-framework-matcher |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1498 'dojo |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1499 "^\\s-*" js--dotted-name-re "\\s-*[],]") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1500 ,(concat "\\(" js--dotted-name-re "\\)" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1501 "\\s-*\\(?:\\].*$\\)?") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1502 (if (save-excursion (backward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1503 (js--inside-dojo-class-list-p)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1504 (forward-symbol -1) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1505 (end-of-line)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1506 (end-of-line) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1507 (1 font-lock-type-face)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1508 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1509 ;; variable declarations |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1510 ,(list |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1511 (concat "\\_<\\(const\\|var\\|let\\)\\_>\\|" js--basic-type-re) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1512 (list #'js--variable-decl-matcher nil nil nil)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1513 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1514 ;; class instantiation |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1515 ,(list |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1516 (concat "\\_<new\\_>\\s-+\\(" js--dotted-name-re "\\)") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1517 (list 1 'font-lock-type-face)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1518 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1519 ;; instanceof |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1520 ,(list |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1521 (concat "\\_<instanceof\\_>\\s-+\\(" js--dotted-name-re "\\)") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1522 (list 1 'font-lock-type-face)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1523 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1524 ;; formal parameters |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1525 ,(list |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1526 (concat |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1527 "\\_<function\\_>\\(\\s-+" js--name-re "\\)?\\s-*(\\s-*" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1528 js--name-start-re) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1529 (list (concat "\\(" js--name-re "\\)\\(\\s-*).*\\)?") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1530 '(backward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1531 '(end-of-line) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1532 '(1 font-lock-variable-name-face))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1533 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1534 ;; continued formal parameter list |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1535 ,(list |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1536 (concat |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1537 "^\\s-*" js--name-re "\\s-*[,)]") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1538 (list js--name-re |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1539 '(if (save-excursion (backward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1540 (js--inside-param-list-p)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1541 (forward-symbol -1) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1542 (end-of-line)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1543 '(end-of-line) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1544 '(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
|
1545 "Level three font lock for `js-mode'.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1546 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1547 (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
|
1548 "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
|
1549 (js--ensure-cache) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1550 (assert (js--pitem-h-begin pitem)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1551 (assert (js--pitem-paren-depth pitem)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1552 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1553 (and (> (point) (js--pitem-h-begin pitem)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1554 (or (null (js--pitem-b-end pitem)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1555 (> (js--pitem-b-end pitem) (point))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1556 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1557 (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
|
1558 "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
|
1559 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
|
1560 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
|
1561 will be returned." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1562 (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1563 (save-restriction |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1564 (widen) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1565 (js--ensure-cache) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1566 (let* ((bound (if (eobp) (point) (1+ (point)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1567 (pstate (or (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1568 (js--backward-pstate)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1569 (list js--initial-pitem)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1570 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1571 ;; 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
|
1572 ;; point (or at point if we're at eob) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1573 (loop for pitem = (car pstate) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1574 until (or (eq (js--pitem-type pitem) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1575 'toplevel) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1576 (js--inside-pitem-p pitem)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1577 do (pop pstate)) |
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 pstate)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1580 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1581 (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
|
1582 "Return the JavaScript syntactic context corresponding to PSTATE." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1583 (let ((type (js--pitem-type (car pstate)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1584 (cond ((memq type '(function macro)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1585 type) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1586 ((consp type) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1587 'class) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1588 (t 'toplevel)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1589 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1590 (defun js-syntactic-context () |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1591 "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
|
1592 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
|
1593 context." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1594 (interactive) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1595 (let* ((syntactic-context (js--syntactic-context-from-pstate |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1596 (js--parse-state-at-point)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1597 |
105372
bd2966850aac
Use `called-interactively-p' instead of `interactive-p'.
Juanma Barranquero <lekktu@gmail.com>
parents:
105076
diff
changeset
|
1598 (when (called-interactively-p 'interactive) |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1599 (message "Syntactic context: %s" syntactic-context)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1600 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1601 syntactic-context)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1602 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1603 (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
|
1604 "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
|
1605 This performs fontification according to `js--class-styles'." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1606 (loop initially (js--ensure-cache limit) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1607 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
|
1608 for orig-end = (match-end 0) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1609 do (goto-char (match-beginning 0)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1610 if (loop for style in js--class-styles |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1611 for decl-re = (plist-get style :class-decl) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1612 if (and (memq (plist-get style :framework) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1613 js-enabled-frameworks) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1614 (memq (js-syntactic-context) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1615 (plist-get style :contexts)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1616 decl-re |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1617 (looking-at decl-re)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1618 do (goto-char (match-end 0)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1619 and return t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1620 return t |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1621 else do (goto-char orig-end))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1622 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1623 (defconst js--font-lock-keywords |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1624 '(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
|
1625 js--font-lock-keywords-2 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1626 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
|
1627 "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
|
1628 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1629 ;; 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
|
1630 ;; 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
|
1631 ;; below. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1632 (defconst js--regexp-literal |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1633 "[=(,:]\\(?:\\s-\\|\n\\)*\\(/\\)\\(?:\\\\/\\|[^/*]\\)\\(?:\\\\/\\|[^/]\\)*\\(/\\)" |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1634 "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
|
1635 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
|
1636 end of the literal.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1637 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1638 ;; 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
|
1639 ;; expressions |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1640 (defconst js-font-lock-syntactic-keywords |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1641 `((,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
|
1642 "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
|
1643 See `font-lock-keywords'.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1644 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1645 ;;; Indentation |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1646 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1647 (defconst js--possibly-braceless-keyword-re |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1648 (js--regexp-opt-symbol |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1649 '("catch" "do" "else" "finally" "for" "if" "try" "while" "with" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1650 "each")) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1651 "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
|
1652 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1653 (defconst js--indent-operator-re |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1654 (concat "[-+*/%<>=&^|?:.]\\([^-+*/]\\|$\\)\\|" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1655 (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
|
1656 "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
|
1657 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1658 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1659 (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
|
1660 "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
|
1661 (save-match-data |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1662 (and (looking-at js--indent-operator-re) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1663 (or (not (looking-at ":")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1664 (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1665 (and (js--re-search-backward "[?:{]\\|\\_<case\\_>" nil t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1666 (looking-at "?"))))))) |
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 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1669 (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
|
1670 "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
|
1671 (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1672 (back-to-indentation) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1673 (or (js--looking-at-operator-p) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1674 (and (js--re-search-backward "\n" nil t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1675 (progn |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1676 (skip-chars-backward " \t") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1677 (or (bobp) (backward-char)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1678 (and (> (point) (point-min)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1679 (save-excursion (backward-char) (not (looking-at "[/*]/"))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1680 (js--looking-at-operator-p) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1681 (and (progn (backward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1682 (not (looking-at "++\\|--\\|/[/*]")))))))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1683 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1684 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1685 (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
|
1686 "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
|
1687 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
|
1688 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
|
1689 the same column as the current line." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1690 (interactive) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1691 (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1692 (save-match-data |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1693 (when (looking-at "\\s-*\\_<while\\_>") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1694 (if (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1695 (skip-chars-backward "[ \t\n]*}") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1696 (looking-at "[ \t\n]*}")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1697 (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1698 (backward-list) (forward-symbol -1) (looking-at "\\_<do\\_>")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1699 (js--re-search-backward "\\_<do\\_>" (point-at-bol) t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1700 (or (looking-at "\\_<do\\_>") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1701 (let ((saved-indent (current-indentation))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1702 (while (and (js--re-search-backward "^\\s-*\\_<" nil t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1703 (/= (current-indentation) saved-indent))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1704 (and (looking-at "\\s-*\\_<do\\_>") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1705 (not (js--re-search-forward |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1706 "\\_<while\\_>" (point-at-eol) t)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1707 (= (current-indentation) saved-indent))))))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1708 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1709 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1710 (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
|
1711 "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
|
1712 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
|
1713 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
|
1714 nil." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1715 (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1716 (back-to-indentation) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1717 (when (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1718 (and (not (eq (point-at-bol) (point-min))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1719 (not (looking-at "[{]")) |
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 (js--re-search-backward "[[:graph:]]" nil t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1722 (or (eobp) (forward-char)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1723 (when (= (char-before) ?\)) (backward-list)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1724 (skip-syntax-backward " ") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1725 (skip-syntax-backward "w_") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1726 (looking-at js--possibly-braceless-keyword-re)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1727 (not (js--end-of-do-while-loop-p)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1728 (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1729 (goto-char (match-beginning 0)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1730 (+ (current-indentation) js-indent-level))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1731 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1732 (defun js--get-c-offset (symbol anchor) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1733 (let ((c-offsets-alist |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1734 (list (cons 'c js-comment-lineup-func)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1735 (c-get-syntactic-indentation (list (cons symbol anchor))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1736 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1737 (defun js--proper-indentation (parse-status) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1738 "Return the proper indentation for the current line." |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1739 (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1740 (back-to-indentation) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1741 (cond ((nth 4 parse-status) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1742 (js--get-c-offset 'c (nth 8 parse-status))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1743 ((nth 8 parse-status) 0) ; inside string |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1744 ((js--ctrl-statement-indentation)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1745 ((eq (char-after) ?#) 0) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1746 ((save-excursion (js--beginning-of-macro)) 4) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1747 ((nth 1 parse-status) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1748 (let ((same-indent-p (looking-at |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1749 "[]})]\\|\\_<case\\_>\\|\\_<default\\_>")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1750 (continued-expr-p (js--continued-expression-p))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1751 (goto-char (nth 1 parse-status)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1752 (if (looking-at "[({[]\\s-*\\(/[/*]\\|$\\)") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1753 (progn |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1754 (skip-syntax-backward " ") |
104966
754f505b6d27
* progmodes/js.el (js--proper-indentation): Handle the case where
Chong Yidong <cyd@stupidchicken.com>
parents:
104683
diff
changeset
|
1755 (when (eq (char-before) ?\)) (backward-list)) |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1756 (back-to-indentation) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1757 (cond (same-indent-p |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1758 (current-column)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1759 (continued-expr-p |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1760 (+ (current-column) (* 2 js-indent-level) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1761 js-expr-indent-offset)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1762 (t |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1763 (+ (current-column) js-indent-level)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1764 (unless same-indent-p |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1765 (forward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1766 (skip-chars-forward " \t")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1767 (current-column)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1768 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1769 ((js--continued-expression-p) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1770 (+ js-indent-level js-expr-indent-offset)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1771 (t 0)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1772 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1773 (defun js-indent-line () |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1774 "Indent the current line as JavaScript." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1775 (interactive) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1776 (save-restriction |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1777 (widen) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1778 (let* ((parse-status |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1779 (save-excursion (syntax-ppss (point-at-bol)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1780 (offset (- (current-column) (current-indentation)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1781 (indent-line-to (js--proper-indentation parse-status)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1782 (when (> offset 0) (forward-char offset))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1783 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1784 ;;; Filling |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1785 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1786 (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
|
1787 "Fill the paragraph with `c-fill-paragraph'." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1788 (interactive "*P") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1789 (flet ((c-forward-sws |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1790 (&optional limit) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1791 (js--forward-syntactic-ws limit)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1792 (c-backward-sws |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1793 (&optional limit) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1794 (js--backward-syntactic-ws limit)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1795 (c-beginning-of-macro |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1796 (&optional limit) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1797 (js--beginning-of-macro limit))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1798 (let ((fill-paragraph-function 'c-fill-paragraph)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1799 (c-fill-paragraph justify)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1800 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1801 ;;; Type database and Imenu |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1802 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1803 ;; 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
|
1804 ;; 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
|
1805 ;; 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
|
1806 ;; 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
|
1807 ;; 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
|
1808 ;; parse state, the empty state. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1809 ;; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1810 ;; 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
|
1811 ;; 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
|
1812 ;; closed, that is initially js--initial-pitem. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1813 ;; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1814 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1815 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1816 (defun js--pitem-format (pitem) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1817 (let ((name (js--pitem-name pitem)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1818 (type (js--pitem-type pitem))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1819 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1820 (format "name:%S type:%S" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1821 name |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1822 (if (atom type) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1823 type |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1824 (plist-get type :name))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1825 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1826 (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
|
1827 "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
|
1828 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
|
1829 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
|
1830 that we haven't consumed yet." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1831 (js--debug "js--make-merged-item: {%s} into {%s}" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1832 (js--pitem-format child) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1833 (js--pitem-format item)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1834 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1835 ;; 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
|
1836 (unless (consp (js--pitem-type item)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1837 (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
|
1838 (setq item (make-js--pitem |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1839 :children (list item) |
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 ;; 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
|
1842 :type (if (atom (js--pitem-type child)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1843 js--dummy-class-style |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1844 (js--pitem-type child)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1845 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1846 :name (js--pitem-strname item)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1847 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1848 ;; 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
|
1849 (cons (cond |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1850 ((cdr name-parts) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1851 (js--debug "js--make-merged-item: recursing") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1852 ;; 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
|
1853 ;; bottom of the class hierarchy, call the merger |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1854 ;; recursively |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1855 (js--splice-into-items (car item) child |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1856 (cdr name-parts))) |
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 ((atom (js--pitem-type child)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1859 (js--debug "js--make-merged-item: straight merge") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1860 ;; 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
|
1861 ;; it |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1862 (cons child (car item))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1863 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1864 (t |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1865 ;; Otherwise, merge the new child's items into those |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1866 ;; of the new class |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1867 (js--debug "js--make-merged-item: merging class contents") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1868 (append (car child) (car item)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1869 (cdr item))) |
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-strname (pitem) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
1872 "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
|
1873 (let ((name (js--pitem-name pitem))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1874 (if (consp name) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1875 (car (last name)) |
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 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1878 (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
|
1879 "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
|
1880 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
|
1881 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
|
1882 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
|
1883 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1884 (let ((top-name (car name-parts)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1885 (item-ptr items) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1886 new-items last-new-item new-cons item) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1887 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1888 (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
|
1889 name-parts |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1890 (mapcar #'js--pitem-name items)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1891 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1892 (assert (stringp top-name)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1893 (assert (> (length top-name) 0)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1894 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1895 ;; 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
|
1896 ;; 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
|
1897 ;; *will* find an instance. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1898 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1899 (while (and item-ptr |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1900 (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
|
1901 ;; 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
|
1902 ;; the merged item into the list... |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1903 (setq new-cons (cons (js--make-merged-item |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1904 (car item-ptr) child |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1905 name-parts) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1906 (cdr item-ptr))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1907 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1908 (if last-new-item |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1909 (setcdr last-new-item new-cons) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1910 (setq new-items new-cons)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1911 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1912 ;; ...and terminate the loop |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1913 nil) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1914 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1915 (t |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1916 ;; Otherwise, copy the current cons and move onto the |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1917 ;; 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
|
1918 ;; the list that begins with new-items in |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1919 ;; last-new-item. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1920 (setq new-cons (cons (car item-ptr) nil)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1921 (if last-new-item |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1922 (setcdr last-new-item new-cons) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1923 (setq new-items new-cons)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1924 (setq last-new-item new-cons) |
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 ;; Go to the next cell in items |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1927 (setq item-ptr (cdr item-ptr)))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1928 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1929 (if item-ptr |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1930 ;; Yay! We stopped because we found something, not because |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1931 ;; 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
|
1932 ;; list. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1933 (progn |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1934 (js--debug "search succeeded: %S" name-parts) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1935 new-items) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1936 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1937 ;; 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
|
1938 ;; 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
|
1939 ;; otherwise, make a fake class and carry on. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1940 (js--debug "search failed: %S" name-parts) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1941 (cons (if (cdr name-parts) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1942 ;; 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
|
1943 ;; class for this particular part... |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1944 (make-js--pitem |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1945 ;; ...and recursively digest the rest of the name |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1946 :children (js--splice-into-items |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1947 nil child (cdr name-parts)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1948 :type js--dummy-class-style |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1949 :name top-name) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1950 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1951 ;; 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
|
1952 ;; the item on the front of the list |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1953 child) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1954 items)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1955 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1956 (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
|
1957 "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
|
1958 (assert (integerp (js--pitem-h-begin child))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1959 (assert (if (consp (js--pitem-name child)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1960 (loop for part in (js--pitem-name child) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1961 always (stringp part)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1962 t)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1963 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1964 ;; 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
|
1965 ;; 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
|
1966 ;; 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
|
1967 (cons |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1968 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1969 (let ((name (js--pitem-name child)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1970 (type (js--pitem-type child))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1971 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1972 (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
|
1973 ;; Use slow path because we need class lookup |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1974 (js--splice-into-items (car pitem) child name)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1975 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1976 ((and (consp type) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1977 (plist-get type :prototype)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1978 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1979 ;; 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
|
1980 ;; name is a list here because down in |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1981 ;; `js--ensure-cache', we made sure to only add |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1982 ;; class entries with lists for :name |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1983 (assert (consp name)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1984 (js--splice-into-items (car pitem) child name)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1985 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1986 (t |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1987 ;; Fast path |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1988 (cons child (car pitem))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1989 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1990 (cdr pitem))) |
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 (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
|
1993 "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
|
1994 (if imenu-use-markers |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1995 (set-marker (make-marker) location) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1996 location)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1997 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1998 (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
|
1999 "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
|
2000 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2001 (let (imenu-items pitem pitem-type pitem-name subitems) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2002 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2003 (while (setq pitem (pop pitems)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2004 (setq pitem-type (js--pitem-type pitem)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2005 (setq pitem-name (js--pitem-strname pitem)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2006 (when (eq pitem-name t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2007 (setq pitem-name (format "[unknown %s]" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2008 (incf (car unknown-ctr))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2009 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2010 (cond |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2011 ((memq pitem-type '(function macro)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2012 (assert (integerp (js--pitem-h-begin pitem))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2013 (push (cons pitem-name |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2014 (js--maybe-make-marker |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2015 (js--pitem-h-begin pitem))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2016 imenu-items)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2017 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2018 ((consp pitem-type) ; class definition |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2019 (setq subitems (js--pitems-to-imenu |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2020 (js--pitem-children pitem) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2021 unknown-ctr)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2022 (cond (subitems |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2023 (push (cons pitem-name subitems) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2024 imenu-items)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2025 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2026 ((js--pitem-h-begin pitem) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2027 (assert (integerp (js--pitem-h-begin pitem))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2028 (setq subitems (list |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2029 (cons "[empty]" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2030 (js--maybe-make-marker |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2031 (js--pitem-h-begin pitem))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2032 (push (cons pitem-name subitems) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2033 imenu-items)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2034 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2035 (t (error "Unknown item type: %S" pitem-type)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2036 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2037 imenu-items)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2038 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2039 (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
|
2040 "Return an imenu index for the current buffer." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2041 (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2042 (save-restriction |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2043 (widen) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2044 (goto-char (point-max)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2045 (js--ensure-cache) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2046 (assert (or (= (point-min) (point-max)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2047 (eq js--last-parse-pos (point)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2048 (when js--last-parse-pos |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2049 (let ((state js--state-at-last-parse-pos) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2050 (unknown-ctr (cons -1 nil))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2051 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2052 ;; Make sure everything is closed |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2053 (while (cdr state) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2054 (setq state |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2055 (cons (js--pitem-add-child (second state) (car state)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2056 (cddr state)))) |
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 (assert (= (length state) 1)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2059 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2060 ;; Convert the new-finalized state into what imenu expects |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2061 (js--pitems-to-imenu |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2062 (car (js--pitem-children state)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2063 unknown-ctr)))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2064 |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2065 ;; Silence the compiler. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2066 (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
|
2067 |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2068 (defun js--which-func-joiner (parts) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2069 (mapconcat #'identity parts ".")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2070 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2071 (defun js--imenu-to-flat (items prefix symbols) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2072 (loop for item in items |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2073 if (imenu--subalist-p item) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2074 do (js--imenu-to-flat |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2075 (cdr item) (concat prefix (car item) ".") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2076 symbols) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2077 else |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2078 do (let* ((name (concat prefix (car item))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2079 (name2 name) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2080 (ctr 0)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2081 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2082 (while (gethash name2 symbols) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2083 (setq name2 (format "%s<%d>" name (incf ctr)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2084 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2085 (puthash name2 (cdr item) symbols)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2086 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2087 (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
|
2088 "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
|
2089 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
|
2090 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
|
2091 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
|
2092 (loop with symbols = (make-hash-table :test 'equal) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2093 with imenu-use-markers = t |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2094 for buffer being the buffers |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2095 for imenu-index = (with-current-buffer buffer |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2096 (when (eq major-mode 'js-mode) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2097 (js--imenu-create-index))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2098 do (js--imenu-to-flat imenu-index "" symbols) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2099 finally return symbols)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2100 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2101 (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
|
2102 "History of entered JavaScript symbols.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2103 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2104 (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
|
2105 "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
|
2106 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
|
2107 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
|
2108 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
|
2109 . 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
|
2110 marker." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2111 (unless ido-mode |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2112 (ido-mode t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2113 (ido-mode nil)) |
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 (let ((choice (ido-completing-read |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2116 prompt |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2117 (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
|
2118 collect key) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2119 nil t initial-input 'js--symbol-history))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2120 (cons choice (gethash choice symbols-table)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2121 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2122 (defun js--guess-symbol-at-point () |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2123 (let ((bounds (bounds-of-thing-at-point 'symbol))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2124 (when bounds |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2125 (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2126 (goto-char (car bounds)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2127 (when (eq (char-before) ?.) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2128 (backward-char) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2129 (setf (car bounds) (point)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2130 (buffer-substring (car bounds) (cdr bounds))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2131 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2132 (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
|
2133 "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
|
2134 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
|
2135 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
|
2136 `find-tag'." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2137 (interactive "P") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2138 (let (symbols marker) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2139 (if (not arg) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2140 (setq symbols (js--get-all-known-symbols)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2141 (setq symbols (make-hash-table :test 'equal)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2142 (js--imenu-to-flat (js--imenu-create-index) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2143 "" symbols)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2144 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2145 (setq marker (cdr (js--read-symbol |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2146 symbols "Jump to: " |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2147 (js--guess-symbol-at-point)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2148 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2149 (ring-insert find-tag-marker-ring (point-marker)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2150 (switch-to-buffer (marker-buffer marker)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2151 (push-mark) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2152 (goto-char marker))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2153 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2154 ;;; MozRepl integration |
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 (put 'js-moz-bad-rpc 'error-conditions '(error timeout)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2157 (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
|
2158 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2159 (put 'js-js-error 'error-conditions '(error js-error)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2160 (put 'js-js-error 'error-message "Javascript Error") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2161 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2162 (defun js--wait-for-matching-output |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2163 (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
|
2164 "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
|
2165 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
|
2166 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
|
2167 Otherwise, use the current value of `process-mark'." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2168 (with-current-buffer (process-buffer process) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2169 (loop with start-pos = (or start |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2170 (marker-position (process-mark process))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2171 with end-time = (+ (float-time) timeout) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2172 for time-left = (- end-time (float-time)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2173 do (goto-char (point-max)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2174 if (looking-back regexp start-pos) return t |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2175 while (> time-left 0) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2176 do (accept-process-output process time-left nil t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2177 do (goto-char (process-mark process)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2178 finally do (signal |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2179 'js-moz-bad-rpc |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2180 (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
|
2181 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2182 (defstruct js--js-handle |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2183 ;; Integer, mirrors the value we see in JS |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2184 (id nil :read-only t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2185 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2186 ;; Process to which this thing belongs |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2187 (process nil :read-only t)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2188 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2189 (defun js--js-handle-expired-p (x) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2190 (not (eq (js--js-handle-process x) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2191 (inferior-moz-process)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2192 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2193 (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
|
2194 "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
|
2195 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2196 (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
|
2197 "The most recent MozRepl process object.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2198 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2199 (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
|
2200 "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
|
2201 |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2202 (defvar js--js-last-gcs-done nil) |
104272
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 (defconst js--moz-interactor |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2205 (replace-regexp-in-string |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2206 "[ \n]+" " " |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2207 ; */" Make Emacs happy |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2208 "(function(repl) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2209 repl.defineInteractor('js', { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2210 onStart: function onStart(repl) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2211 if(!repl._jsObjects) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2212 repl._jsObjects = {}; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2213 repl._jsLastID = 0; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2214 repl._jsGC = this._jsGC; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2215 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2216 this._input = ''; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2217 }, |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2218 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2219 _jsGC: function _jsGC(ids_in_use) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2220 var objects = this._jsObjects; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2221 var keys = []; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2222 var num_freed = 0; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2223 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2224 for(var pn in objects) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2225 keys.push(Number(pn)); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2226 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2227 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2228 keys.sort(function(x, y) x - y); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2229 ids_in_use.sort(function(x, y) x - y); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2230 var i = 0; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2231 var j = 0; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2232 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2233 while(i < ids_in_use.length && j < keys.length) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2234 var id = ids_in_use[i++]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2235 while(j < keys.length && keys[j] !== id) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2236 var k_id = keys[j++]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2237 delete objects[k_id]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2238 ++num_freed; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2239 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2240 ++j; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2241 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2242 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2243 while(j < keys.length) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2244 var k_id = keys[j++]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2245 delete objects[k_id]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2246 ++num_freed; |
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 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2249 return num_freed; |
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 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2252 _mkArray: function _mkArray() { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2253 var result = []; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2254 for(var i = 0; i < arguments.length; ++i) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2255 result.push(arguments[i]); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2256 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2257 return result; |
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 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2260 _parsePropDescriptor: function _parsePropDescriptor(parts) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2261 if(typeof parts === 'string') { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2262 parts = [ parts ]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2263 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2264 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2265 var obj = parts[0]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2266 var start = 1; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2267 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2268 if(typeof obj === 'string') { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2269 obj = window; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2270 start = 0; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2271 } else if(parts.length < 2) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2272 throw new Error('expected at least 2 arguments'); |
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 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2275 for(var i = start; i < parts.length - 1; ++i) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2276 obj = obj[parts[i]]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2277 } |
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 return [obj, parts[parts.length - 1]]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2280 }, |
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 _getProp: function _getProp(/*...*/) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2283 if(arguments.length === 0) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2284 throw new Error('no arguments supplied to getprop'); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2285 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2286 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2287 if(arguments.length === 1 && |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2288 (typeof arguments[0]) !== 'string') |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2289 { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2290 return arguments[0]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2291 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2292 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2293 var [obj, propname] = this._parsePropDescriptor(arguments); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2294 return obj[propname]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2295 }, |
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 _putProp: function _putProp(properties, value) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2298 var [obj, propname] = this._parsePropDescriptor(properties); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2299 obj[propname] = value; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2300 }, |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2301 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2302 _delProp: function _delProp(propname) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2303 var [obj, propname] = this._parsePropDescriptor(arguments); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2304 delete obj[propname]; |
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 _typeOf: function _typeOf(thing) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2308 return typeof thing; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2309 }, |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2310 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2311 _callNew: function(constructor) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2312 if(typeof constructor === 'string') |
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 constructor = window[constructor]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2315 } else if(constructor.length === 1 && |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2316 typeof constructor[0] !== 'string') |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2317 { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2318 constructor = constructor[0]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2319 } else { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2320 var [obj,propname] = this._parsePropDescriptor(constructor); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2321 constructor = obj[propname]; |
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 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2324 /* Hacky, but should be robust */ |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2325 var s = 'new constructor('; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2326 for(var i = 1; i < arguments.length; ++i) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2327 if(i != 1) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2328 s += ','; |
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 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2331 s += 'arguments[' + 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 s += ')'; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2335 return eval(s); |
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 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2338 _callEval: function(thisobj, js) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2339 return eval.call(thisobj, js); |
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 getPrompt: function getPrompt(repl) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2343 return 'EVAL>' |
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 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2346 _lookupObject: function _lookupObject(repl, id) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2347 if(typeof id === 'string') { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2348 switch(id) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2349 case 'global': |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2350 return window; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2351 case 'nil': |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2352 return null; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2353 case 't': |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2354 return true; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2355 case 'false': |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2356 return false; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2357 case 'undefined': |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2358 return undefined; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2359 case 'repl': |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2360 return repl; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2361 case 'interactor': |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2362 return this; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2363 case 'NaN': |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2364 return NaN; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2365 case 'Infinity': |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2366 return Infinity; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2367 case '-Infinity': |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2368 return -Infinity; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2369 default: |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2370 throw new Error('No object with special id:' + id); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2371 } |
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 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2374 var ret = repl._jsObjects[id]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2375 if(ret === undefined) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2376 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
|
2377 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2378 return ret; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2379 }, |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2380 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2381 _findOrAllocateObject: function _findOrAllocateObject(repl, value) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2382 if(typeof value !== 'object' && typeof value !== 'function') { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2383 throw new Error('_findOrAllocateObject called on non-object(' |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2384 + typeof(value) + '): ' |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2385 + value) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2386 } |
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 for(var id in repl._jsObjects) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2389 id = Number(id); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2390 var obj = repl._jsObjects[id]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2391 if(obj === value) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2392 return id; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2393 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2394 } |
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 var id = ++repl._jsLastID; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2397 repl._jsObjects[id] = value; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2398 return id; |
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 _fixupList: function _fixupList(repl, list) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2402 for(var i = 0; i < list.length; ++i) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2403 if(list[i] instanceof Array) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2404 this._fixupList(repl, list[i]); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2405 } else if(typeof list[i] === 'object') { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2406 var obj = list[i]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2407 if(obj.funcall) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2408 var parts = obj.funcall; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2409 this._fixupList(repl, parts); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2410 var [thisobj, func] = this._parseFunc(parts[0]); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2411 list[i] = func.apply(thisobj, parts.slice(1)); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2412 } else if(obj.objid) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2413 list[i] = this._lookupObject(repl, obj.objid); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2414 } else { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2415 throw new Error('Unknown object type: ' + obj.toSource()); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2416 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2417 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2418 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2419 }, |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2420 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2421 _parseFunc: function(func) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2422 var thisobj = null; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2423 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2424 if(typeof func === 'string') { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2425 func = window[func]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2426 } else if(func instanceof Array) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2427 if(func.length === 1 && typeof func[0] !== 'string') { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2428 func = func[0]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2429 } else { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2430 [thisobj, func] = this._parsePropDescriptor(func); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2431 func = thisobj[func]; |
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 } |
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 return [thisobj,func]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2436 }, |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2437 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2438 _encodeReturn: function(value, array_as_mv) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2439 var ret; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2440 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2441 if(value === null) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2442 ret = ['special', 'null']; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2443 } else if(value === true) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2444 ret = ['special', 'true']; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2445 } else if(value === false) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2446 ret = ['special', 'false']; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2447 } else if(value === undefined) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2448 ret = ['special', 'undefined']; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2449 } else if(typeof value === 'number') { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2450 if(isNaN(value)) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2451 ret = ['special', 'NaN']; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2452 } else if(value === Infinity) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2453 ret = ['special', 'Infinity']; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2454 } else if(value === -Infinity) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2455 ret = ['special', '-Infinity']; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2456 } else { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2457 ret = ['atom', value]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2458 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2459 } else if(typeof value === 'string') { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2460 ret = ['atom', value]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2461 } else if(array_as_mv && value instanceof Array) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2462 ret = ['array', value.map(this._encodeReturn, this)]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2463 } else { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2464 ret = ['objid', this._findOrAllocateObject(repl, value)]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2465 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2466 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2467 return ret; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2468 }, |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2469 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2470 _handleInputLine: function _handleInputLine(repl, line) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2471 var ret; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2472 var array_as_mv = false; |
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 try { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2475 if(line[0] === '*') { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2476 array_as_mv = true; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2477 line = line.substring(1); |
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 var parts = eval(line); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2480 this._fixupList(repl, parts); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2481 var [thisobj, func] = this._parseFunc(parts[0]); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2482 ret = this._encodeReturn( |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2483 func.apply(thisobj, parts.slice(1)), |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2484 array_as_mv); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2485 } catch(x) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2486 ret = ['error', x.toString() ]; |
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 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
|
2490 repl.print(JSON.encode(ret)); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2491 repl._prompt(); |
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 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2494 handleInput: function handleInput(repl, chunk) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2495 this._input += chunk; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2496 var match, line; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2497 while(match = this._input.match(/.*\\n/)) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2498 line = match[0]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2499 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2500 if(line === 'EXIT\\n') { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2501 repl.popInteractor(); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2502 repl._prompt(); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2503 return; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2504 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2505 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2506 this._input = this._input.substring(line.length); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2507 this._handleInputLine(repl, line); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2508 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2509 } |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2510 }); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2511 }) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2512 ") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2513 |
104683
2b8eeeaa8c1d
* international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents:
104391
diff
changeset
|
2514 "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
|
2515 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2516 (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
|
2517 "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
|
2518 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
|
2519 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
|
2520 with `js--js-encode-value'." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2521 (cond ((stringp x) (json-encode-string x)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2522 ((numberp x) (json-encode-number x)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2523 ((symbolp x) (format "{objid:%S}" (symbol-name x))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2524 ((js--js-handle-p x) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2525 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2526 (when (js--js-handle-expired-p x) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2527 (error "Stale JS handle")) |
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 (format "{objid:%s}" (js--js-handle-id x))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2530 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2531 ((sequencep x) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2532 (if (eq (car-safe x) 'js--funcall) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2533 (format "{funcall:[%s]}" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2534 (mapconcat #'js--js-encode-value (cdr x) ",")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2535 (concat |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2536 "[" (mapconcat #'js--js-encode-value x ",") "]"))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2537 (t |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2538 (error "Unrecognized item: %S" x)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2539 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2540 (defconst js--js-prompt-regexp "\\(repl[0-9]*\\)> $") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2541 (defconst js--js-repl-prompt-regexp "^EVAL>$") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2542 (defvar js--js-repl-depth 0) |
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 (defun js--js-wait-for-eval-prompt () |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2545 (js--wait-for-matching-output |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2546 (inferior-moz-process) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2547 js--js-repl-prompt-regexp js-js-timeout |
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 ;; start matching against the beginning of the line in |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2550 ;; 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
|
2551 (save-excursion (forward-line 0) (point)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2552 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2553 (defun js--js-enter-repl () |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2554 (inferior-moz-process) ; called for side-effect |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2555 (with-current-buffer inferior-moz-buffer |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2556 (goto-char (point-max)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2557 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2558 ;; 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
|
2559 (unless (eq (inferior-moz-process) js--js-process) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2560 (setq js--js-process (inferior-moz-process)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2561 (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
|
2562 (setq js--js-repl-depth 0) |
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 ;; Send interactor definition |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2565 (comint-send-string js--js-process js--moz-interactor) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2566 (comint-send-string js--js-process |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2567 (concat "(" moz-repl-name ")\n")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2568 (js--wait-for-matching-output |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2569 (inferior-moz-process) js--js-prompt-regexp |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2570 js-js-timeout)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2571 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2572 ;; Sanity check |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2573 (when (looking-back js--js-prompt-regexp |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2574 (save-excursion (forward-line 0) (point))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2575 (setq js--js-repl-depth 0)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2576 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2577 (if (> js--js-repl-depth 0) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2578 ;; 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
|
2579 ;; 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
|
2580 ;; up with us. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2581 (js--js-wait-for-eval-prompt) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2582 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2583 ;; Otherwise, tell Mozilla to enter the interactor mode |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2584 (insert (match-string-no-properties 1) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2585 ".pushInteractor('js')") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2586 (comint-send-input nil t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2587 (js--wait-for-matching-output |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2588 (inferior-moz-process) js--js-repl-prompt-regexp |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2589 js-js-timeout)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2590 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2591 (incf js--js-repl-depth))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2592 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2593 (defun js--js-leave-repl () |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2594 (assert (> js--js-repl-depth 0)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2595 (when (= 0 (decf js--js-repl-depth)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2596 (with-current-buffer inferior-moz-buffer |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2597 (goto-char (point-max)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2598 (js--js-wait-for-eval-prompt) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2599 (insert "EXIT") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2600 (comint-send-input nil t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2601 (js--wait-for-matching-output |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2602 (inferior-moz-process) js--js-prompt-regexp |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2603 js-js-timeout)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2604 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2605 (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
|
2606 (memq value '(nil null false undefined))) |
104272
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 (defsubst js--js-true (value) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2609 (not (js--js-not value))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2610 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2611 (eval-and-compile |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2612 (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
|
2613 "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
|
2614 (loop for item in arglist |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2615 if (eq (car-safe item) 'js<) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2616 collect (append (list 'list ''js--funcall |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2617 '(list 'interactor "_getProp")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2618 (js--optimize-arglist (cdr item))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2619 else if (eq (car-safe item) 'js>) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2620 collect (append (list 'list ''js--funcall |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2621 '(list 'interactor "_putProp")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2622 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2623 (if (atom (cadr item)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2624 (list (cadr item)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2625 (list |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2626 (append |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2627 (list 'list ''js--funcall |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2628 '(list 'interactor "_mkArray")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2629 (js--optimize-arglist (cadr item))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2630 (js--optimize-arglist (cddr item))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2631 else if (eq (car-safe item) 'js!) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2632 collect (destructuring-bind (ignored function &rest body) item |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2633 (append (list 'list ''js--funcall |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2634 (if (consp function) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2635 (cons 'list |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2636 (js--optimize-arglist function)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2637 function)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2638 (js--optimize-arglist body))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2639 else |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2640 collect item))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2641 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2642 (defmacro js--js-get-service (class-name interface-name) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2643 `(js! ("Components" "classes" ,class-name "getService") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2644 (js< "Components" "interfaces" ,interface-name))) |
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 (defmacro js--js-create-instance (class-name interface-name) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2647 `(js! ("Components" "classes" ,class-name "createInstance") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2648 (js< "Components" "interfaces" ,interface-name))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2649 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2650 (defmacro js--js-qi (object interface-name) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2651 `(js! (,object "QueryInterface") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2652 (js< "Components" "interfaces" ,interface-name))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2653 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2654 (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
|
2655 "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
|
2656 Inside the lexical scope of `with-js', `js?', `js!', |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2657 `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
|
2658 `js-create-instance', and `js-qi' are defined." |
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 `(progn |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2661 (js--js-enter-repl) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2662 (unwind-protect |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2663 (macrolet ((js? (&rest body) `(js--js-true ,@body)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2664 (js! (function &rest body) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2665 `(js--js-funcall |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2666 ,(if (consp function) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2667 (cons 'list |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2668 (js--optimize-arglist function)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2669 function) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2670 ,@(js--optimize-arglist body))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2671 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2672 (js-new (function &rest body) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2673 `(js--js-new |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2674 ,(if (consp function) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2675 (cons 'list |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2676 (js--optimize-arglist function)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2677 function) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2678 ,@body)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2679 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2680 (js-eval (thisobj js) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2681 `(js--js-eval |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2682 ,@(js--optimize-arglist |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2683 (list thisobj js)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2684 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2685 (js-list (&rest args) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2686 `(js--js-list |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2687 ,@(js--optimize-arglist args))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2688 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2689 (js-get-service (&rest args) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2690 `(js--js-get-service |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2691 ,@(js--optimize-arglist args))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2692 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2693 (js-create-instance (&rest args) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2694 `(js--js-create-instance |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2695 ,@(js--optimize-arglist args))) |
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 (js-qi (&rest args) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2698 `(js--js-qi |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2699 ,@(js--optimize-arglist args))) |
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 (js< (&rest body) `(js--js-get |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2702 ,@(js--optimize-arglist body))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2703 (js> (props value) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2704 `(js--js-funcall |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2705 '(interactor "_putProp") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2706 ,(if (consp props) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2707 (cons 'list |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2708 (js--optimize-arglist props)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2709 props) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2710 ,@(js--optimize-arglist (list value)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2711 )) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2712 (js-handle? (arg) `(js--js-handle-p ,arg))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2713 ,@forms) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2714 (js--js-leave-repl)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2715 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2716 (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
|
2717 "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
|
2718 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
|
2719 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2720 (defun js--js-decode-retval (result) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2721 (ecase (intern (first result)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2722 (atom (second result)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2723 (special (intern (second result))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2724 (array |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2725 (mapcar #'js--js-decode-retval (second result))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2726 (objid |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2727 (or (gethash (second result) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2728 js--js-references) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2729 (puthash (second result) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2730 (make-js--js-handle |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2731 :id (second result) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2732 :process (inferior-moz-process)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2733 js--js-references))) |
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 (error (signal 'js-js-error (list (second result)))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2736 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2737 (defun js--js-funcall (function &rest arguments) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2738 "Call the Mozilla function FUNCTION with arguments ARGUMENTS. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2739 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
|
2740 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
|
2741 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
|
2742 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
|
2743 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
|
2744 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
|
2745 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
|
2746 argument as a function." |
104272
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 (with-js |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2749 (let ((argstr (js--js-encode-value |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2750 (cons function arguments)))) |
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 (with-current-buffer inferior-moz-buffer |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2753 ;; Actual funcall |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2754 (when js--js-array-as-list |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2755 (insert "*")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2756 (insert argstr) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2757 (comint-send-input nil t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2758 (js--wait-for-matching-output |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2759 (inferior-moz-process) "EVAL>" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2760 js-js-timeout) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2761 (goto-char comint-last-input-end) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2762 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2763 ;; Read the result |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2764 (let* ((json-array-type 'list) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2765 (result (prog1 (json-read) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2766 (goto-char (point-max))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2767 (js--js-decode-retval result)))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2768 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2769 (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
|
2770 "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
|
2771 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
|
2772 (apply #'js--js-funcall |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2773 '(interactor "_callNew") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2774 constructor arguments)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2775 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2776 (defun js--js-eval (thisobj js) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2777 (js--js-funcall '(interactor "_callEval") thisobj js)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2778 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2779 (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
|
2780 "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
|
2781 (let ((js--js-array-as-list t)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2782 (apply #'js--js-funcall '(interactor "_mkArray") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2783 arguments))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2784 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2785 (defun js--js-get (&rest props) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2786 (apply #'js--js-funcall '(interactor "_getProp") props)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2787 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2788 (defun js--js-put (props value) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2789 (js--js-funcall '(interactor "_putProp") props value)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2790 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2791 (defun js-gc (&optional force) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2792 "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
|
2793 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
|
2794 (interactive) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2795 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2796 (when force |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2797 (setq js--js-last-gcs-done nil)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2798 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2799 (let ((this-gcs-done gcs-done) keys num) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2800 (when (and js--js-references |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2801 (boundp 'inferior-moz-buffer) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2802 (buffer-live-p inferior-moz-buffer) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2803 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2804 ;; 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
|
2805 ;; garbage collection; without a gc, nothing is deleted |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2806 ;; 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
|
2807 ;; MozRepl about that references we still hold |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2808 (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
|
2809 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2810 ;; 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
|
2811 ;; interrupt the user if he's doing something |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2812 (with-current-buffer inferior-moz-buffer |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2813 (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2814 (goto-char (point-max)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2815 (looking-back js--js-prompt-regexp |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2816 (save-excursion (forward-line 0) (point)))))) |
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 (setq keys (loop for x being the hash-keys |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2819 of js--js-references |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2820 collect x)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2821 (setq num (js--js-funcall '(repl "_jsGC") (or keys []))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2822 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2823 (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
|
2824 (when (called-interactively-p 'interactive) |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2825 (message "Cleaned %s entries" num)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2826 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2827 num))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2828 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2829 (run-with-idle-timer 30 t #'js-gc) |
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-eval (js) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2832 "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
|
2833 (interactive "MJavascript to evaluate: ") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2834 (with-js |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2835 (let* ((content-window (js--js-content-window |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2836 (js--get-js-context))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2837 (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
|
2838 (when (called-interactively-p 'interactive) |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2839 (message "%s" (js! "String" result))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2840 result))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2841 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2842 (defun js--get-tabs () |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2843 "Enumerate all JavaScript contexts available. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2844 Each context is a list: |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2845 (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
|
2846 (TITLE URL WINDOW) for windows |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2847 |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
2848 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
|
2849 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
|
2850 left-to-right." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2851 (with-js |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2852 (let (windows) |
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 (loop with window-mediator = (js! ("Components" "classes" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2855 "@mozilla.org/appshell/window-mediator;1" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2856 "getService") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2857 (js< "Components" "interfaces" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2858 "nsIWindowMediator")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2859 with enumerator = (js! (window-mediator "getEnumerator") nil) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2860 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2861 while (js? (js! (enumerator "hasMoreElements"))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2862 for window = (js! (enumerator "getNext")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2863 for window-info = (js-list window |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2864 (js< window "document" "title") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2865 (js! (window "location" "toString")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2866 (js< window "closed") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2867 (js< window "windowState")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2868 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2869 unless (or (js? (fourth window-info)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2870 (eq (fifth window-info) 2)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2871 do (push window-info windows)) |
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 (loop for window-info in windows |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2874 for window = (first window-info) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2875 collect (list (second window-info) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2876 (third window-info) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2877 window) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2878 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2879 for gbrowser = (js< window "gBrowser") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2880 if (js-handle? gbrowser) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2881 nconc (loop |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2882 for x below (js< gbrowser "browsers" "length") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2883 collect (js-list (js< gbrowser |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2884 "browsers" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2885 x |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2886 "contentDocument" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2887 "title") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2888 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2889 (js! (gbrowser |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2890 "browsers" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2891 x |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2892 "contentWindow" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2893 "location" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2894 "toString")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2895 (js< gbrowser |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2896 "browsers" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2897 x) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2898 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2899 (js! (gbrowser |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2900 "tabContainer" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2901 "childNodes" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2902 "item") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2903 x) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2904 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2905 gbrowser)))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2906 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2907 (defvar js-read-tab-history nil) |
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 (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
|
2910 "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
|
2911 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
|
2912 '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
|
2913 browser, respectively." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2914 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2915 ;; Prime IDO |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2916 (unless ido-mode |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2917 (ido-mode t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2918 (ido-mode nil)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2919 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2920 (with-js |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2921 (lexical-let ((tabs (js--get-tabs)) selected-tab-cname |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2922 selected-tab prev-hitab) |
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 ;; Disambiguate names |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2925 (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
|
2926 for tab in tabs |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2927 for cname = (format "%s (%s)" (second tab) (first tab)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2928 for num = (incf (gethash cname tab-names -1)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2929 if (> num 0) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2930 do (setq cname (format "%s <%d>" cname num)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2931 collect (cons cname tab))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2932 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2933 (labels ((find-tab-by-cname |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2934 (cname) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2935 (loop for tab in tabs |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2936 if (equal (car tab) cname) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2937 return (cdr tab))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2938 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2939 (mogrify-highlighting |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2940 (hitab unhitab) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2941 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2942 ;; Hack to reduce the number of |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2943 ;; round-trips to mozilla |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2944 (let (cmds) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2945 (cond |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2946 ;; Highlighting tab |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2947 ((fourth hitab) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2948 (push '(js! ((fourth hitab) "setAttribute") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2949 "style" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2950 "color: red; font-weight: bold") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2951 cmds) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2952 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2953 ;; Highlight window proper |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2954 (push '(js! ((third hitab) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2955 "setAttribute") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2956 "style" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2957 "border: 8px solid red") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2958 cmds) |
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 ;; Select tab, when appropriate |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2961 (when js-js-switch-tabs |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2962 (push |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2963 '(js> ((fifth hitab) "selectedTab") (fourth hitab)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2964 cmds))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2965 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2966 ;; Hilighting whole window |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2967 ((third hitab) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2968 (push '(js! ((third hitab) "document" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2969 "documentElement" "setAttribute") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2970 "style" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2971 (concat "-moz-appearance: none;" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2972 "border: 8px solid red;")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2973 cmds))) |
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 (cond |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2976 ;; Unhighlighting tab |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2977 ((fourth unhitab) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2978 (push '(js! ((fourth unhitab) "setAttribute") "style" "") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2979 cmds) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2980 (push '(js! ((third unhitab) "setAttribute") "style" "") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2981 cmds)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2982 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2983 ;; Unhighlighting window |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2984 ((third unhitab) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2985 (push '(js! ((third unhitab) "document" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2986 "documentElement" "setAttribute") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2987 "style" "") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2988 cmds))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2989 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2990 (eval (list 'with-js |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2991 (cons 'js-list (nreverse cmds)))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2992 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2993 (command-hook |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2994 () |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2995 (let* ((tab (find-tab-by-cname (car ido-matches)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2996 (mogrify-highlighting tab prev-hitab) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2997 (setq prev-hitab tab))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2998 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2999 (setup-hook |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3000 () |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3001 ;; 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
|
3002 ;; is a tabbrowser window, rotate the match list until |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3003 ;; the active tab comes up |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3004 (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
|
3005 (when (and matched-tab |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3006 (null (fourth matched-tab)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3007 (equal "navigator:browser" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3008 (js! ((third matched-tab) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3009 "document" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3010 "documentElement" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3011 "getAttribute") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3012 "windowtype"))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3013 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3014 (loop with tab-to-match = (js< (third matched-tab) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3015 "gBrowser" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3016 "selectedTab") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3017 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3018 with index = 0 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3019 for match in ido-matches |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3020 for candidate-tab = (find-tab-by-cname match) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3021 if (eq (fourth candidate-tab) tab-to-match) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3022 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
|
3023 and return t))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3024 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3025 (add-hook 'post-command-hook #'command-hook t t))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3026 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3027 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3028 (unwind-protect |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3029 (setq selected-tab-cname |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3030 (let ((ido-minibuffer-setup-hook |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3031 (cons #'setup-hook ido-minibuffer-setup-hook))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3032 (ido-completing-read |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3033 prompt |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3034 (mapcar #'car tabs) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3035 nil t nil |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3036 'js-read-tab-history))) |
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 (when prev-hitab |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3039 (mogrify-highlighting nil prev-hitab) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3040 (setq prev-hitab nil))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3041 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3042 (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
|
3043 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3044 (setq selected-tab (loop for tab in tabs |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3045 if (equal (car tab) selected-tab-cname) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3046 return (cdr tab))) |
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 (if (fourth selected-tab) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3049 (cons 'browser (third selected-tab)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3050 (cons 'window (third selected-tab))))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3051 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3052 (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
|
3053 "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
|
3054 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
|
3055 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
|
3056 function part." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3057 (cond ((and (= (length pstate) 3) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3058 (eq (js--pitem-type (first pstate)) 'function) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3059 (= (length (js--pitem-name (first pstate))) 1) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3060 (consp (js--pitem-type (second pstate)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3061 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3062 (append (js--pitem-name (second pstate)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3063 (list (first (js--pitem-name (first pstate)))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3064 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3065 ((and (= (length pstate) 2) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3066 (eq (js--pitem-type (first pstate)) 'function)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3067 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3068 (append |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3069 (butlast (js--pitem-name (first pstate))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3070 (list (car (last (js--pitem-name (first pstate))))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3071 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3072 (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
|
3073 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3074 (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
|
3075 "The current JavaScript context. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
3076 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
|
3077 Change with `js-set-js-context'.") |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3078 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3079 (defconst js--js-inserter |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3080 "(function(func_info,func) { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3081 func_info.unshift('window'); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3082 var obj = window; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3083 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
|
3084 var next = obj[func_info[i]]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3085 if(typeof next !== 'object' && typeof next !== 'function') { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3086 next = obj.prototype && obj.prototype[func_info[i]]; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3087 if(typeof next !== 'object' && typeof next !== 'function') { |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3088 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
|
3089 ' or ' + func_info.slice(0, i+1).join('.') + '.prototype'); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3090 return; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3091 } |
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 func_info.splice(i+1, 0, 'prototype'); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3094 ++i; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3095 } |
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 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3098 obj[func_info[i]] = func; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3099 alert('Successfully updated '+func_info.join('.')); |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3100 })") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3101 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3102 (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
|
3103 "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
|
3104 When called interactively, prompt for CONTEXT." |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3105 (interactive (list (js--read-tab "Javascript Context: "))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3106 (setq js--js-context context)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3107 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3108 (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
|
3109 "Return a valid JavaScript context. |
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
3110 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
|
3111 (with-js |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3112 (when (or (null js--js-context) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3113 (js--js-handle-expired-p (cdr js--js-context)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3114 (ecase (car js--js-context) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3115 (window (js? (js< (cdr js--js-context) "closed"))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3116 (browser (not (js? (js< (cdr js--js-context) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3117 "contentDocument")))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3118 (setq js--js-context (js--read-tab "Javascript Context: "))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3119 js--js-context)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3120 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3121 (defun js--js-content-window (context) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3122 (with-js |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3123 (ecase (car context) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3124 (window (cdr context)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3125 (browser (js< (cdr context) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3126 "contentWindow" "wrappedJSObject"))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3127 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3128 (defun js--make-nsilocalfile (path) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3129 (with-js |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3130 (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
|
3131 "nsILocalFile"))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3132 (js! (file "initWithPath") path) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3133 file))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3134 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3135 (defun js--js-add-resource-alias (alias path) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3136 (with-js |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3137 (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
|
3138 "nsIIOService")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3139 (res-prot (js! (io-service "getProtocolHandler") "resource")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3140 (res-prot (js-qi res-prot "nsIResProtocolHandler")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3141 (path-file (js--make-nsilocalfile path)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3142 (path-uri (js! (io-service "newFileURI") path-file))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3143 (js! (res-prot "setSubstitution") alias path-uri)))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3144 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3145 (defun* js-eval-defun () |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
3146 "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
|
3147 (interactive) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3148 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3149 ;; 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
|
3150 ;; 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
|
3151 ;; 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
|
3152 ;; 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
|
3153 ;; 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
|
3154 ;; |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3155 ;; 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
|
3156 ;; 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
|
3157 ;; file. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3158 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3159 (save-excursion |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3160 (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
|
3161 (js-end-of-defun) |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3162 (setq end (point)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3163 (js--ensure-cache) |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
3164 (js-beginning-of-defun) |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3165 (re-search-forward "\\_<function\\_>") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3166 (setq begin (match-beginning 0)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3167 (setq pstate (js--forward-pstate)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3168 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3169 (when (or (null pstate) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3170 (> (point) end)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3171 (error "Could not locate function definition")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3172 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3173 (setq defun-info (js--guess-eval-defun-info pstate)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3174 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3175 (let ((overlay (make-overlay begin end))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3176 (overlay-put overlay 'face 'highlight) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3177 (unwind-protect |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3178 (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
|
3179 (mapconcat #'identity defun-info "."))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3180 (message "") ; question message lingers until next command |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3181 (return-from js-eval-defun)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3182 (delete-overlay overlay))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3183 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3184 (setq defun-body (buffer-substring-no-properties begin end)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3185 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3186 (make-directory js-js-tmpdir t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3187 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3188 ;; (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
|
3189 ;; temporary directory |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3190 (js--js-add-resource-alias "js" js-js-tmpdir) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3191 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3192 (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
|
3193 "/js-") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3194 nil ".js")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3195 (unwind-protect |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3196 (with-js |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3197 (with-temp-buffer |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3198 (insert js--js-inserter) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3199 (insert "(") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3200 (insert (json-encode-list defun-info)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3201 (insert ",\n") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3202 (insert defun-body) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3203 (insert "\n)") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3204 (write-region (point-min) (point-max) temp-name |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3205 nil 1)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3206 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3207 ;; Give Mozilla responsibility for deleting this file |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3208 (let* ((content-window (js--js-content-window |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3209 (js--get-js-context))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3210 (content-document (js< content-window "document")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3211 (head (if (js? (js< content-document "body")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3212 ;; Regular content |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3213 (js< (js! (content-document "getElementsByTagName") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3214 "head") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3215 0) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3216 ;; Chrome |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3217 (js< content-document "documentElement"))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3218 (elem (js! (content-document "createElementNS") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3219 "http://www.w3.org/1999/xhtml" "script"))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3220 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3221 (js! (elem "setAttribute") "type" "text/javascript") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3222 (js! (elem "setAttribute") "src" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3223 (format "resource://js/%s" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3224 (file-name-nondirectory temp-name))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3225 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3226 (js! (head "appendChild") elem) |
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 (js! (content-window "addEventListener") "unload" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3229 (js! ((js-new |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3230 "Function" "file" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3231 "return function() { file.remove(false) }")) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3232 (js--make-nsilocalfile temp-name)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3233 'false) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3234 (setq temp-name nil) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3235 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3236 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3237 |
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 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3240 ;; temp-name is set to nil on success |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3241 (when temp-name |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3242 (delete-file temp-name)))))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3243 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3244 ;;; Main Function |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3245 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3246 ;;;###autoload |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3247 (define-derived-mode js-mode nil "js" |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
3248 "Major mode for editing JavaScript. |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3249 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3250 Key bindings: |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3251 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3252 \\{js-mode-map}" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3253 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3254 :group 'js |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3255 :syntax-table js-mode-syntax-table |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3256 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3257 (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
|
3258 (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
|
3259 'js-beginning-of-defun) |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3260 (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
|
3261 'js-end-of-defun) |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3262 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3263 (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
|
3264 (set (make-local-variable 'font-lock-defaults) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3265 (list js--font-lock-keywords |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3266 nil nil nil nil |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3267 '(font-lock-syntactic-keywords |
104275
3bf815184a6c
* progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents:
104272
diff
changeset
|
3268 . js-font-lock-syntactic-keywords))) |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3269 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3270 (set (make-local-variable 'parse-sexp-ignore-comments) t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3271 (set (make-local-variable 'parse-sexp-lookup-properties) t) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3272 (set (make-local-variable 'which-func-imenu-joiner-function) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3273 #'js--which-func-joiner) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3274 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3275 ;; Comments |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3276 (setq comment-start "// ") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3277 (setq comment-end "") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3278 (set (make-local-variable 'fill-paragraph-function) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3279 'js-c-fill-paragraph) |
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 ;; Parse cache |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3282 (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
|
3283 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3284 ;; Frameworks |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3285 (js--update-quick-match-re) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3286 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3287 ;; Imenu |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3288 (setq imenu-case-fold-search nil) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3289 (set (make-local-variable 'imenu-create-index-function) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3290 #'js--imenu-create-index) |
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 (setq major-mode 'js-mode) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3293 (setq mode-name "Javascript") |
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 ;; for filling, pretend we're cc-mode |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3296 (setq c-comment-prefix-regexp "//+\\|\\**" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3297 c-paragraph-start "$" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3298 c-paragraph-separate "$" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3299 c-block-comment-prefix "* " |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3300 c-line-comment-starter "//" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3301 c-comment-start-regexp "/[*/]\\|\\s!" |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3302 comment-start-skip "\\(//+\\|/\\*+\\)\\s *") |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3303 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3304 (let ((c-buffer-is-cc-mode t)) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3305 (c-setup-paragraph-variables)) |
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 (set (make-local-variable 'syntax-begin-function) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3308 #'js--syntax-begin-function) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3309 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3310 ;; 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
|
3311 ;; 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
|
3312 ;; 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
|
3313 ;; etc. and and produce maddening "unbalanced parenthesis" errors. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3314 ;; 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
|
3315 ;; 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
|
3316 ;; 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
|
3317 ;; will mysteriously disappear. |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3318 (font-lock-set-defaults) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3319 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3320 (let (font-lock-keywords) ; leaves syntactic keywords intact |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3321 (font-lock-fontify-buffer))) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3322 |
106794
c177971c1cec
* progmodes/js.el: Autoload javascript-mode alias.
Chong Yidong <cyd@stupidchicken.com>
parents:
106457
diff
changeset
|
3323 ;;;###autoload |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3324 (defalias 'javascript-mode 'js-mode) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3325 |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3326 (eval-after-load 'folding |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3327 '(when (fboundp 'folding-add-to-marks-list) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3328 (folding-add-to-marks-list 'js-mode "// {{{" "// }}}" ))) |
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 (provide 'js) |
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3331 |
104276 | 3332 ;; arch-tag: 1a0d0409-e87f-4fc7-a58c-3731c66ddaac |
104272
ea67ac46d172
* progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3333 ;; js.el ends here |