用途:该技能用于 Biome 中提取或存储 AST/CST 源码文本,处理 SyntaxNode、SyntaxToken、TokenText、带引号字符串、token 相对范围等。核心原则是使用强类型语法 API 并保留源码归属,而不是把语法文本转成普通字符串。
主要能力与用法:
- 文本访问器:SyntaxToken::text_trimmed() 返回不含首尾 trivia 的 &str;token_text_trimmed() 返回 TokenText;text() 返回含 trivia 的精确源码文本;inner_string_text(token) 返回去引号内容;HtmlString::inner_string_text() 返回去引号的 TokenText。注意 SyntaxNode::text_trimmed() 只去除外层 trivia,子 token 间的空白和注释仍保留,不能当作多 token 节点的语义访问器。
- 比较文本时借用 &str 或保留 TokenText,不要用 .to_string()、.to_trimmed_string() 或 format!。
- 带引号字符串:使用 syntax crate 的 inner_string_text(),不要用字节切片手动去引号。
- 无分配存储子串:TokenText 存有 green token 加 token 相对 TextRange,可用 slice()、relative_range()、source_range() 处理,相对范围基于当前 TokenText,而非文件。
- 嵌入语言:按框架和语法版本确认取值形态,如 HTML 属性可能为带引号 HtmlString、单一文本表达式或框架指令节点。解析、语法辅助、嵌入范围转换、分析器消费需分层处理。
- 临时借用:链式调用可能过早释放所有者时,绑定中间值,不要为借用错误改成 String。
- 强类型节点:函数参数优先用 AnyJsExpression、JsCallExpression 等强类型节点,而非 JsSyntaxNode,可用 declare_node_union! 定义节点集合。
限制:需先查看对应语言的 parser quick test 并搜索生成的节点定义与现有用法,不可凭源码拼写推断 AST 结构;每处相关联合成员和框架特定表示都要检查;仅当任务需要且当前 parser 支持时才处理旧语法。参考资料位于 crates/biome_rowan/src/token_text.rs、crates/biome_rowan/src/syntax/token.rs、crates/biome_rowan/src/syntax/node.rs、crates/biome_html_syntax/src/string_ext.rs 及各 crates/biome_*_syntax/src/ 模块。