注释关联规则

解析器在构建 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),
}