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