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

optimise parse performance

Changed files
+20 -8
.changeset
packages
+5
.changeset/fresh-keys-promise.md
···
+
---
+
'@0no-co/graphqlsp': patch
+
---
+
+
Optimise parse performance by omitting location information
+1
.prettierignore
···
test/e2e/fixture-project/fixtures/**/*
+
./**/*.generated.ts
+1 -1
packages/graphqlsp/src/autoComplete.ts
···
const text = resolveTemplate(node, filename, info);
let fragments: Array<FragmentDefinitionNode> = [];
try {
-
const parsed = parse(text);
+
const parsed = parse(text, { noLocation: true });
fragments = parsed.definitions.filter(
x => x.kind === Kind.FRAGMENT_DEFINITION
) as Array<FragmentDefinitionNode>;
+13 -7
packages/graphqlsp/src/diagnostics.ts
···
});
try {
-
const parsed = parse(text);
+
const parsed = parse(text, { noLocation: true });
if (
parsed.definitions.some(x => x.kind === Kind.OPERATION_DEFINITION)
···
node.getSourceFile().fileName,
info
);
-
const parsed = parse(text);
-
if (
-
parsed.definitions.every(x => x.kind === Kind.FRAGMENT_DEFINITION)
-
) {
-
return `'${exp.name}'`;
+
try {
+
const parsed = parse(text, { noLocation: true });
+
if (
+
parsed.definitions.every(
+
x => x.kind === Kind.FRAGMENT_DEFINITION
+
)
+
) {
+
return `'${exp.name}'`;
+
}
+
} catch (e) {
+
return;
}
}
})
···
nodes.forEach((node, i) => {
const queryText = texts[i] || '';
-
const parsed = parse(queryText);
+
const parsed = parse(queryText, { noLocation: true });
const isFragment = parsed.definitions.every(
x => x.kind === Kind.FRAGMENT_DEFINITION
);