From d22f6111a60af25727d8dbc1058c79607df76af2 Mon Sep 17 00:00:00 2001 From: Rikki Schulte Date: Tue, 26 Apr 2022 13:23:36 +0200 Subject: [PATCH] gently trap graphql parse errors in the LS and LSP I introduced these accidentally and they have caused a lot of issues! --- .changeset/wise-birds-notice.md | 6 ++++++ .../src/MessageProcessor.ts | 13 +++++++------ .../src/interface/getAutocompleteSuggestions.ts | 14 +++++++++----- 3 files changed, 22 insertions(+), 11 deletions(-) create mode 100644 .changeset/wise-birds-notice.md diff --git a/.changeset/wise-birds-notice.md b/.changeset/wise-birds-notice.md new file mode 100644 index 00000000000..7cc8296f691 --- /dev/null +++ b/.changeset/wise-birds-notice.md @@ -0,0 +1,6 @@ +--- +'graphql-language-service': patch +'graphql-language-service-server': patch +--- + +Trap all graphql parsing exceptions from (relatively) newly added logic. This should clear up bugs that have been plauging users for two years now, sorry! diff --git a/packages/graphql-language-service-server/src/MessageProcessor.ts b/packages/graphql-language-service-server/src/MessageProcessor.ts index 4d2fccd3e73..7d2215a0140 100644 --- a/packages/graphql-language-service-server/src/MessageProcessor.ts +++ b/packages/graphql-language-service-server/src/MessageProcessor.ts @@ -690,12 +690,13 @@ export class MessageProcessor { } const inlineFragments: string[] = []; - - visit(parse(query), { - FragmentDefinition: (node: FragmentDefinitionNode) => { - inlineFragments.push(node.name.value); - }, - }); + try { + visit(parse(query), { + FragmentDefinition: (node: FragmentDefinitionNode) => { + inlineFragments.push(node.name.value); + }, + }); + } catch {} const formatted = result ? result.definitions.map(res => { diff --git a/packages/graphql-language-service/src/interface/getAutocompleteSuggestions.ts b/packages/graphql-language-service/src/interface/getAutocompleteSuggestions.ts index 774640f1acf..82eabbbf9ba 100644 --- a/packages/graphql-language-service/src/interface/getAutocompleteSuggestions.ts +++ b/packages/graphql-language-service/src/interface/getAutocompleteSuggestions.ts @@ -79,11 +79,15 @@ export const SuggestionCommand = { const collectFragmentDefs = (op: string | undefined) => { const externalFragments: FragmentDefinitionNode[] = []; if (op) { - visit(parse(op), { - FragmentDefinition(def) { - externalFragments.push(def); - }, - }); + try { + visit(parse(op), { + FragmentDefinition(def) { + externalFragments.push(def); + }, + }); + } catch { + return []; + } } return externalFragments; };