diff options
| author | Esteban Küber <esteban@kuber.com.ar> | 2019-08-08 18:24:00 -0700 |
|---|---|---|
| committer | Esteban Küber <esteban@kuber.com.ar> | 2019-08-09 08:20:13 -0700 |
| commit | 7c96d90c2081f3ca84b3786a125cf2c415335e40 (patch) | |
| tree | 7b9bc7f69a5a318efb6388ebd41eff8ae03fa1a9 /src/libsyntax/ext/expand.rs | |
| parent | 813a3a5d4b2be4e2101faa73a067da02a704a598 (diff) | |
| download | rust-7c96d90c2081f3ca84b3786a125cf2c415335e40.tar.gz rust-7c96d90c2081f3ca84b3786a125cf2c415335e40.zip | |
More explicit diagnostic when using a `vec![]` in a pattern
``` error: unexpected `(` after qualified path --> $DIR/vec-macro-in-pattern.rs:3:14 | LL | Some(vec![x]) => (), | ^^^^^^^ | | | unexpected `(` after qualified path | in this macro invocation | use a slice pattern here instead | = help: for more information, see https://doc.rust-lang.org/edition-guide/rust-2018/slice-patterns.html = note: this warning originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) ```
Diffstat (limited to 'src/libsyntax/ext/expand.rs')
| -rw-r--r-- | src/libsyntax/ext/expand.rs | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs index 964c81dd466..36f059531d3 100644 --- a/src/libsyntax/ext/expand.rs +++ b/src/libsyntax/ext/expand.rs @@ -686,12 +686,13 @@ impl<'a, 'b> MacroExpander<'a, 'b> { ); } - fn parse_ast_fragment(&mut self, - toks: TokenStream, - kind: AstFragmentKind, - path: &Path, - span: Span) - -> AstFragment { + fn parse_ast_fragment( + &mut self, + toks: TokenStream, + kind: AstFragmentKind, + path: &Path, + span: Span, + ) -> AstFragment { let mut parser = self.cx.new_parser_from_tts(&toks.into_trees().collect::<Vec<_>>()); match parser.parse_ast_fragment(kind, false) { Ok(fragment) => { @@ -700,6 +701,21 @@ impl<'a, 'b> MacroExpander<'a, 'b> { } Err(mut err) => { err.set_span(span); + match kind { + AstFragmentKind::Ty => { + err.span_label( + span, + "this macro call doesn't expand to a type", + ); + } + AstFragmentKind::Pat => { + err.span_label( + span, + "this macro call doesn't expand to a pattern", + ); + } + _ => {} + }; err.emit(); self.cx.trace_macros_diag(); kind.dummy(span) |
