mirror of
https://github.com/swc-project/swc.git
synced 2024-12-23 05:32:09 +03:00
111 lines
2.2 KiB
TypeScript
111 lines
2.2 KiB
TypeScript
// Loaded from https://deno.land/x/graphql_deno@v15.0.0/lib/language/ast.js
|
|
|
|
|
|
import defineToJSON from '../jsutils/defineToJSON.js';
|
|
|
|
/**
|
|
* Contains a range of UTF-8 character offsets and token references that
|
|
* identify the region of the source from which the AST derived.
|
|
*/
|
|
export class Location {
|
|
/**
|
|
* The character offset at which this Node begins.
|
|
*/
|
|
|
|
/**
|
|
* The character offset at which this Node ends.
|
|
*/
|
|
|
|
/**
|
|
* The Token at which this Node begins.
|
|
*/
|
|
|
|
/**
|
|
* The Token at which this Node ends.
|
|
*/
|
|
|
|
/**
|
|
* The Source document the AST represents.
|
|
*/
|
|
constructor(startToken, endToken, source) {
|
|
this.start = startToken.start;
|
|
this.end = endToken.end;
|
|
this.startToken = startToken;
|
|
this.endToken = endToken;
|
|
this.source = source;
|
|
}
|
|
|
|
} // Print a simplified form when appearing in JSON/util.inspect.
|
|
|
|
defineToJSON(Location, function () {
|
|
return {
|
|
start: this.start,
|
|
end: this.end
|
|
};
|
|
});
|
|
/**
|
|
* Represents a range of characters represented by a lexical token
|
|
* within a Source.
|
|
*/
|
|
|
|
export class Token {
|
|
/**
|
|
* The kind of Token.
|
|
*/
|
|
|
|
/**
|
|
* The character offset at which this Node begins.
|
|
*/
|
|
|
|
/**
|
|
* The character offset at which this Node ends.
|
|
*/
|
|
|
|
/**
|
|
* The 1-indexed line number on which this Token appears.
|
|
*/
|
|
|
|
/**
|
|
* The 1-indexed column number at which this Token begins.
|
|
*/
|
|
|
|
/**
|
|
* For non-punctuation tokens, represents the interpreted value of the token.
|
|
*/
|
|
|
|
/**
|
|
* Tokens exist as nodes in a double-linked-list amongst all tokens
|
|
* including ignored tokens. <SOF> is always the first node and <EOF>
|
|
* the last.
|
|
*/
|
|
constructor(kind, start, end, line, column, prev, value) {
|
|
this.kind = kind;
|
|
this.start = start;
|
|
this.end = end;
|
|
this.line = line;
|
|
this.column = column;
|
|
this.value = value;
|
|
this.prev = prev;
|
|
this.next = null;
|
|
}
|
|
|
|
} // Print a simplified form when appearing in JSON/util.inspect.
|
|
|
|
defineToJSON(Token, function () {
|
|
return {
|
|
kind: this.kind,
|
|
value: this.value,
|
|
line: this.line,
|
|
column: this.column
|
|
};
|
|
});
|
|
/**
|
|
* @internal
|
|
*/
|
|
|
|
export function isNode(maybeNode) {
|
|
return maybeNode != null && typeof maybeNode.kind === 'string';
|
|
}
|
|
/**
|
|
* The list of all possible AST node types.
|
|
*/ |