From cdf2ccc03c2b2d13a5ffa0682f9722afe94ece91 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Thu, 8 Mar 2018 17:12:08 -0500 Subject: [PATCH] Annotate visitor method stubs with return type options. --- src/schemaVisitor.ts | 27 +++++++++++++++------------ src/test/testDirectives.ts | 12 +++++------- 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/src/schemaVisitor.ts b/src/schemaVisitor.ts index e4450451138..1f437a89ac3 100644 --- a/src/schemaVisitor.ts +++ b/src/schemaVisitor.ts @@ -74,28 +74,31 @@ export abstract class SchemaVisitor { // Concrete subclasses of SchemaVisitor should override one or more of these // visitor methods, in order to express their interest in handling certain - // schema types/locations. + // schema types/locations. Each method may return null to remove the given + // type from the schema, a non-null value of the same type to update the + // type in the schema, or nothing to leave the type as it was. + /* tslint:disable:no-empty */ - public visitSchema(schema: GraphQLSchema) {} - public visitScalar(scalar: GraphQLScalarType) {} - public visitObject(object: GraphQLObjectType) {} + public visitSchema(schema: GraphQLSchema): GraphQLSchema | void {} + public visitScalar(scalar: GraphQLScalarType): GraphQLScalarType | void {} + public visitObject(object: GraphQLObjectType): GraphQLObjectType | void {} public visitFieldDefinition(field: GraphQLField, details: { objectType: GraphQLObjectType | GraphQLInterfaceType, - }) {} + }): GraphQLField | void {} public visitArgumentDefinition(argument: GraphQLArgument, details: { field: GraphQLField, objectType: GraphQLObjectType | GraphQLInterfaceType, - }) {} - public visitInterface(iface: GraphQLInterfaceType) {} - public visitUnion(union: GraphQLUnionType) {} - public visitEnum(type: GraphQLEnumType) {} + }): GraphQLArgument | void {} + public visitInterface(iface: GraphQLInterfaceType): GraphQLInterfaceType | void {} + public visitUnion(union: GraphQLUnionType): GraphQLUnionType | void {} + public visitEnum(type: GraphQLEnumType): GraphQLEnumType | void {} public visitEnumValue(value: GraphQLEnumValue, details: { enumType: GraphQLEnumType, - }) {} - public visitInputObject(object: GraphQLInputObjectType) {} + }): GraphQLEnumValue | void {} + public visitInputObject(object: GraphQLInputObjectType): GraphQLInputObjectType | void {} public visitInputFieldDefinition(field: GraphQLInputField, details: { objectType: GraphQLInputObjectType, - }) {} + }): GraphQLInputField | void {} /* tslint:enable:no-empty */ } diff --git a/src/test/testDirectives.ts b/src/test/testDirectives.ts index 39d885e298c..e82a9329fff 100644 --- a/src/test/testDirectives.ts +++ b/src/test/testDirectives.ts @@ -271,24 +271,22 @@ describe('@directives', () => { it('can check if a visitor method is implemented', () => { class Visitor extends SchemaVisitor { public notVisitorMethod() { - return false; + return; // Just to keep the tslint:no-empty rule satisfied. } - public visitObject() { - return true; + public visitObject(object: GraphQLObjectType) { + return object; } } - const visitor = new Visitor; - assert.strictEqual( Visitor.implementsVisitorMethod('notVisitorMethod'), - visitor.notVisitorMethod(), + false, ); assert.strictEqual( Visitor.implementsVisitorMethod('visitObject'), - visitor.visitObject(), + true, ); assert.strictEqual(