From 77f2381eea2ca4da6c6d7dc81322be542e3dbb87 Mon Sep 17 00:00:00 2001
From: Aleksey Kladov <aleksey.kladov@gmail.com>
Date: Mon, 4 Mar 2019 14:24:02 +0300
Subject: improve error recovery

parse the contents of error block as an expression
---
 .../data/parser/err/0008_item_block_recovery.txt   | 53 ++++++++++++----------
 .../err/0009_broken_struct_type_parameter.txt      | 20 ++++++--
 .../tests/data/parser/err/0028_macro_2.0.txt       | 39 +++++++++-------
 3 files changed, 70 insertions(+), 42 deletions(-)

(limited to 'crates/ra_syntax')

diff --git a/crates/ra_syntax/tests/data/parser/err/0008_item_block_recovery.txt b/crates/ra_syntax/tests/data/parser/err/0008_item_block_recovery.txt
index de5c81f29..870c818ae 100644
--- a/crates/ra_syntax/tests/data/parser/err/0008_item_block_recovery.txt
+++ b/crates/ra_syntax/tests/data/parser/err/0008_item_block_recovery.txt
@@ -28,29 +28,36 @@ SOURCE_FILE@[0; 95)
   ERROR@[20; 80)
     L_CURLY@[20; 21)
     WHITESPACE@[21; 26)
-    IF_KW@[26; 28)
-    WHITESPACE@[28; 29)
-    TRUE_KW@[29; 33)
-    WHITESPACE@[33; 34)
-    ERROR@[34; 51)
-      L_CURLY@[34; 35)
-      WHITESPACE@[35; 44)
-      INT_NUMBER@[44; 45) "1"
-      WHITESPACE@[45; 50)
-      R_CURLY@[50; 51)
-    WHITESPACE@[51; 52)
-    ELSE_KW@[52; 56)
-    WHITESPACE@[56; 57)
-    ERROR@[57; 78)
-      L_CURLY@[57; 58)
-      WHITESPACE@[58; 67)
-      INT_NUMBER@[67; 68) "2"
-      WHITESPACE@[68; 69)
-      PLUS@[69; 70)
-      WHITESPACE@[70; 71)
-      INT_NUMBER@[71; 72) "3"
-      WHITESPACE@[72; 77)
-      R_CURLY@[77; 78)
+    IF_EXPR@[26; 78)
+      IF_KW@[26; 28)
+      WHITESPACE@[28; 29)
+      CONDITION@[29; 33)
+        LITERAL@[29; 33)
+          TRUE_KW@[29; 33)
+      WHITESPACE@[33; 34)
+      BLOCK@[34; 51)
+        L_CURLY@[34; 35)
+        WHITESPACE@[35; 44)
+        LITERAL@[44; 45)
+          INT_NUMBER@[44; 45) "1"
+        WHITESPACE@[45; 50)
+        R_CURLY@[50; 51)
+      WHITESPACE@[51; 52)
+      ELSE_KW@[52; 56)
+      WHITESPACE@[56; 57)
+      BLOCK@[57; 78)
+        L_CURLY@[57; 58)
+        WHITESPACE@[58; 67)
+        BIN_EXPR@[67; 72)
+          LITERAL@[67; 68)
+            INT_NUMBER@[67; 68) "2"
+          WHITESPACE@[68; 69)
+          PLUS@[69; 70)
+          WHITESPACE@[70; 71)
+          LITERAL@[71; 72)
+            INT_NUMBER@[71; 72) "3"
+        WHITESPACE@[72; 77)
+        R_CURLY@[77; 78)
     WHITESPACE@[78; 79)
     R_CURLY@[79; 80)
   WHITESPACE@[80; 82)
diff --git a/crates/ra_syntax/tests/data/parser/err/0009_broken_struct_type_parameter.txt b/crates/ra_syntax/tests/data/parser/err/0009_broken_struct_type_parameter.txt
index e22c061d2..26c5d395c 100644
--- a/crates/ra_syntax/tests/data/parser/err/0009_broken_struct_type_parameter.txt
+++ b/crates/ra_syntax/tests/data/parser/err/0009_broken_struct_type_parameter.txt
@@ -28,10 +28,24 @@ SOURCE_FILE@[0; 43)
   ERROR@[17; 31)
     L_CURLY@[17; 18)
     WHITESPACE@[18; 23)
-    IDENT@[23; 24) "f"
-    COLON@[24; 25)
+    EXPR_STMT@[23; 24)
+      PATH_EXPR@[23; 24)
+        PATH@[23; 24)
+          PATH_SEGMENT@[23; 24)
+            NAME_REF@[23; 24)
+              IDENT@[23; 24) "f"
+              err: `expected SEMI`
+              err: `expected expression`
+    EXPR_STMT@[24; 25)
+      ERROR@[24; 25)
+        COLON@[24; 25)
+        err: `expected SEMI`
     WHITESPACE@[25; 26)
-    IDENT@[26; 29) "u32"
+    PATH_EXPR@[26; 29)
+      PATH@[26; 29)
+        PATH_SEGMENT@[26; 29)
+          NAME_REF@[26; 29)
+            IDENT@[26; 29) "u32"
     WHITESPACE@[29; 30)
     R_CURLY@[30; 31)
   WHITESPACE@[31; 33)
diff --git a/crates/ra_syntax/tests/data/parser/err/0028_macro_2.0.txt b/crates/ra_syntax/tests/data/parser/err/0028_macro_2.0.txt
index 440bd7f92..181ccfa25 100644
--- a/crates/ra_syntax/tests/data/parser/err/0028_macro_2.0.txt
+++ b/crates/ra_syntax/tests/data/parser/err/0028_macro_2.0.txt
@@ -34,22 +34,29 @@ SOURCE_FILE@[0; 349)
   ERROR@[42; 93)
     L_CURLY@[42; 43)
     WHITESPACE@[43; 48)
-    IDENT@[48; 51) "vec"
-    EXCL@[51; 52)
-    L_BRACK@[52; 53)
-    WHITESPACE@[53; 62)
-    DOLLAR@[62; 63)
-    L_PAREN@[63; 64)
-    IDENT@[64; 78) "parse_use_tree"
-    L_PAREN@[78; 79)
-    DOLLAR@[79; 80)
-    IDENT@[80; 81) "s"
-    R_PAREN@[81; 82)
-    COMMA@[82; 83)
-    R_PAREN@[83; 84)
-    STAR@[84; 85)
-    WHITESPACE@[85; 90)
-    R_BRACK@[90; 91)
+    MACRO_CALL@[48; 91)
+      PATH@[48; 51)
+        PATH_SEGMENT@[48; 51)
+          NAME_REF@[48; 51)
+            IDENT@[48; 51) "vec"
+      EXCL@[51; 52)
+      TOKEN_TREE@[52; 91)
+        L_BRACK@[52; 53)
+        WHITESPACE@[53; 62)
+        DOLLAR@[62; 63)
+        TOKEN_TREE@[63; 84)
+          L_PAREN@[63; 64)
+          IDENT@[64; 78) "parse_use_tree"
+          TOKEN_TREE@[78; 82)
+            L_PAREN@[78; 79)
+            DOLLAR@[79; 80)
+            IDENT@[80; 81) "s"
+            R_PAREN@[81; 82)
+          COMMA@[82; 83)
+          R_PAREN@[83; 84)
+        STAR@[84; 85)
+        WHITESPACE@[85; 90)
+        R_BRACK@[90; 91)
     WHITESPACE@[91; 92)
     R_CURLY@[92; 93)
   WHITESPACE@[93; 95)
-- 
cgit v1.2.3