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

avoid erroring on known client side directives (#144)

Changed files
+31 -2
.changeset
packages
example
src
example-external-generator
src
graphqlsp
+5
.changeset/khaki-clouds-marry.md
···
+
---
+
'@0no-co/graphqlsp': patch
+
---
+
+
Don't error on known client-side directives
+1 -1
packages/example-external-generator/src/index.tsx
···
const x = graphql(`
query Pok($limit: Int!) {
-
pokemons(limit: $limit) {
+
pokemons(limit: $limit) @populate {
id
name
fleeRate
+1 -1
packages/example/src/index.ts
···
const x = gql`
query Pok($limit: Int!) {
-
pokemons(limit: $limit) {
+
pokemons(limit: $limit) @populate {
id
name
fleeRate
+24
packages/graphqlsp/src/diagnostics.ts
···
import { resolveTemplate } from './ast/resolve';
import { generateTypedDocumentNodes } from './graphql/generateTypes';
+
const clientDirectives = new Set([
+
'populate',
+
'client',
+
'_optional',
+
'_required',
+
'arguments',
+
'argumentDefinitions',
+
'connection',
+
'refetchable',
+
'relay',
+
'required',
+
'inline',
+
]);
+
const directiveRegex = /Unknown directive "@([^)]+)"/g;
+
export const SEMANTIC_DIAGNOSTIC_CODE = 52001;
export const MISSING_OPERATION_NAME_CODE = 52002;
export const MISSING_FRAGMENT_CODE = 52003;
···
undefined,
docFragments
)
+
.filter(diag => {
+
if (!diag.message.includes('Unknown directive')) return true;
+
+
const [message] = diag.message.split('(');
+
const matches = directiveRegex.exec(message);
+
if (!matches) return true;
+
const directiveNmae = matches[1];
+
return !clientDirectives.has(directiveNmae);
+
})
.map(x => {
const { start, end } = x.range;