diff --git a/.reaction/graphql-linter/rules/description_fields_capitalized.js b/.reaction/graphql-linter/rules/description_fields_capitalized.js new file mode 100644 index 00000000000..af420fd31ac --- /dev/null +++ b/.reaction/graphql-linter/rules/description_fields_capitalized.js @@ -0,0 +1,33 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.DescriptionsAreCapitalized = DescriptionsAreCapitalized; + +var _validation_error = require("graphql-schema-linter/lib/validation_error"); +var schema = require('graphql/utilities/buildASTSchema'); + +function DescriptionsAreCapitalized(configuration, context) { + return { + FieldDefinition(node, key, parent, path, ancestors) { + var description = schema.getDescription(node, { + commentDescriptions: configuration.getCommentDescriptions(), + }) + if (description && description[0] === description[0].toUpperCase()) { + return; + } + + const fieldName = node.name.value; + const parentName = ancestors[ancestors.length - 1].name.value; + + context.reportError( + new _validation_error.ValidationError( + 'descriptions-are-capitalized', + `The description for field \`${parentName}.${fieldName}\` should be capitalized.`, + [node] + ) + ); + }, + }; +} diff --git a/package.json b/package.json index a8fd2a0cf51..4b20e8d42e2 100644 --- a/package.json +++ b/package.json @@ -439,7 +439,8 @@ "relay-page-info-spec", "type-fields-sorted-alphabetically", "types-are-capitalized", - "types-have-descriptions" + "types-have-descriptions", + "descriptions-are-capitalized" ] } }