@graphql-eslint/eslint-plugin
Version:
GraphQL plugin for ESLint
54 lines (53 loc) • 1.73 kB
JavaScript
import { valueFromNode } from '../estree-converter/index.js';
export const rule = {
meta: {
docs: {
description: 'Require all deprecation directives to specify a reason.',
category: 'Schema',
url: 'https://github.com/B2o5T/graphql-eslint/blob/master/docs/rules/require-deprecation-reason.md',
recommended: true,
examples: [
{
title: 'Incorrect',
code: /* GraphQL */ `
type MyType {
name: String @deprecated
}
`,
},
{
title: 'Incorrect',
code: /* GraphQL */ `
type MyType {
name: String @deprecated(reason: "")
}
`,
},
{
title: 'Correct',
code: /* GraphQL */ `
type MyType {
name: String @deprecated(reason: "no longer relevant, please use fullName field")
}
`,
},
],
},
type: 'suggestion',
schema: [],
},
create(context) {
return {
'Directive[name.value=deprecated]'(node) {
const reasonArgument = node.arguments.find(arg => arg.name.value === 'reason');
const value = reasonArgument && String(valueFromNode(reasonArgument.value)).trim();
if (!value) {
context.report({
node: node.name,
message: 'Directive "@deprecated" must have a reason!',
});
}
},
};
},
};