1export as namespace acorn
2export = acorn
3
4declare namespace acorn {
5  function parse(input: string, options?: Options): Node
6
7  function parseExpressionAt(input: string, pos?: number, options?: Options): Node
8
9  function tokenizer(input: string, options?: Options): {
10    getToken(): Token
11    [Symbol.iterator](): Iterator<Token>
12  }
13
14  interface Options {
15    ecmaVersion?: 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 2015 | 2016 | 2017 | 2018 | 2019 | 2020
16    sourceType?: 'script' | 'module'
17    onInsertedSemicolon?: (lastTokEnd: number, lastTokEndLoc?: Position) => void
18    onTrailingComma?: (lastTokEnd: number, lastTokEndLoc?: Position) => void
19    allowReserved?: boolean | 'never'
20    allowReturnOutsideFunction?: boolean
21    allowImportExportEverywhere?: boolean
22    allowAwaitOutsideFunction?: boolean
23    allowHashBang?: boolean
24    locations?: boolean
25    onToken?: ((token: Token) => any) | Token[]
26    onComment?: ((
27      isBlock: boolean, text: string, start: number, end: number, startLoc?: Position,
28      endLoc?: Position
29    ) => void) | Comment[]
30    ranges?: boolean
31    program?: Node
32    sourceFile?: string
33    directSourceFile?: string
34    preserveParens?: boolean
35  }
36
37  class Parser {
38    constructor(options: Options, input: string, startPos?: number)
39    parse(this: Parser): Node
40    static parse(this: typeof Parser, input: string, options?: Options): Node
41    static parseExpressionAt(this: typeof Parser, input: string, pos: number, options?: Options): Node
42    static tokenizer(this: typeof Parser, input: string, options?: Options): {
43      getToken(): Token
44      [Symbol.iterator](): Iterator<Token>
45    }
46    static extend(this: typeof Parser, ...plugins: ((BaseParser: typeof Parser) => typeof Parser)[]): typeof Parser
47  }
48
49  interface Position { line: number; column: number; offset: number }
50
51  const defaultOptions: Options
52
53  function getLineInfo(input: string, offset: number): Position
54
55  class SourceLocation {
56    start: Position
57    end: Position
58    source?: string | null
59    constructor(p: Parser, start: Position, end: Position)
60  }
61
62  class Node {
63    type: string
64    start: number
65    end: number
66    loc?: SourceLocation
67    sourceFile?: string
68    range?: [number, number]
69    constructor(parser: Parser, pos: number, loc?: SourceLocation)
70  }
71
72  class TokenType {
73    label: string
74    keyword: string
75    beforeExpr: boolean
76    startsExpr: boolean
77    isLoop: boolean
78    isAssign: boolean
79    prefix: boolean
80    postfix: boolean
81    binop: number
82    updateContext?: (prevType: TokenType) => void
83    constructor(label: string, conf?: any)
84  }
85
86  const tokTypes: {
87    num: TokenType
88    regexp: TokenType
89    string: TokenType
90    name: TokenType
91    eof: TokenType
92    bracketL: TokenType
93    bracketR: TokenType
94    braceL: TokenType
95    braceR: TokenType
96    parenL: TokenType
97    parenR: TokenType
98    comma: TokenType
99    semi: TokenType
100    colon: TokenType
101    dot: TokenType
102    question: TokenType
103    arrow: TokenType
104    template: TokenType
105    ellipsis: TokenType
106    backQuote: TokenType
107    dollarBraceL: TokenType
108    eq: TokenType
109    assign: TokenType
110    incDec: TokenType
111    prefix: TokenType
112    logicalOR: TokenType
113    logicalAND: TokenType
114    bitwiseOR: TokenType
115    bitwiseXOR: TokenType
116    bitwiseAND: TokenType
117    equality: TokenType
118    relational: TokenType
119    bitShift: TokenType
120    plusMin: TokenType
121    modulo: TokenType
122    star: TokenType
123    slash: TokenType
124    starstar: TokenType
125    _break: TokenType
126    _case: TokenType
127    _catch: TokenType
128    _continue: TokenType
129    _debugger: TokenType
130    _default: TokenType
131    _do: TokenType
132    _else: TokenType
133    _finally: TokenType
134    _for: TokenType
135    _function: TokenType
136    _if: TokenType
137    _return: TokenType
138    _switch: TokenType
139    _throw: TokenType
140    _try: TokenType
141    _var: TokenType
142    _const: TokenType
143    _while: TokenType
144    _with: TokenType
145    _new: TokenType
146    _this: TokenType
147    _super: TokenType
148    _class: TokenType
149    _extends: TokenType
150    _export: TokenType
151    _import: TokenType
152    _null: TokenType
153    _true: TokenType
154    _false: TokenType
155    _in: TokenType
156    _instanceof: TokenType
157    _typeof: TokenType
158    _void: TokenType
159    _delete: TokenType
160  }
161
162  class TokContext {
163    constructor(token: string, isExpr: boolean, preserveSpace: boolean, override?: (p: Parser) => void)
164  }
165
166  const tokContexts: {
167    b_stat: TokContext
168    b_expr: TokContext
169    b_tmpl: TokContext
170    p_stat: TokContext
171    p_expr: TokContext
172    q_tmpl: TokContext
173    f_expr: TokContext
174  }
175
176  function isIdentifierStart(code: number, astral?: boolean): boolean
177
178  function isIdentifierChar(code: number, astral?: boolean): boolean
179
180  interface AbstractToken {
181  }
182
183  interface Comment extends AbstractToken {
184    type: string
185    value: string
186    start: number
187    end: number
188    loc?: SourceLocation
189    range?: [number, number]
190  }
191
192  class Token {
193    type: TokenType
194    value: any
195    start: number
196    end: number
197    loc?: SourceLocation
198    range?: [number, number]
199    constructor(p: Parser)
200  }
201
202  function isNewLine(code: number): boolean
203
204  const lineBreak: RegExp
205
206  const lineBreakG: RegExp
207
208  const version: string
209}
210