Trivia (called that because it's
trivial) represent the parts of the source text that are largely insignificant for normal understanding of the code. For example; whitespace, comments, and even conflict markers. Trivia is not stored in the AST (to keep it lightweight). However, it can be fetched on demand using a few
Before we show them you need to understand the following:
A token owns any trivia after it on the same line upto the next token.
Any comment after that line is associated with the following token.
For leading and ending comments in a file:
The first token in the source file gets all the initial trivia.
The last sequence of trivia in the file is tacked onto the end-of-file token, which otherwise has zero width.
For most basic uses, comments are the "interesting" trivia. The comments that belong to a Node can be fetched through the following functions:
Given the source text and position within that text, returns ranges of comments between the first line break following the given position and the token itself (probably most useful with
Given the source text and position within that text, returns ranges of comments until the first line break following the given position (probably most useful with
As an example, imagine this portion of a source file:
getLeadingCommentRanges for the
function will only return the last 2 comments
getTrailingCommentRanges on the end of the debugger statement will extract the
Nodes have what is called a "token start" and a "full start".
Token Start: the more natural version, which is the position in file where the text of a token begins
Full Start: the point at which the scanner began scanning since the last significant token
AST nodes have an API for
getFullStart. In the following example:
function the token start is at
function whereas full start is at
/*hello*/. Note that full start even includes the trivia that would otherwise be owned by the previous node.