Skip to content

Commit 578b890

Browse files
author
Dimitri POSTOLOV
authored
fix error report for require-deprecation-date rule (#740)
1 parent ced6789 commit 578b890

File tree

4 files changed

+34
-16
lines changed

4 files changed

+34
-16
lines changed

.changeset/late-otters-add.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+
fix error report for `require-deprecation-date` rule

packages/plugin/src/rules/require-deprecation-date.ts

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { GraphQLESLintRule } from '../types';
22
import { valueFromNode } from '../estree-parser/utils';
3+
import { getLocation } from '../utils';
34

45
const DATE_REGEX = /^\d{2}\/\d{2}\/\d{4}$/;
56

@@ -47,10 +48,10 @@ const rule: GraphQLESLintRule<[{ argumentName?: string }]> = {
4748
],
4849
},
4950
messages: {
50-
[MESSAGE_REQUIRE_DATE]: 'Directive "@deprecated" must have a deletion date.',
51-
[MESSAGE_INVALID_FORMAT]: 'Deletion date must be in format "DD/MM/YYYY".',
52-
[MESSAGE_INVALID_DATE]: 'Invalid "{{ deletionDate }}" deletion date.',
53-
[MESSAGE_CAN_BE_REMOVED]: '"{{ nodeName }}" сan be removed.',
51+
[MESSAGE_REQUIRE_DATE]: 'Directive "@deprecated" must have a deletion date',
52+
[MESSAGE_INVALID_FORMAT]: 'Deletion date must be in format "DD/MM/YYYY"',
53+
[MESSAGE_INVALID_DATE]: 'Invalid "{{ deletionDate }}" deletion date',
54+
[MESSAGE_CAN_BE_REMOVED]: '"{{ nodeName }}" сan be removed',
5455
},
5556
schema: [
5657
{
@@ -71,14 +72,17 @@ const rule: GraphQLESLintRule<[{ argumentName?: string }]> = {
7172
const deletionDateNode = node.arguments.find(arg => arg.name.value === argName);
7273

7374
if (!deletionDateNode) {
74-
context.report({ node: node.name, messageId: MESSAGE_REQUIRE_DATE });
75+
context.report({
76+
loc: getLocation(node.loc, node.name.value, { offsetEnd: 0 }),
77+
messageId: MESSAGE_REQUIRE_DATE,
78+
});
7579
return;
7680
}
7781
const deletionDate = valueFromNode(deletionDateNode.value);
7882
const isValidDate = DATE_REGEX.test(deletionDate);
7983

8084
if (!isValidDate) {
81-
context.report({ node: node.name, messageId: MESSAGE_INVALID_FORMAT });
85+
context.report({ node: deletionDateNode.value, messageId: MESSAGE_INVALID_FORMAT });
8286
return;
8387
}
8488
let [day, month, year] = deletionDate.split('/');
@@ -88,7 +92,7 @@ const rule: GraphQLESLintRule<[{ argumentName?: string }]> = {
8892

8993
if (Number.isNaN(deletionDateInMS)) {
9094
context.report({
91-
node: node.name,
95+
node: deletionDateNode.value,
9296
messageId: MESSAGE_INVALID_DATE,
9397
data: {
9498
deletionDate,
@@ -101,7 +105,7 @@ const rule: GraphQLESLintRule<[{ argumentName?: string }]> = {
101105

102106
if (canRemove) {
103107
context.report({
104-
node: node.name,
108+
node,
105109
messageId: MESSAGE_CAN_BE_REMOVED,
106110
data: {
107111
nodeName: node.parent.name.value,

packages/plugin/tests/__snapshots__/require-deprecation-date.spec.ts.snap

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,25 @@
22

33
exports[` 1`] = `
44
> 1 | scalar Old @deprecated(deletionDate: "22/08/2021")
5-
| ^ "Old" сan be removed.
5+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ "Old" сan be removed
66
`;
77

88
exports[` 2`] = `
99
> 1 | scalar Old @deprecated(untilDate: "22/08/2021")
10-
| ^ "Old" сan be removed.
10+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ "Old" сan be removed
1111
`;
1212

1313
exports[` 3`] = `
1414
> 1 | scalar Old @deprecated(deletionDate: "bad")
15-
| ^ Deletion date must be in format "DD/MM/YYYY".
15+
| ^ Deletion date must be in format "DD/MM/YYYY"
1616
`;
1717

1818
exports[` 4`] = `
1919
> 1 | scalar Old @deprecated(deletionDate: "32/08/2021")
20-
| ^ Invalid "32/08/2021" deletion date.
20+
| ^ Invalid "32/08/2021" deletion date
21+
`;
22+
23+
exports[` 5`] = `
24+
> 1 | type Old { oldField: ID @deprecated }
25+
| ^^^^^^^^^^^ Directive "@deprecated" must have a deletion date
2126
`;

packages/plugin/tests/require-deprecation-date.spec.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,20 +30,24 @@ ruleTester.runGraphQLTests('require-deprecation-date', rule, {
3030
invalid: [
3131
{
3232
code: 'scalar Old @deprecated(deletionDate: "22/08/2021")',
33-
errors: [{ message: '"Old" сan be removed.' }],
33+
errors: [{ message: '"Old" сan be removed' }],
3434
},
3535
{
3636
code: 'scalar Old @deprecated(untilDate: "22/08/2021")',
3737
options: [{ argumentName: 'untilDate' }],
38-
errors: [{ message: '"Old" сan be removed.' }],
38+
errors: [{ message: '"Old" сan be removed' }],
3939
},
4040
{
4141
code: 'scalar Old @deprecated(deletionDate: "bad")',
42-
errors: [{ message: 'Deletion date must be in format "DD/MM/YYYY".' }],
42+
errors: [{ message: 'Deletion date must be in format "DD/MM/YYYY"' }],
4343
},
4444
{
4545
code: 'scalar Old @deprecated(deletionDate: "32/08/2021")',
46-
errors: [{ message: 'Invalid "32/08/2021" deletion date.' }],
46+
errors: [{ message: 'Invalid "32/08/2021" deletion date' }],
4747
},
48+
{
49+
code: 'type Old { oldField: ID @deprecated }',
50+
errors: [{ message: 'Directive "@deprecated" must have a deletion date' }],
51+
}
4852
],
4953
});

0 commit comments

Comments
 (0)