注释关联规则
解析器在构建 CST 时,会自动收集注释并关联到对应的语法节点。
关联规则
文档注释(///)
关联到紧随其后的函数、变量等定义。
/// 问候函数
/// @param name - 用户名
/// @returns - 问候语
func greet(name: string) -> string {
`hello ${name}`
}
在 CST 中,/// 开头的注释会存储在 FuncDef 节点的 comments 字段中。
模块注释(//!)
关联到 Program 节点,表示整个模块的文档。
//! 用户模块
//!
//! 提供用户相关的功能,包括认证、用户信息管理等
在 CST 中,//! 开头的注释会存储在 Program 节点的 comments 字段中。
单行注释(//)
关联到最近的语法节点。
let x = 1; // 初始化变量
在 CST 中,// 开头的注释会关联到 LetStmt 节点。
注释收集过程
词法分析:识别并保留所有注释 Token
语法分析:在构建 CST 时收集注释
关联:根据注释类型和位置关联到对应的节点
存储:将注释存储在节点的 comments 字段中
CST 中的注释字段
每个 CST 节点都有一个 comments 字段:
pub struct Node {
pub comments: Vec<Comment>,
// ... 其他字段
}
Comment 类型定义:
pub enum Comment {
Line(String),
Doc(String),
Module(String),
}