Skip to content

Commit

Permalink
Merge pull request #688 from dtolnay/missingcomma
Browse files Browse the repository at this point in the history
Prevent type ascription misdiagnosis
  • Loading branch information
dtolnay committed Jun 29, 2020
2 parents 631ce80 + 9357569 commit fcddb9a
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 5 deletions.
11 changes: 11 additions & 0 deletions src/macros.rs
Expand Up @@ -224,6 +224,11 @@ macro_rules! json_internal {
json_internal!(@object $object ($key) (: $($rest)*) (: $($rest)*));
};

// Refuse to absorb colon token into key expression.
(@object $object:ident ($($key:tt)*) (: $($unexpected:tt)+) $copy:tt) => {
json_expect_expr_comma!($($unexpected)+);
};

// Munch a token into the current key.
(@object $object:ident ($($key:tt)*) ($tt:tt $($rest:tt)*) $copy:tt) => {
json_internal!(@object $object ($($key)* $tt) ($($rest)*) ($($rest)*));
Expand Down Expand Up @@ -290,3 +295,9 @@ macro_rules! json_internal_vec {
macro_rules! json_unexpected {
() => {};
}

#[macro_export]
#[doc(hidden)]
macro_rules! json_expect_expr_comma {
($e:expr , $($tt:tt)*) => {};
}
5 changes: 5 additions & 0 deletions tests/ui/missing_comma.rs
@@ -0,0 +1,5 @@
use serde_json::json;

fn main() {
json!({ "1": "" "2": "" });
}
7 changes: 7 additions & 0 deletions tests/ui/missing_comma.stderr
@@ -0,0 +1,7 @@
error: no rules expected the token `"2"`
--> $DIR/missing_comma.rs:4:21
|
4 | json!({ "1": "" "2": "" });
| -^^^ no rules expected this token in macro call
| |
| help: missing comma here
8 changes: 3 additions & 5 deletions tests/ui/parse_expr.stderr
@@ -1,7 +1,5 @@
error: unexpected end of macro invocation
--> $DIR/parse_expr.rs:4:5
error: no rules expected the token `~`
--> $DIR/parse_expr.rs:4:19
|
4 | json!({ "a" : ~ });
| ^^^^^^^^^^^^^^^^^^^ missing tokens in macro arguments
|
= note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
| ^ no rules expected this token in macro call

0 comments on commit fcddb9a

Please sign in to comment.