Skip to content

Commit 47ace35

Browse files
committed
refactor
1 parent 2c55d0c commit 47ace35

8 files changed

+59
-51
lines changed

src/parser/converts/attr.ts

Lines changed: 52 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -433,10 +433,13 @@ function convertTransitionDirective(
433433
ctx,
434434
null
435435
),
436-
processName: {
437-
convert: (name) => ctx.scriptLet.addExpression(name, directive.key),
438-
expected: ["Identifier"],
439-
},
436+
processName: (name) =>
437+
ctx.scriptLet.addExpression(
438+
name,
439+
directive.key,
440+
null,
441+
buildExpressionTypeChecker(["Identifier"], ctx)
442+
),
440443
});
441444
return directive;
442445
}
@@ -461,10 +464,13 @@ function convertAnimationDirective(
461464
ctx,
462465
null
463466
),
464-
processName: {
465-
convert: (name) => ctx.scriptLet.addExpression(name, directive.key),
466-
expected: ["Identifier"],
467-
},
467+
processName: (name) =>
468+
ctx.scriptLet.addExpression(
469+
name,
470+
directive.key,
471+
null,
472+
buildExpressionTypeChecker(["Identifier"], ctx)
473+
),
468474
});
469475
return directive;
470476
}
@@ -489,10 +495,13 @@ function convertActionDirective(
489495
ctx,
490496
null
491497
),
492-
processName: {
493-
convert: (name) => ctx.scriptLet.addExpression(name, directive.key),
494-
expected: ["Identifier", "MemberExpression"],
495-
},
498+
processName: (name) =>
499+
ctx.scriptLet.addExpression(
500+
name,
501+
directive.key,
502+
null,
503+
buildExpressionTypeChecker(["Identifier", "MemberExpression"], ctx)
504+
),
496505
});
497506
return directive;
498507
}
@@ -519,17 +528,14 @@ function convertLetDirective(
519528
},
520529
processName: node.expression
521530
? undefined
522-
: {
523-
convert: (name) => {
524-
// shorthand
525-
ctx.letDirCollections
526-
.getCollection()
527-
.addPattern(name, directive, "any", (es) => {
528-
directive.expression = es;
529-
});
530-
return [];
531-
},
532-
expected: [],
531+
: (name) => {
532+
// shorthand
533+
ctx.letDirCollections
534+
.getCollection()
535+
.addPattern(name, directive, "any", (es) => {
536+
directive.expression = es;
537+
});
538+
return [];
533539
},
534540
});
535541
return directive;
@@ -546,25 +552,19 @@ type DirectiveProcessors<
546552
shorthand: boolean
547553
) => ScriptLetCallback<NonNullable<E>>[];
548554
processPattern?: undefined;
549-
processName?: {
550-
convert: (
551-
expression: SvelteName
552-
) => ScriptLetCallback<Exclude<S["key"]["name"], SvelteName>>[];
553-
expected: Exclude<S["key"]["name"], SvelteName>["type"][];
554-
};
555+
processName?: (
556+
expression: SvelteName
557+
) => ScriptLetCallback<Exclude<S["key"]["name"], SvelteName>>[];
555558
}
556559
| {
557560
processExpression?: undefined;
558561
processPattern: (
559562
expression: E,
560563
shorthand: boolean
561564
) => ScriptLetCallback<NonNullable<E>>[];
562-
processName?: {
563-
convert: (
564-
expression: SvelteName
565-
) => ScriptLetCallback<Exclude<S["key"]["name"], SvelteName>>[];
566-
expected: Exclude<S["key"]["name"], SvelteName>["type"][];
567-
};
565+
processName?: (
566+
expression: SvelteName
567+
) => ScriptLetCallback<Exclude<S["key"]["name"], SvelteName>>[];
568568
};
569569

570570
/** Common process for directive */
@@ -682,15 +682,7 @@ function processDirectiveExpression<
682682
}
683683
if (!shorthand) {
684684
if (processors.processName) {
685-
const { convert, expected } = processors.processName;
686-
convert(keyName).push((es) => {
687-
if (!expected.includes(es.type)) {
688-
throw new ParseError(
689-
`Expected JS ${expected.join(", or ")}.`,
690-
es.range![0],
691-
ctx
692-
);
693-
}
685+
processors.processName(keyName).push((es) => {
694686
key.name = es;
695687
});
696688
} else {
@@ -712,3 +704,19 @@ function buildProcessExpressionForExpression(
712704
return ctx.scriptLet.addExpression(expression, directive, typing);
713705
};
714706
}
707+
708+
/** Push expression type checker to script let callbacks */
709+
function buildExpressionTypeChecker<T extends ESTree.Expression>(
710+
expected: T["type"][],
711+
ctx: Context
712+
): ScriptLetCallback<T> {
713+
return (node) => {
714+
if (!expected.includes(node.type)) {
715+
throw new ParseError(
716+
`Expected JS ${expected.join(", or ")}, but ${node.type} found.`,
717+
node.range![0],
718+
ctx
719+
);
720+
}
721+
};
722+
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"index": 476,
33
"lineNumber": 17,
4-
"message": "Expected JS Identifier.",
4+
"message": "Expected JS Identifier, but MemberExpression found.",
55
"column": 13
66
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"index": 212,
33
"lineNumber": 13,
4-
"message": "Expected JS Identifier.",
4+
"message": "Expected JS Identifier, but MemberExpression found.",
55
"column": 7
66
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"index": 213,
33
"lineNumber": 13,
4-
"message": "Expected JS Identifier.",
4+
"message": "Expected JS Identifier, but MemberExpression found.",
55
"column": 8
66
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"index": 210,
33
"lineNumber": 13,
4-
"message": "Expected JS Identifier.",
4+
"message": "Expected JS Identifier, but MemberExpression found.",
55
"column": 15
66
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"index": 117,
33
"lineNumber": 7,
4-
"message": "Expected JS Identifier, or MemberExpression.",
4+
"message": "Expected JS Identifier, or MemberExpression, but CallExpression found.",
55
"column": 9
66
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"index": 95,
33
"lineNumber": 7,
4-
"message": "Expected JS Identifier, or MemberExpression.",
4+
"message": "Expected JS Identifier, or MemberExpression, but CallExpression found.",
55
"column": 9
66
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"index": 85,
33
"lineNumber": 7,
4-
"message": "Expected JS Identifier.",
4+
"message": "Expected JS Identifier, but BinaryExpression found.",
55
"column": 15
66
}

0 commit comments

Comments
 (0)