Skip to content

Commit bbed70d

Browse files
authored
Merge pull request #1267 from vuejs/support-expression-statement-fn-block
Support statement expression in arrow function block
2 parents 4af0623 + 02039f0 commit bbed70d

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

server/src/services/typescriptService/test/transformTemplate.test.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,10 @@ suite('transformTemplate', () => {
112112
);
113113
});
114114

115+
test('ArrowFunction: statement block', () => {
116+
check('(bar) => { foo + bar; }', '(bar) => { this.foo + bar; }');
117+
});
118+
115119
test('TemplateExpression', () => {
116120
check('`font-size: ${size}px`', '`font-size: ${this.size}px`');
117121
});

server/src/services/typescriptService/transformTemplate.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -627,14 +627,24 @@ export function getTemplateTransformFunctions(ts: T_TypeScript) {
627627
res = ts.createArrayLiteral(exp.elements.map(e => injectThis(e, scope, start)));
628628
} else if (ts.isSpreadElement(exp)) {
629629
res = ts.createSpread(injectThis(exp.expression, scope, start));
630-
} else if (ts.isArrowFunction(exp) && !ts.isBlock(exp.body)) {
630+
} else if (ts.isArrowFunction(exp)) {
631+
const fnScope = scope.concat(flatMap(exp.parameters, collectScope));
632+
const body = ts.isBlock(exp.body)
633+
? ts.createBlock(
634+
// Only handle expression statement
635+
exp.body.statements.filter(ts.isExpressionStatement).map(st => {
636+
return ts.createExpressionStatement(injectThis(st.expression, fnScope, start));
637+
})
638+
)
639+
: injectThis(exp.body, fnScope, start);
640+
631641
res = ts.createArrowFunction(
632642
exp.modifiers,
633643
exp.typeParameters,
634644
exp.parameters,
635645
exp.type,
636646
exp.equalsGreaterThanToken,
637-
injectThis(exp.body, scope.concat(flatMap(exp.parameters, collectScope)), start)
647+
body
638648
);
639649
} else if (ts.isTemplateExpression(exp)) {
640650
const injectedSpans = exp.templateSpans.map(span => {

0 commit comments

Comments
 (0)