Skip to main content

Trivia

Trivia 表示源文本中对于正常理解代码而言基本上无关紧要的部分。例如; 空格、注释,甚至是冲突标记。Trivia 不存储在 AST (以保持轻量级)。 然而,它可以使用一些 API 按需获取。ts.*

Trivia 所有权

一般来说:

  • 一个 Token 拥有它之后在同一行直到下一个 Token 的任何 Trivia
  • 该行之后的任何注释都与以下标记相关联。

对于文件中的前导和结束注释:

  • 源文件中的第一个标记获取所有初始 Trivia
  • 文件中最后的琐事序列被附加到文件结尾标记上,否则该标记的宽度为零。

Trivia APIs

对于大多数基本用途,注释是“有趣”的琐事。可以通过以下函数获取属于 Node 的评论:

功能描述
ts.getLeadingCommentRanges给定源文本和该文本中的位置,返回给定位置之后的第一个换行符和标记本身之间的注释范围(可能对 最有用 ts.Node.getFullStart)。
ts.getTrailingCommentRanges给定源文本和该文本中的位置,返回注释范围,直到给定位置之后的第一个换行符(可能对 最有用 ts.Node.getEnd)。

例如,想象一下源文件的这一部分:


debugger;/_hello_/
//bye
/_hi_/ function

getLeadingCommentRanges 因为 function 只会返回最后 2 条注释 //bye/_hi_/

适当地,在调试器语句的末尾调用 getTrailingCommentRanges 将提取 /_hello_/ 注释。

Token Start/Full Start

节点具有所谓的 “令牌启动” 和 “完全启动” 。

  • Token Start:更自然的版本,它是文件中标记文本开始的位置。
  • Full Start:扫描器从最后一个重要令牌开始扫描的点。

AST 节点有一个用于 getStartgetFullStart。在以下示例中:


debugger;/_hello_/
//bye
/_hi_/ function

因为 function token 开始是在, functionFull Start 是在 /_hello_/ 。请注意,Full Start 甚至包括原本由前一个节点拥有的 Trivia