Skip to content

Commit e6ced8d

Browse files
authored
Merge pull request #1234 from Quramy/resolve_reference_to_call_expression
feat: Resolve interpolation referring call expression
2 parents c169298 + d0edd93 commit e6ced8d

File tree

3 files changed

+62
-0
lines changed

3 files changed

+62
-0
lines changed

src/ts-ast-util/__snapshots__/template-expression-resolver.test.ts.snap

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,3 +68,20 @@ exports[`resolve string combinination pattern should return combined string with
6868
...Foo
6969
}"
7070
`;
71+
72+
exports[`resolve string combinination pattern should return combined string with template in call expression 1`] = `
73+
"
74+
75+
76+
fragment Foo on Hoge {
77+
name
78+
}
79+
80+
fragment Piyo on Hoge {
81+
...Foo
82+
}
83+
84+
query {
85+
...Piyo
86+
}"
87+
`;

src/ts-ast-util/template-expression-resolver.test.ts

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -505,6 +505,44 @@ describe(TemplateExpressionResolver.prototype.resolve, () => {
505505
expect(actual?.combinedText).toMatchSnapshot();
506506
});
507507

508+
it('should return combined string with template in call expression', () => {
509+
const langService = createTestingLanguageService({
510+
files: [
511+
{
512+
fileName: 'main.ts',
513+
content: `
514+
const fragment1 = gql(\`
515+
fragment Foo on Hoge {
516+
name
517+
}
518+
\`);
519+
const fragment2 = gql(\`
520+
\${fragment1}
521+
fragment Piyo on Hoge {
522+
...Foo
523+
}
524+
\`);
525+
const query = \`
526+
\${fragment2}
527+
query {
528+
...Piyo
529+
}\`;
530+
`,
531+
},
532+
],
533+
});
534+
const source = langService.getProgram()!.getSourceFile('main.ts');
535+
if (!source) return fail();
536+
const [, node] = findAllNodes(source, node => ts.isTemplateExpression(node));
537+
const resolver = new TemplateExpressionResolver(
538+
langService,
539+
() => '',
540+
() => false,
541+
);
542+
const actual = resolver.resolve('main.ts', node as ts.TemplateExpression).resolvedInfo;
543+
expect(actual?.combinedText).toMatchSnapshot();
544+
});
545+
508546
it('should return combined string with hopping reference', () => {
509547
const langService = createTestingLanguageService({
510548
files: [

src/ts-ast-util/template-expression-resolver.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -371,6 +371,13 @@ export class TemplateExpressionResolver {
371371
} else {
372372
return setValueToCache(getValueForTemplateExpression(node.template, dependencies));
373373
}
374+
} else if (ts.isCallExpression(node) && ts.isIdentifier(node.expression) && node.arguments.length > 0) {
375+
const firstArgNode = node.arguments[0];
376+
if (ts.isNoSubstitutionTemplateLiteral(firstArgNode)) {
377+
return setValueToCache({ text: firstArgNode.text, dependencies });
378+
} else if (ts.isTemplateExpression(firstArgNode)) {
379+
return setValueToCache(getValueForTemplateExpression(firstArgNode, dependencies));
380+
}
374381
} else if (ts.isTemplateExpression(node)) {
375382
return setValueToCache(getValueForTemplateExpression(node, dependencies));
376383
}

0 commit comments

Comments
 (0)