dimaMachina / graphql-eslint

ESLint parser, plugin and set rules for GraphQL (for schema and operations). Easily customizable with custom rules. Integrates with IDEs and modern GraphQL tools.
https://the-guild.dev/graphql/eslint
MIT License
779 stars 102 forks source link

Making it possible to require all of the given field names on `require-id-when-available` #1075

Open ikesyo opened 2 years ago

ikesyo commented 2 years ago

Is your feature request related to a problem? Please describe. When using the require-id-when-available rule with passing an array of field names, the rule passes if one of the field names exists in the selection set. I want that all of them should exist in the selection set (all given fields are required if the fields are defined on a type).

Describe the solution you'd like

Add configuration option which treating the given fields as all required.

Describe alternatives you've considered

Additional context

Migration from apollographql/eslint-plugin-graphql's required-fields rule (migration to graphql-eslint is suggested in the README). That rule's behavior is desirable for us.

milashkaJason commented 2 years ago

Not working with error Rulerequire-id-when-availablerequiresparserOptions.operations, my config{ "files": [".ts"], "processor": "@graphql-eslint/graphql" }, { "files": [".graphql"], "extends": "plugin:@graphql-eslint/operations-recommended", "rules": { "@graphql-eslint/known-type-names": "error" }, "parserOptions": { "operations": "./src/*/.graphql" ], "schema": "./remote-schema.graphql" } }`

dimaMachina commented 2 years ago

Hi @milashkaJason, does your issue related to require-id-when-available? Can you give more context or maybe make a reproduction repo?

francois-spectre commented 2 years ago

I got the same issue and I finally get it work by disabling the rules

'@graphql-eslint/require-id-when-available': 'off',
'@graphql-eslint/no-unused-fragments': 'off',
milashkaJason commented 2 years ago

The problem was in the parameter parserOptions: { operations}, because it interfered .graphqlconfig

alexeyr-ci commented 6 months ago

I'm posting the reproduction here instead of reopening https://github.com/dimaMachina/graphql-eslint/issues/1159. To reproduce, go to the playground and enter in operation.graphql:

# eslint @graphql-eslint/require-id-when-available: ["error", { fieldName: ["id", "__typename"] }]
query Q {
  posts {
    id
    title
  }
}

Or ["id", "createdAt"]. The code should be invalid, since only id is included in the selection and __typename/createdAt isn't.