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

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

[elpa] externals/js2-mode 776355a 2/3: Merge pull request #543 from Fuco


From: ELPA Syncer
Subject: [elpa] externals/js2-mode 776355a 2/3: Merge pull request #543 from Fuco1/feature/for-await
Date: Wed, 14 Apr 2021 18:57:09 -0400 (EDT)

branch: externals/js2-mode
commit 776355a1b7219e9e43ef0aff3d915ebef2b4ee7a
Merge: 29979e5 7275b46
Author: Dmitry Gutov <dgutov@yandex.ru>
Commit: GitHub <noreply@github.com>

    Merge pull request #543 from Fuco1/feature/for-await
    
    feat(parser): add for-await-of parsing
---
 js2-mode.el     | 37 ++++++++++++++++++++++++++-----------
 tests/parser.el |  6 ++++++
 2 files changed, 32 insertions(+), 11 deletions(-)

diff --git a/js2-mode.el b/js2-mode.el
index 7df0557..685cdf9 100644
--- a/js2-mode.el
+++ b/js2-mode.el
@@ -2651,14 +2651,17 @@ so many of its properties will be nil.
                                                         object
                                                         in-pos
                                                         each-pos
-                                                        foreach-p forof-p
+                                                        await-pos
+                                                        foreach-p forof-p 
forawait-p
                                                         lp rp)))
   "AST node for a for..in loop."
   iterator  ; [var] foo in ...
   object    ; object over which we're iterating
   in-pos    ; buffer position of 'in' keyword
   each-pos  ; buffer position of 'each' keyword, if foreach-p
+  await-pos  ; buffer position of 'await' keyword, if forawait-p
   foreach-p ; t if it's a for-each loop
+  forawait-p ; t if it's a for-await loop
   forof-p)  ; t if it's a for-of loop
 
 (js2--struct-put 'js2-for-in-node 'js2-visitor 'js2-visit-for-in-node)
@@ -2672,10 +2675,13 @@ so many of its properties will be nil.
 (defun js2-print-for-in-node (n i)
   (let ((pad (js2-make-pad i))
         (foreach (js2-for-in-node-foreach-p n))
+        (forawait (js2-for-in-node-forawait-p n))
         (forof (js2-for-in-node-forof-p n)))
     (insert pad "for ")
     (if foreach
         (insert "each "))
+    (if forawait
+        (insert "await "))
     (insert "(")
     (js2-print-ast (js2-for-in-node-iterator n) 0)
     (insert (if forof " of " " in "))
@@ -9133,24 +9139,31 @@ invalid export statements."
       node)))
 
 (defun js2-parse-for ()
-  "Parse a for, for-in or for each-in statement.
+  "Parse a for, for-in, for each-in or for await-in statement.
 Last matched token must be js2-FOR."
   (let ((for-pos (js2-current-token-beg))
         (tmp-scope (make-js2-scope))
-        pn is-for-each is-for-in-or-of is-for-of
-        in-pos each-pos tmp-pos
+        pn is-for-each is-for-in-or-of is-for-of is-for-await
+        in-pos each-pos tmp-pos await-pos
         init  ; Node init is also foo in 'foo in object'.
         cond  ; Node cond is also object in 'foo in object'.
         incr  ; 3rd section of for-loop initializer.
         body tt lp rp)
-    ;; See if this is a for each () instead of just a for ()
     (when (js2-match-token js2-NAME)
-      (if (string= "each" (js2-current-token-string))
-          (progn
-            (setq is-for-each t
-                  each-pos (- (js2-current-token-beg) for-pos)) ; relative
-            (js2-record-face 'font-lock-keyword-face))
-        (js2-report-error "msg.no.paren.for")))
+      (cond
+       ;; See if this is a for each () instead of just a for ()
+       ((string= "each" (js2-current-token-string))
+        (progn
+          (setq is-for-each t
+                each-pos (- (js2-current-token-beg) for-pos)) ; relative
+          (js2-record-face 'font-lock-keyword-face)))
+       ;; See if this is a for await () instead of just a for ()
+       ((string= "await" (js2-current-token-string))
+        (progn
+          (setq is-for-await t
+                await-pos (- (js2-current-token-beg) for-pos)) ; relative
+          (js2-record-face 'font-lock-keyword-face)))
+       (t (js2-report-error "msg.no.paren.for"))))
     (if (js2-must-match js2-LP "msg.no.paren.for")
         (setq lp (- (js2-current-token-beg) for-pos)))
     (setq tt (js2-get-token))
@@ -9212,6 +9225,8 @@ Last matched token must be js2-FOR."
                                      :in-pos in-pos
                                      :foreach-p is-for-each
                                      :each-pos each-pos
+                                     :forawait-p is-for-await
+                                     :await-pos await-pos
                                      :forof-p is-for-of
                                      :lp lp
                                      :rp rp)))
diff --git a/tests/parser.el b/tests/parser.el
index bf725f3..23c6ebe 100644
--- a/tests/parser.el
+++ b/tests/parser.el
@@ -192,6 +192,12 @@ the test."
 (js2-deftest-parse parse-for-of
   "for (var a of []) {\n}")
 
+(js2-deftest-parse parse-for-each
+  "for each (var a of []) {\n}")
+
+(js2-deftest-parse parse-for-await
+  "for await (var a of []) {\n}")
+
 (js2-deftest-parse of-can-be-name
   "void of;")
 



reply via email to

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