Mirror: TypeScript LSP plugin that finds GraphQL documents in your code and provides diagnostics, auto-complete and hover-information.

fix: Export `findAllCallExpressions` and restore backwards-compat for `findAllPersistedCallExpressions` (#308)

Changed files
+31 -7
.changeset
packages
graphqlsp
src
+5
.changeset/spicy-garlics-drum.md
···
+
---
+
'@0no-co/graphqlsp': minor
+
---
+
+
Expose `findAllCallExpressions` on `@0no-co/graphqlsp/api`
+7 -1
packages/graphqlsp/src/api.ts
···
export { getGraphQLDiagnostics } from './diagnostics';
export { init } from './ts';
-
export { findAllPersistedCallExpressions, unrollTadaFragments } from './ast';
+
+
export {
+
findAllPersistedCallExpressions,
+
findAllCallExpressions,
+
unrollTadaFragments,
+
} from './ast';
+
export {
getDocumentReferenceFromTypeQuery,
getDocumentReferenceFromDocumentNode,
+19 -6
packages/graphqlsp/src/ast/index.ts
···
}
export function findAllPersistedCallExpressions(
+
sourceFile: ts.SourceFile
+
): Array<ts.CallExpression>;
+
export function findAllPersistedCallExpressions(
sourceFile: ts.SourceFile,
info: ts.server.PluginCreateInfo
-
): Array<{ node: ts.CallExpression; schema: string | null }> {
-
const result: Array<{ node: ts.CallExpression; schema: string | null }> = [];
-
const typeChecker = info.languageService.getProgram()?.getTypeChecker();
+
): Array<{ node: ts.CallExpression; schema: string | null }>;
+
+
export function findAllPersistedCallExpressions(
+
sourceFile: ts.SourceFile,
+
info?: ts.server.PluginCreateInfo
+
) {
+
const result: Array<
+
ts.CallExpression | { node: ts.CallExpression; schema: string | null }
+
> = [];
+
const typeChecker = info?.languageService.getProgram()?.getTypeChecker();
function find(node: ts.Node) {
if (node && ts.isCallExpression(node)) {
// This expression ideally for us looks like <template>.persisted
···
const [template, method] = parts;
if (!templates.has(template) || method !== 'persisted') return;
-
const name = getSchemaName(node, typeChecker);
-
-
result.push({ node, schema: name });
+
if (info) {
+
const name = getSchemaName(node, typeChecker);
+
result.push({ node, schema: name });
+
} else {
+
result.push(node);
+
}
} else {
ts.forEachChild(node, find);
}