Skip to content

Commit

Permalink
Merge pull request #1234 from Quramy/resolve_reference_to_call_expres…
Browse files Browse the repository at this point in the history
…sion

feat: Resolve interpolation referring call expression
  • Loading branch information
Quramy committed Mar 15, 2024
2 parents c169298 + d0edd93 commit e6ced8d
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 0 deletions.
Expand Up @@ -68,3 +68,20 @@ exports[`resolve string combinination pattern should return combined string with
...Foo
}"
`;

exports[`resolve string combinination pattern should return combined string with template in call expression 1`] = `
"
fragment Foo on Hoge {
name
}
fragment Piyo on Hoge {
...Foo
}
query {
...Piyo
}"
`;
38 changes: 38 additions & 0 deletions src/ts-ast-util/template-expression-resolver.test.ts
Expand Up @@ -505,6 +505,44 @@ describe(TemplateExpressionResolver.prototype.resolve, () => {
expect(actual?.combinedText).toMatchSnapshot();
});

it('should return combined string with template in call expression', () => {
const langService = createTestingLanguageService({
files: [
{
fileName: 'main.ts',
content: `
const fragment1 = gql(\`
fragment Foo on Hoge {
name
}
\`);
const fragment2 = gql(\`
\${fragment1}
fragment Piyo on Hoge {
...Foo
}
\`);
const query = \`
\${fragment2}
query {
...Piyo
}\`;
`,
},
],
});
const source = langService.getProgram()!.getSourceFile('main.ts');
if (!source) return fail();
const [, node] = findAllNodes(source, node => ts.isTemplateExpression(node));
const resolver = new TemplateExpressionResolver(
langService,
() => '',
() => false,
);
const actual = resolver.resolve('main.ts', node as ts.TemplateExpression).resolvedInfo;
expect(actual?.combinedText).toMatchSnapshot();
});

it('should return combined string with hopping reference', () => {
const langService = createTestingLanguageService({
files: [
Expand Down
7 changes: 7 additions & 0 deletions src/ts-ast-util/template-expression-resolver.ts
Expand Up @@ -371,6 +371,13 @@ export class TemplateExpressionResolver {
} else {
return setValueToCache(getValueForTemplateExpression(node.template, dependencies));
}
} else if (ts.isCallExpression(node) && ts.isIdentifier(node.expression) && node.arguments.length > 0) {
const firstArgNode = node.arguments[0];
if (ts.isNoSubstitutionTemplateLiteral(firstArgNode)) {
return setValueToCache({ text: firstArgNode.text, dependencies });
} else if (ts.isTemplateExpression(firstArgNode)) {
return setValueToCache(getValueForTemplateExpression(firstArgNode, dependencies));
}
} else if (ts.isTemplateExpression(node)) {
return setValueToCache(getValueForTemplateExpression(node, dependencies));
}
Expand Down

0 comments on commit e6ced8d

Please sign in to comment.