UNPKG

espree

Version:

An Esprima-compatible JavaScript parser built on Acorn

119 lines (108 loc) 3.41 kB
/** * @import * as acorn from "acorn"; * @import { Options, EspreeTokens } from "../espree.js"; */ /** * @typedef {acorn.tokTypes & { * jsxName: acorn.TokenType, * jsxText: acorn.TokenType, * jsxTagEnd: acorn.TokenType, * jsxTagStart: acorn.TokenType * }} TokTypes */ /** * @typedef {new ( * token: string, * isExpr: boolean, * preserveSpace: boolean, * override?: (parser: any) => void * ) => void} TokContext */ /** * @typedef {{ * tc_oTag: TokContext, * tc_cTag: TokContext, * tc_expr: TokContext * }} TokContexts */ /** * @typedef {{ * generator?: boolean * } & acorn.Node} EsprimaNode */ /** * @typedef {"Block"|"Hashbang"|"Line"} CommentType */ /** * @typedef {{ * tokenize: () => EspreeTokens, * parse: () => acorn.Program * }} EspreeParser */ /* eslint-disable jsdoc/valid-types -- Waiting on jsdoc plugin update */ /** * @typedef {acorn.Parser & { * jsx_readToken(): string; * jsx_readNewLine(normalizeCRLF: boolean): void; * jsx_readString(quote: number): void; * jsx_readEntity(): string; * jsx_readWord(): void; * jsx_parseIdentifier(): acorn.Node; * jsx_parseNamespacedName(): acorn.Node; * jsx_parseElementName(): acorn.Node | string; * jsx_parseAttributeValue(): acorn.Node; * jsx_parseEmptyExpression(): acorn.Node; * jsx_parseExpressionContainer(): acorn.Node; * jsx_parseAttribute(): acorn.Node; * jsx_parseOpeningElementAt(startPos: number, startLoc?: acorn.SourceLocation): acorn.Node; * jsx_parseClosingElementAt(startPos: number, startLoc?: acorn.SourceLocation): acorn.Node; * jsx_parseElementAt(startPos: number, startLoc?: acorn.SourceLocation): acorn.Node; * jsx_parseText(): acorn.Node; * jsx_parseElement(): acorn.Node; * }} AcornJsxParser */ /** * We pick (statics) from acorn rather than plain extending to avoid complaint * about base constructors needing the same return type (i.e., we return * `AcornJsxParser` here) * @typedef {Pick<typeof acorn.Parser, keyof typeof acorn.Parser> & { * readonly acornJsx: { * tokTypes: TokTypes; * tokContexts: TokContexts * }; * new (options: acorn.Options, input: string, startPos?: number): AcornJsxParser; * }} AcornJsxParserCtor */ /** * @typedef {{ * new (opts: Options | null | undefined, code: string | object): EspreeParser * } & Pick<typeof acorn.Parser, keyof typeof acorn.Parser>} EspreeParserCtor */ /** * @typedef {{ * new (opts: Options | null | undefined, code: string | object): EspreeParser * } & Pick<AcornJsxParserCtor, keyof AcornJsxParserCtor>} EspreeParserJsxCtor */ /** * @typedef {Pick<AcornJsxParserCtor, keyof AcornJsxParserCtor> & { * acorn: { * tokTypes: TokTypes, * getLineInfo: (input: string, pos: number) => { * line: number, * column: number * } * } * new (options: acorn.Options, input: string, startPos?: number): AcornJsxParser & { * next: () => void, * type: acorn.TokenType, * curLine: number, * start: number, * end: number, * finishNode (node: acorn.Node, type: string): acorn.Node, * finishNodeAt (node: acorn.Node, type: string, pos: number, loc: acorn.Position): acorn.Node, * parseTopLevel (node: acorn.Node): acorn.Node, * nextToken (): void * } * }} AcornJsxParserCtorEnhanced */ /* eslint-enable jsdoc/valid-types -- Bug in older versions */