97 lines
2.4 KiB
TypeScript
97 lines
2.4 KiB
TypeScript
import { Token } from './ast';
|
|
import type { Source } from './source';
|
|
import { TokenKind } from './tokenKind';
|
|
/**
|
|
* A Lexer interface which provides common properties and methods required for
|
|
* lexing GraphQL source.
|
|
*
|
|
* @internal
|
|
*/
|
|
export interface LexerInterface {
|
|
source: Source;
|
|
lastToken: Token;
|
|
token: Token;
|
|
line: number;
|
|
lineStart: number;
|
|
advance: () => Token;
|
|
lookahead: () => Token;
|
|
}
|
|
/**
|
|
* Given a Source object, creates a Lexer for that source.
|
|
* A Lexer is a stateful stream generator in that every time
|
|
* it is advanced, it returns the next token in the Source. Assuming the
|
|
* source lexes, the final Token emitted by the lexer will be of kind
|
|
* EOF, after which the lexer will repeatedly return the same EOF token
|
|
* whenever called.
|
|
*/
|
|
export declare class Lexer implements LexerInterface {
|
|
source: Source;
|
|
/**
|
|
* The previously focused non-ignored token.
|
|
*/
|
|
lastToken: Token;
|
|
/**
|
|
* The currently focused non-ignored token.
|
|
*/
|
|
token: Token;
|
|
/**
|
|
* The (1-indexed) line containing the current token.
|
|
*/
|
|
line: number;
|
|
/**
|
|
* The character offset at which the current line begins.
|
|
*/
|
|
lineStart: number;
|
|
constructor(source: Source);
|
|
get [Symbol.toStringTag](): string;
|
|
/**
|
|
* Advances the token stream to the next non-ignored token.
|
|
*/
|
|
advance(): Token;
|
|
/**
|
|
* Looks ahead and returns the next non-ignored token, but does not change
|
|
* the state of Lexer.
|
|
*/
|
|
lookahead(): Token;
|
|
}
|
|
/**
|
|
* @internal
|
|
*/
|
|
export declare function isPunctuatorTokenKind(kind: TokenKind): boolean;
|
|
/**
|
|
* Prints the code point (or end of file reference) at a given location in a
|
|
* source for use in error messages.
|
|
*
|
|
* Printable ASCII is printed quoted, while other points are printed in Unicode
|
|
* code point form (ie. U+1234).
|
|
*
|
|
* @internal
|
|
*/
|
|
export declare function printCodePointAt(
|
|
lexer: LexerInterface,
|
|
location: number,
|
|
): string;
|
|
/**
|
|
* Create a token with line and column location information.
|
|
*
|
|
* @internal
|
|
*/
|
|
export declare function createToken(
|
|
lexer: LexerInterface,
|
|
kind: TokenKind,
|
|
start: number,
|
|
end: number,
|
|
value?: string,
|
|
): Token;
|
|
/**
|
|
* Reads an alphanumeric + underscore name from the source.
|
|
*
|
|
* ```
|
|
* Name ::
|
|
* - NameStart NameContinue* [lookahead != NameContinue]
|
|
* ```
|
|
*
|
|
* @internal
|
|
*/
|
|
export declare function readName(lexer: LexerInterface, start: number): Token;
|