Skip to content

Commit 5a259ce

Browse files
author
Dimitri POSTOLOV
authored
chore: remove unique-enum-value-names rule from recommended config (#800)
1 parent b761436 commit 5a259ce

13 files changed

+125
-94
lines changed

.changeset/two-drinks-build.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@graphql-eslint/eslint-plugin': patch
3+
---
4+
5+
chore: remove `unique-enum-value-names` rule from recommended config

docs/README.md

Lines changed: 59 additions & 58 deletions
Large diffs are not rendered by default.

docs/rules/no-case-insensitive-enum-values-duplicates.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
✅ The `"extends": "plugin:@graphql-eslint/schema-recommended"` property in a configuration file enables this rule.
44

5-
🔧 The `--fix` option on the [command line](https://eslint.org/docs/user-guide/command-line-interface#--fix) can automatically fix some of the problems reported by this rule.
6-
75
- Category: `Schema`
86
- Rule name: `@graphql-eslint/no-case-insensitive-enum-values-duplicates`
97
- Requires GraphQL Schema: `false` [ℹ️](../../README.md#extended-linting-rules-with-graphql-schema)
@@ -40,3 +38,4 @@ enum MyEnum {
4038
## Resources
4139

4240
- [Rule source](../../packages/plugin/src/rules/no-case-insensitive-enum-values-duplicates.ts)
41+
- [Test source](../../packages/plugin/tests/no-case-insensitive-enum-values-duplicates.spec.ts)

docs/rules/unique-enum-value-names.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
# `unique-enum-value-names`
22

3-
✅ The `"extends": "plugin:@graphql-eslint/schema-recommended"` property in a configuration file enables this rule.
4-
53
- Category: `Schema`
64
- Rule name: `@graphql-eslint/unique-enum-value-names`
75
- Requires GraphQL Schema: `false` [ℹ️](../../README.md#extended-linting-rules-with-graphql-schema)

packages/plugin/src/configs/schema-all.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,7 @@ export default {
1414
},
1515
],
1616
'@graphql-eslint/input-name': 'error',
17-
'@graphql-eslint/no-root-type': 'off',
1817
'@graphql-eslint/no-scalar-result-type-on-mutation': 'error',
19-
'@graphql-eslint/no-unused-fields': 'off',
20-
'@graphql-eslint/possible-type-extension': 'off',
2118
'@graphql-eslint/require-deprecation-date': 'error',
2219
'@graphql-eslint/require-field-of-type-query-in-mutation-result': 'error',
2320
},

packages/plugin/src/configs/schema-recommended.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ export default {
4343
'@graphql-eslint/strict-id-in-types': 'error',
4444
'@graphql-eslint/unique-directive-names': 'error',
4545
'@graphql-eslint/unique-directive-names-per-location': 'error',
46-
'@graphql-eslint/unique-enum-value-names': 'error',
4746
'@graphql-eslint/unique-field-definition-names': 'error',
4847
'@graphql-eslint/unique-operation-types': 'error',
4948
'@graphql-eslint/unique-type-names': 'error',

packages/plugin/src/rules/graphql-js-validation.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,7 @@ export const GRAPHQL_JS_VALIDATIONS = Object.assign(
327327
category: 'Schema',
328328
description: `A GraphQL enum type is only valid if all its values are uniquely named.`,
329329
requiresSchema: false,
330+
recommended: false,
330331
}),
331332
validationToRule('unique-field-definition-names', 'UniqueFieldDefinitionNames', {
332333
category: 'Schema',

packages/plugin/src/rules/no-case-insensitive-enum-values-duplicates.ts

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1+
import { EnumTypeDefinitionNode, EnumTypeExtensionNode, Kind } from 'graphql';
2+
import { GraphQLESTreeNode } from '../estree-parser';
13
import { GraphQLESLintRule } from '../types';
2-
3-
const ERROR_MESSAGE_ID = 'NO_CASE_INSENSITIVE_ENUM_VALUES_DUPLICATES';
4+
import { getLocation } from '../utils';
45

56
const rule: GraphQLESLintRule = {
67
meta: {
78
type: 'suggestion',
89
docs: {
9-
url:
10-
'https://github.com/dotansimha/graphql-eslint/blob/master/docs/rules/no-case-insensitive-enum-values-duplicates.md',
10+
url: `https://github.com/dotansimha/graphql-eslint/blob/master/docs/rules/no-case-insensitive-enum-values-duplicates.md`,
1111
category: 'Schema',
1212
recommended: true,
1313
description: 'Disallow case-insensitive enum values duplicates.',
@@ -34,27 +34,21 @@ const rule: GraphQLESLintRule = {
3434
},
3535
],
3636
},
37-
fixable: 'code',
38-
messages: {
39-
[ERROR_MESSAGE_ID]: `Case-insensitive enum values duplicates are not allowed! Found: "{{ found }}"`,
40-
},
4137
schema: [],
4238
},
4339
create(context) {
40+
const selector = [Kind.ENUM_TYPE_DEFINITION, Kind.ENUM_TYPE_EXTENSION].join(',');
4441
return {
45-
EnumTypeDefinition(node) {
46-
const foundDuplicates = node.values.filter(
47-
(item, index) =>
48-
node.values.findIndex(v => v.name.value.toLowerCase() === item.name.value.toLowerCase()) !== index
42+
[selector](node: GraphQLESTreeNode<EnumTypeDefinitionNode | EnumTypeExtensionNode>) {
43+
const duplicates = node.values.filter(
44+
(item, index, array) =>
45+
array.findIndex(v => v.name.value.toLowerCase() === item.name.value.toLowerCase()) !== index
4946
);
50-
51-
for (const dup of foundDuplicates) {
47+
for (const duplicate of duplicates) {
48+
const enumName = duplicate.name.value;
5249
context.report({
53-
node: dup.name,
54-
data: {
55-
found: dup.name.value,
56-
},
57-
messageId: ERROR_MESSAGE_ID,
50+
loc: getLocation(duplicate.loc, enumName),
51+
message: `Case-insensitive enum values duplicates are not allowed! Found: "${enumName}"`,
5852
});
5953
}
6054
},
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
// Jest Snapshot v1, https://goo.gl/fbAQLP
2+
3+
exports[` 1`] = `
4+
> 1 | enum A { TEST TesT }
5+
| ^^^^ Case-insensitive enum values duplicates are not allowed! Found: "TesT"
6+
`;
7+
8+
exports[` 2`] = `
9+
> 1 | extend enum A { TEST TesT }
10+
| ^^^^ Case-insensitive enum values duplicates are not allowed! Found: "TesT"
11+
`;
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { GraphQLRuleTester } from '../src';
2+
import rule from '../src/rules/no-case-insensitive-enum-values-duplicates';
3+
4+
const ruleTester = new GraphQLRuleTester();
5+
6+
ruleTester.runGraphQLTests('no-case-insensitive-enum-values-duplicates', rule, {
7+
valid: [],
8+
invalid: [
9+
{
10+
code: 'enum A { TEST TesT }',
11+
errors: [{ message: 'Case-insensitive enum values duplicates are not allowed! Found: "TesT"' }],
12+
},
13+
{
14+
code: 'extend enum A { TEST TesT }',
15+
errors: [{ message: 'Case-insensitive enum values duplicates are not allowed! Found: "TesT"' }],
16+
},
17+
],
18+
});

0 commit comments

Comments
 (0)