emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] master b1f7e6c 11/45: Simplify parsing of destructuring literals


From: Dmitry Gutov
Subject: [elpa] master b1f7e6c 11/45: Simplify parsing of destructuring literals
Date: Mon, 02 Feb 2015 03:18:36 +0000

branch: master
commit b1f7e6cc1e2a9462652703039bcd79eadd7a7003
Author: Dmitry Gutov <address@hidden>
Commit: Dmitry Gutov <address@hidden>

    Simplify parsing of destructuring literals
    
    js2-parse-named-prop: Drop the "in destructuring" case, parse as 
abbreviated props.
    js2-define-destruct-symbols: Don't expect js2-name nodes directly in 
js2-object-node.
    js2-object-prop-node: Document `SHORTHAND'.
---
 js2-mode.el |   27 ++++++---------------------
 1 files changed, 6 insertions(+), 21 deletions(-)

diff --git a/js2-mode.el b/js2-mode.el
index 9f9cba8..715c24a 100644
--- a/js2-mode.el
+++ b/js2-mode.el
@@ -3575,8 +3575,7 @@ optional `js2-expr-node'"
                                                      len
                                                      elems)))
   "AST node for an object literal expression.
-`elems' is a list of either `js2-object-prop-node' or `js2-name-node'.
-The latter represents abbreviation in destructuring expressions."
+`elems' is a list of `js2-object-prop-node'."
   elems)
 
 (put 'cl-struct-js2-object-node 'js2-visitor 'js2-visit-object-node)
@@ -3600,7 +3599,9 @@ The latter represents abbreviation in destructuring 
expressions."
                                                           right op-pos)))
   "AST node for an object literal prop:value entry.
 The `left' field is the property:  a name node, string node or number node.
-The `right' field is a `js2-node' representing the initializer value.")
+The `right' field is a `js2-node' representing the initializer value.
+If the property is abbreviated, the node's `SHORTHAND' property is non-nil
+and both fields have the same value.")
 
 (put 'cl-struct-js2-object-prop-node 'js2-visitor 'js2-visit-infix-node)
 (put 'cl-struct-js2-object-prop-node 'js2-printer 'js2-print-object-prop-node)
@@ -7465,10 +7466,8 @@ NODE is either `js2-array-node', `js2-object-node', or 
`js2-name-node'."
    ((js2-object-node-p node)
     (dolist (elem (js2-object-node-elems node))
       (js2-define-destruct-symbols
-       (if (js2-object-prop-node-p elem)
-           (js2-object-prop-node-right elem)
-         ;; abbreviated destructuring {a, b}
-         elem)
+       ;; In abbreviated destructuring {a, b}, right == left.
+       (js2-object-prop-node-right elem)
        decl-type face ignore-not-in-block)))
    ((js2-array-node-p node)
     (dolist (elem (js2-array-node-elems node))
@@ -9763,20 +9762,6 @@ When `js2-is-in-destructuring' is t, forms like {a, b, 
c} will be permitted."
            (>= js2-language-version 200))
       (js2-set-face ppos pend 'font-lock-keyword-face 'record)  ; name
       (js2-parse-getter-setter-prop ppos name ""))
-     ;; Abbreviated destructuring binding, e.g. {a, b} = c;
-     ;; XXX: To be honest, the value of `js2-is-in-destructuring' becomes t 
only
-     ;; when patterns are used in variable declarations, function parameters,
-     ;; catch-clause, and iterators.
-     ;; We have to set `js2-is-in-destructuring' to t when the current
-     ;; expressions are on the left side of any assignment, but it's difficult
-     ;; because it requires looking ahead of expression.
-     ((and js2-is-in-destructuring
-           (= tt js2-NAME)
-           (let ((ctk (js2-peek-token)))
-             (or (= ctk js2-COMMA)
-                 (= ctk js2-RC)
-                 (js2-valid-prop-name-token ctk))))
-      name)
      ;; regular prop
      (t
       (prog1



reply via email to

[Prev in Thread] Current Thread [Next in Thread]