diff options
Diffstat (limited to 'src/compiler/parse')
-rw-r--r-- | src/compiler/parse/acorn.ts | 65 | ||||
-rw-r--r-- | src/compiler/parse/read/expression.ts | 1 |
2 files changed, 47 insertions, 19 deletions
diff --git a/src/compiler/parse/acorn.ts b/src/compiler/parse/acorn.ts index 966a13792..b88454151 100644 --- a/src/compiler/parse/acorn.ts +++ b/src/compiler/parse/acorn.ts @@ -1,20 +1,49 @@ -import { Node } from 'acorn'; -import acorn from 'acorn'; -// @ts-ignore -import jsx from 'acorn-jsx'; +import type { Node } from 'acorn'; +import { parseExpression } from '@babel/parser'; +// import acorn from 'acorn'; +// // @ts-ignore +// import jsx from 'acorn-jsx'; +// const acornJsx = acorn.Parser.extend(jsx()); -const acornJsx = acorn.Parser.extend(jsx()); +export const parse = (source: string): Node => { + throw new Error('No longer used.'); + // acorn.parse(source, { + // sourceType: 'module', + // ecmaVersion: 2020, + // locations: true, + // }); +}; -export const parse = (source: string): Node => - acorn.parse(source, { - sourceType: 'module', - ecmaVersion: 2020, - locations: true, - }); - -export const parse_expression_at = (source: string, index: number): Node => - acornJsx.parseExpressionAt(source, index, { - sourceType: 'module', - ecmaVersion: 2020, - locations: true, - }); +export const parse_expression_at = (source: string, index: number) => { + // TODO: Clean up after acorn -> @babel/parser move + try { + parseExpression(source.slice(index), { + sourceType: 'module', + plugins: ['jsx', 'typescript'], + }); + throw new Error('Parse error.'); // Expected to fail. + } catch (err) { + if (!err.pos) { + throw err; + } + try { + const result = parseExpression(source.slice(index, index + err.pos), { + sourceType: 'module', + plugins: ['jsx', 'typescript'], + }); + result.start = index; + result.end = index + err.pos; + return result; + } catch (err2) { + if (err2.pos) { + err2.pos = index + err2.pos; + } + throw err2; + } + } +}; +// acornJsx.parseExpressionAt(source, index, { +// sourceType: 'module', +// ecmaVersion: 2020, +// locations: true, +// }); diff --git a/src/compiler/parse/read/expression.ts b/src/compiler/parse/read/expression.ts index 56e79265d..827a29721 100644 --- a/src/compiler/parse/read/expression.ts +++ b/src/compiler/parse/read/expression.ts @@ -8,7 +8,6 @@ import { whitespace } from '../../utils/patterns.js'; export default function read_expression(parser: Parser): string { try { const node = parse_expression_at(parser.template, parser.index); - let num_parens = 0; for (let i = parser.index; i < node.start; i += 1) { |