From ce0e5558da1279baba8c744c56bd227b4d2d29d5 Mon Sep 17 00:00:00 2001 From: Yuki Okushi Date: Mon, 21 Jan 2019 04:52:16 +0900 Subject: [PATCH 1/2] Add span for bad doc comment --- src/libsyntax/parse/parser.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 7e15b23127655..3195435bba5ad 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -4483,13 +4483,17 @@ impl<'a> Parser<'a> { } /// Emit an expected item after attributes error. - fn expected_item_err(&self, attrs: &[Attribute]) { + fn expected_item_err(&mut self, attrs: &[Attribute]) -> PResult<'a, ()> { let message = match attrs.last() { Some(&Attribute { is_sugared_doc: true, .. }) => "expected item after doc comment", _ => "expected item after attributes", }; - self.span_err(self.prev_span, message); + let mut err = self.diagnostic().struct_span_err(self.prev_span, message); + if attrs.last().unwrap().is_sugared_doc { + err.span_label(self.prev_span, "this doc comment doesn't document anything"); + } + Err(err) } /// Parse a statement. This stops just before trailing semicolons on everything but items. @@ -7636,7 +7640,7 @@ impl<'a> Parser<'a> { } None => { if !attrs.is_empty() { - self.expected_item_err(&attrs); + self.expected_item_err(&attrs)?; } self.unexpected() @@ -7699,7 +7703,7 @@ impl<'a> Parser<'a> { } if !attributes_allowed && !attrs.is_empty() { - self.expected_item_err(&attrs); + self.expected_item_err(&attrs)?; } Ok(None) } From b97c9641f51c6897ddded240c87e84f065f55588 Mon Sep 17 00:00:00 2001 From: Yuki Okushi Date: Mon, 21 Jan 2019 04:52:30 +0900 Subject: [PATCH 2/2] Fix tests --- src/test/ui/parser/doc-before-eof.stderr | 2 +- src/test/ui/parser/doc-before-extern-rbrace.stderr | 2 +- src/test/ui/parser/doc-before-mod-rbrace.stderr | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/ui/parser/doc-before-eof.stderr b/src/test/ui/parser/doc-before-eof.stderr index b764e9f7ae102..5809d64e80678 100644 --- a/src/test/ui/parser/doc-before-eof.stderr +++ b/src/test/ui/parser/doc-before-eof.stderr @@ -2,7 +2,7 @@ error: expected item after doc comment --> $DIR/doc-before-eof.rs:3:1 | LL | /// hi //~ERROR expected item after doc comment - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ this doc comment doesn't document anything error: aborting due to previous error diff --git a/src/test/ui/parser/doc-before-extern-rbrace.stderr b/src/test/ui/parser/doc-before-extern-rbrace.stderr index 47fab7b40f4cd..8cc9c916a7afd 100644 --- a/src/test/ui/parser/doc-before-extern-rbrace.stderr +++ b/src/test/ui/parser/doc-before-extern-rbrace.stderr @@ -2,7 +2,7 @@ error: expected item after doc comment --> $DIR/doc-before-extern-rbrace.rs:2:5 | LL | /// hi - | ^^^^^^ + | ^^^^^^ this doc comment doesn't document anything error: aborting due to previous error diff --git a/src/test/ui/parser/doc-before-mod-rbrace.stderr b/src/test/ui/parser/doc-before-mod-rbrace.stderr index 41c1d706b3a7e..4eaf351f676c8 100644 --- a/src/test/ui/parser/doc-before-mod-rbrace.stderr +++ b/src/test/ui/parser/doc-before-mod-rbrace.stderr @@ -2,7 +2,7 @@ error: expected item after doc comment --> $DIR/doc-before-mod-rbrace.rs:4:5 | LL | /// document - | ^^^^^^^^^^^^ + | ^^^^^^^^^^^^ this doc comment doesn't document anything error: aborting due to previous error