Skip to content

Commit

Permalink
suggest adding space in accidental doc comments
Browse files Browse the repository at this point in the history
  • Loading branch information
euclio committed Jan 30, 2020
1 parent c4071d0 commit db319a8
Show file tree
Hide file tree
Showing 3 changed files with 89 additions and 2 deletions.
21 changes: 19 additions & 2 deletions src/librustc_parse/parser/stmt.rs
Expand Up @@ -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;
Expand Down Expand Up @@ -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).
Expand Down
20 changes: 20 additions & 0 deletions src/test/ui/parser/doc-comment-in-stmt.rs
@@ -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() {}
50 changes: 50 additions & 0 deletions src/test/ui/parser/doc-comment-in-stmt.stderr
@@ -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

0 comments on commit db319a8

Please sign in to comment.