Rollup merge of #68669 - euclio:doc-comment-stmt, r=estebank

suggest adding space in accidental doc comments

Fixes #67553.

r? @estebank
This commit is contained in:
Dylan DPC 2020-01-31 01:21:28 +01:00 committed by GitHub
commit b3e63f28b3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 89 additions and 2 deletions

View File

@ -7,13 +7,13 @@ use crate::maybe_whole;
use crate::DirectoryOwnership;
use rustc_errors::{Applicability, PResult};
use rustc_span::source_map::{respan, Span};
use rustc_span::source_map::{respan, BytePos, Span};
use rustc_span::symbol::{kw, sym, Symbol};
use syntax::ast;
use syntax::ast::{AttrStyle, AttrVec, Attribute, Mac, MacStmtStyle, VisibilityKind};
use syntax::ast::{Block, BlockCheckMode, Expr, ExprKind, Local, Stmt, StmtKind, DUMMY_NODE_ID};
use syntax::ptr::P;
use syntax::token;
use syntax::token::{self, TokenKind};
use syntax::util::classify;
use std::mem;
@ -431,6 +431,23 @@ impl<'a> Parser<'a> {
if let Err(mut e) =
self.expect_one_of(&[], &[token::Semi, token::CloseDelim(token::Brace)])
{
if let TokenKind::DocComment(..) = self.token.kind {
if let Ok(snippet) = self.span_to_snippet(self.token.span) {
let sp = self.token.span;
let marker = &snippet[..3];
let (comment_marker, doc_comment_marker) = marker.split_at(2);
e.span_suggestion(
sp.with_hi(sp.lo() + BytePos(marker.len() as u32)),
&format!(
"add a space before `{}` to use a regular comment",
doc_comment_marker,
),
format!("{} {}", comment_marker, doc_comment_marker),
Applicability::MaybeIncorrect,
);
}
}
e.emit();
self.recover_stmt();
// Don't complain about type errors in body tail after parse error (#57383).

View File

@ -0,0 +1,20 @@
fn foo() -> bool {
false
//!self.allow_ty_infer()
//~^ ERROR found doc comment
}
fn bar() -> bool {
false
/*! bar */ //~ ERROR found doc comment
}
fn baz() -> i32 {
1 /** baz */ //~ ERROR found doc comment
}
fn quux() -> i32 {
2 /*! quux */ //~ ERROR found doc comment
}
fn main() {}

View File

@ -0,0 +1,50 @@
error: expected one of `.`, `;`, `?`, `}`, or an operator, found doc comment `//!self.allow_ty_infer()`
--> $DIR/doc-comment-in-stmt.rs:3:5
|
LL | false
| - expected one of `.`, `;`, `?`, `}`, or an operator
LL | //!self.allow_ty_infer()
| ^^^^^^^^^^^^^^^^^^^^^^^^ unexpected token
|
help: add a space before `!` to use a regular comment
|
LL | // !self.allow_ty_infer()
| ^^^^
error: expected one of `.`, `;`, `?`, `}`, or an operator, found doc comment `/*! bar */`
--> $DIR/doc-comment-in-stmt.rs:9:5
|
LL | false
| - expected one of `.`, `;`, `?`, `}`, or an operator
LL | /*! bar */
| ^^^^^^^^^^ unexpected token
|
help: add a space before `!` to use a regular comment
|
LL | /* ! bar */
| ^^^^
error: expected one of `.`, `;`, `?`, `}`, or an operator, found doc comment `/** baz */`
--> $DIR/doc-comment-in-stmt.rs:13:7
|
LL | 1 /** baz */
| ^^^^^^^^^^ expected one of `.`, `;`, `?`, `}`, or an operator
|
help: add a space before `*` to use a regular comment
|
LL | 1 /* * baz */
| ^^^^
error: expected one of `.`, `;`, `?`, `}`, or an operator, found doc comment `/*! quux */`
--> $DIR/doc-comment-in-stmt.rs:17:7
|
LL | 2 /*! quux */
| ^^^^^^^^^^^ expected one of `.`, `;`, `?`, `}`, or an operator
|
help: add a space before `!` to use a regular comment
|
LL | 2 /* ! quux */
| ^^^^
error: aborting due to 4 previous errors