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

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

[elpa] externals/js2-mode e6a9059: Support catch without identifier


From: ELPA Syncer
Subject: [elpa] externals/js2-mode e6a9059: Support catch without identifier
Date: Mon, 6 Sep 2021 19:57:11 -0400 (EDT)

branch: externals/js2-mode
commit e6a9059fc823a17496e1a5114652d92a9071a78f
Author: Dmitry Gutov <dgutov@yandex.ru>
Commit: Dmitry Gutov <dgutov@yandex.ru>

    Support catch without identifier
    
    Fixes #573
---
 js2-mode.el     | 61 ++++++++++++++++++++++++++++++---------------------------
 tests/parser.el |  4 ++++
 2 files changed, 36 insertions(+), 29 deletions(-)

diff --git a/js2-mode.el b/js2-mode.el
index daf2dfb..9d8e4f7 100644
--- a/js2-mode.el
+++ b/js2-mode.el
@@ -3017,12 +3017,15 @@ modules metadata itself."
   (let ((pad (js2-make-pad i))
         (guard-kwd (js2-catch-node-guard-kwd n))
         (guard-expr (js2-catch-node-guard-expr n)))
-    (insert " catch (")
-    (js2-print-ast (js2-catch-node-param n) 0)
-    (when guard-kwd
-      (insert " if ")
-      (js2-print-ast guard-expr 0))
-    (insert ") {\n")
+    (insert " catch ")
+    (when (js2-catch-node-lp n)
+      (insert "(")
+      (js2-print-ast (js2-catch-node-param n) 0)
+      (when guard-kwd
+        (insert " if ")
+        (js2-print-ast guard-expr 0))
+      (insert ") "))
+    (insert "{\n")
     (js2-print-body n (1+ i))
     (insert pad "}")))
 
@@ -9288,30 +9291,30 @@ Last matched token must be js2-FOR."
                lp rp)
           (if saw-default-catch
               (js2-report-error "msg.catch.unreachable"))
-          (if (js2-must-match js2-LP "msg.no.paren.catch")
-              (setq lp (- (js2-current-token-beg) catch-pos)))
           (js2-push-scope catch-node)
-          (let ((tt (js2-peek-token)))
-            (cond
-             ;; Destructuring pattern:
-             ;;     catch ({ message, file }) { ... }
-             ((or (= tt js2-LB) (= tt js2-LC))
-              (js2-get-token)
-              (setq param (js2-parse-destruct-primary-expr))
-              (js2-define-destruct-symbols param js2-LET nil))
-             ;; Simple name.
-             (t
-              (js2-must-match-name "msg.bad.catchcond")
-              (setq param (js2-create-name-node))
-              (js2-define-symbol js2-LET (js2-current-token-string) param)
-              (js2-check-strict-identifier param))))
-          ;; Catch condition.
-          (if (js2-match-token js2-IF)
-              (setq guard-kwd (- (js2-current-token-beg) catch-pos)
-                    catch-cond (js2-parse-expr))
-            (setq saw-default-catch t))
-          (if (js2-must-match js2-RP "msg.bad.catchcond")
-              (setq rp (- (js2-current-token-beg) catch-pos)))
+          (when (js2-match-token js2-LP)
+            (setq lp (- (js2-current-token-beg) catch-pos))
+            (let ((tt (js2-peek-token)))
+              (cond
+               ;; Destructuring pattern:
+               ;;     catch ({ message, file }) { ... }
+               ((or (= tt js2-LB) (= tt js2-LC))
+                (js2-get-token)
+                (setq param (js2-parse-destruct-primary-expr))
+                (js2-define-destruct-symbols param js2-LET nil))
+               ;; Simple name.
+               (t
+                (js2-must-match-name "msg.bad.catchcond")
+                (setq param (js2-create-name-node))
+                (js2-define-symbol js2-LET (js2-current-token-string) param)
+                (js2-check-strict-identifier param))))
+            ;; Catch condition.
+            (if (js2-match-token js2-IF)
+                (setq guard-kwd (- (js2-current-token-beg) catch-pos)
+                      catch-cond (js2-parse-expr))
+              (setq saw-default-catch t))
+            (if (js2-must-match js2-RP "msg.bad.catchcond")
+                (setq rp (- (js2-current-token-beg) catch-pos))))
           (js2-must-match js2-LC "msg.no.brace.catchblock")
           (js2-parse-statements catch-node)
           (if (js2-must-match js2-RC "msg.no.brace.after.body")
diff --git a/tests/parser.el b/tests/parser.el
index e1b821f..d9742a0 100644
--- a/tests/parser.el
+++ b/tests/parser.el
@@ -163,6 +163,10 @@ the test."
 (js2-deftest-parse void
   "void 0;")
 
+(js2-deftest-parse catch-without-identifier
+  "try {\n} catch {\n  4 + 4;\n}"
+  :warnings-count 0)
+
 ;;; Callers of `js2-valid-prop-name-token'
 
 (js2-deftest-parse parse-property-access-when-not-keyword



reply via email to

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