Skip to content

Commit ee9138f

Browse files
authored
Improved parsing error (#145)
1 parent 13562bc commit ee9138f

16 files changed

+181
-728
lines changed

src/parser/converts/attr.ts

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,14 @@ function convertStyleDirective(
381381
directive.key,
382382
null,
383383
(expression) => {
384-
directive.key.name = expression as ESTree.Identifier
384+
if (expression.type !== "Identifier") {
385+
throw new ParseError(
386+
`Expected JS identifier or attribute value.`,
387+
expression.range![0],
388+
ctx,
389+
)
390+
}
391+
directive.key.name = expression
385392
},
386393
)
387394
return directive
@@ -627,12 +634,26 @@ function processDirectiveExpression<
627634
getWithLoc(node.expression).end = keyName.range[1]
628635
}
629636
processors.processExpression(node.expression, shorthand).push((es) => {
637+
if (node.expression && es.type !== node.expression.type) {
638+
throw new ParseError(
639+
`Expected ${node.expression.type}, but ${es.type} found.`,
640+
es.range![0],
641+
ctx,
642+
)
643+
}
630644
directive.expression = es
631645
})
632646
}
633647
if (!shorthand) {
634648
if (processors.processName) {
635649
processors.processName(keyName).push((es) => {
650+
if (es.type !== "Identifier") {
651+
throw new ParseError(
652+
`Expected JS identifier.`,
653+
es.range![0],
654+
ctx,
655+
)
656+
}
636657
key.name = es
637658
})
638659
} else {

tests/fixtures/parser/ast/illegal/dot-in-bind02-no-undef-result.json

Lines changed: 0 additions & 8 deletions
This file was deleted.

0 commit comments

Comments
 (0)