注释
源 comments Commit: 993393d362cae51584d580f86c4f38d43ae76efc
Lexer
LINE_COMMENT :
//
(~[/
!
] |//
) ~\n
*
|//
BLOCK_COMMENT :
/*
(~[*
!
] |**
| BlockCommentOrDoc) (BlockCommentOrDoc | ~*/
)**/
|/**/
|/***/
INNER_LINE_DOC :
//!
~[\n
IsolatedCR]*INNER_BLOCK_DOC :
/*!
( BlockCommentOrDoc | ~[*/
IsolatedCR] )**/
OUTER_LINE_DOC :
///
(~/
~[\n
IsolatedCR]*)?OUTER_BLOCK_DOC :
/**
(~*
| BlockCommentOrDoc ) (BlockCommentOrDoc | ~[*/
IsolatedCR])**/
BlockCommentOrDoc :
BLOCK_COMMENT
| OUTER_BLOCK_DOC
| INNER_BLOCK_DOCIsolatedCR :
A\r
not followed by a\n
非文档评论
Rust代码中的注释遵循C ++的line(//)和block(/ * ... * /)注释表现样式。 支持块嵌套注释。
非文档注释被解释为空格的一种形式。
文档注释
完全以三个斜杠(///)开头的行文档注释和块文档注释(/ ** ... * /)两个内部文档注释都被解释为 doc属性的特殊语法。 也就是说,它们相当于围绕注释的主体编写#[doc =“...”],即/// Foo变成#[doc ="Foo"]和/ ** Bar * /变成#[DOC= "Bar"]。
以//!开头的行注释 和块注释/ *! ... * /都是适用于注释的父级的文档注释,而不是紧接着的项。 也就是说,它们相当于在注释正文周围写#![doc ="..."]。 //! 注释通常用于记录占用源文件的模块。
在文档注释中不允许使用隔离的CR(\ r),即不跟随LF(\ n)。
示例
//! A doc comment that applies to the implicit anonymous module of this crate
pub mod outer_module {
//! - Inner line doc
//!! - Still an inner line doc (but with a bang at the beginning)
/*! - Inner block doc */
/*!! - Still an inner block doc (but with a bang at the beginning) */
// - Only a comment
/// - Outer line doc (exactly 3 slashes)
//// - Only a comment
/* - Only a comment */
/** - Outer block doc (exactly) 2 asterisks */
/*** - Only a comment */
pub mod inner_module {}
pub mod nested_comments {
/* In Rust /* we can /* nest comments */ */ */
// All three types of block comments can contain or be nested inside
// any other type:
/* /* */ /** */ /*! */ */
/*! /* */ /** */ /*! */ */
/** /* */ /** */ /*! */ */
pub mod dummy_item {}
}
pub mod degenerate_cases {
// empty inner line doc
//!
// empty inner block doc
/*!*/
// empty line comment
//
// empty outer line doc
///
// empty block comment
/**/
pub mod dummy_item {}
// empty 2-asterisk block isn't a doc block, it is a block comment
/***/
}
/* The next one isn't allowed because outer doc comments
require an item that will receive the doc */
/// Where is my item?
# mod boo {}
}