diff options
author | bors <bors@rust-lang.org> | 2018-04-23 01:36:51 +0000 |
---|---|---|
committer | bors <bors@rust-lang.org> | 2018-04-23 01:36:51 +0000 |
commit | 2c57826b9254288f40909615ced85a171f96e95c (patch) | |
tree | fa9d059fc6dafa02fe079f27ba9d4a765719e449 | |
parent | e02868793bdb0e83d2ecee295bdc16f6b2e5a142 (diff) | |
parent | 1bed654053c9abb0c48cf6d17c8f77c4acec4bc9 (diff) | |
download | rust-2c57826b9254288f40909615ced85a171f96e95c.tar.gz |
Auto merge of #48946 - PramodBisht:issues/48636, r=estebank
Doc comments present after a particular syntax error cause an unhelpful error message to be output.
fixed: #48636
r? @estebank
-rw-r--r-- | src/libsyntax/parse/parser.rs | 17 | ||||
-rw-r--r-- | src/test/ui/issue-48636.rs | 17 | ||||
-rw-r--r-- | src/test/ui/issue-48636.stderr | 13 |
3 files changed, 46 insertions, 1 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 3e1de923695..9fa3952ca80 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -5759,18 +5759,33 @@ impl<'a> Parser<'a> { vis: Visibility, attrs: Vec<Attribute> ) -> PResult<'a, StructField> { + let mut seen_comma: bool = false; let a_var = self.parse_name_and_ty(lo, vis, attrs)?; + if self.token == token::Comma { + seen_comma = true; + } match self.token { token::Comma => { self.bump(); } token::CloseDelim(token::Brace) => {} token::DocComment(_) => { + let previous_span = self.prev_span; let mut err = self.span_fatal_err(self.span, Error::UselessDocComment); self.bump(); // consume the doc comment - if self.eat(&token::Comma) || self.token == token::CloseDelim(token::Brace) { + let comma_after_doc_seen = self.eat(&token::Comma); + // `seen_comma` is always false, because we are inside doc block + // condition is here to make code more readable + if seen_comma == false && comma_after_doc_seen == true { + seen_comma = true; + } + if comma_after_doc_seen || self.token == token::CloseDelim(token::Brace) { err.emit(); } else { + if seen_comma == false { + let sp = self.sess.codemap().next_point(previous_span); + err.span_suggestion(sp, "missing comma here", ",".into()); + } return Err(err); } } diff --git a/src/test/ui/issue-48636.rs b/src/test/ui/issue-48636.rs new file mode 100644 index 00000000000..03e45d88e6c --- /dev/null +++ b/src/test/ui/issue-48636.rs @@ -0,0 +1,17 @@ +// Copyright 2018 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +struct S { + x: u8 + /// The id of the parent core + y: u8, +} +//~^^^ ERROR found a documentation comment that doesn't document anything +fn main() {} diff --git a/src/test/ui/issue-48636.stderr b/src/test/ui/issue-48636.stderr new file mode 100644 index 00000000000..4e014a5bd1d --- /dev/null +++ b/src/test/ui/issue-48636.stderr @@ -0,0 +1,13 @@ +error[E0585]: found a documentation comment that doesn't document anything + --> $DIR/issue-48636.rs:13:5 + | +LL | x: u8 + | - help: missing comma here: `,` +LL | /// The id of the parent core + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | + = help: doc comments must come before what they document, maybe a comment was intended with `//`? + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0585`. |