about summary refs log tree commit diff
path: root/src/librustc_parse
diff options
context:
space:
mode:
authorAndy Russell <arussell123@gmail.com>2020-01-22 11:24:32 -0500
committerAndy Russell <arussell123@gmail.com>2020-01-30 09:00:35 -0500
commitdb319a8fb0126b84e0a0abbac83d4e1adeca6a95 (patch)
treef48f75d7e54f2a3ff40d032d58acd01b05372491 /src/librustc_parse
parentc4071d09197e22d2fab8334aa8d30659961bb977 (diff)
downloadrust-db319a8fb0126b84e0a0abbac83d4e1adeca6a95.tar.gz
rust-db319a8fb0126b84e0a0abbac83d4e1adeca6a95.zip
suggest adding space in accidental doc comments
Diffstat (limited to 'src/librustc_parse')
-rw-r--r--src/librustc_parse/parser/stmt.rs21
1 files changed, 19 insertions, 2 deletions
diff --git a/src/librustc_parse/parser/stmt.rs b/src/librustc_parse/parser/stmt.rs
index a94d8228bbe..ae8f1e4db1b 100644
--- a/src/librustc_parse/parser/stmt.rs
+++ b/src/librustc_parse/parser/stmt.rs
@@ -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).