Skip to content

Commit

Permalink
Annotate visitor method stubs with return type options.
Browse files Browse the repository at this point in the history
  • Loading branch information
benjamn committed Mar 14, 2018
1 parent a10d924 commit cdf2ccc
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 19 deletions.
27 changes: 15 additions & 12 deletions src/schemaVisitor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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<any, any>, details: {
objectType: GraphQLObjectType | GraphQLInterfaceType,
}) {}
}): GraphQLField<any, any> | void {}
public visitArgumentDefinition(argument: GraphQLArgument, details: {
field: GraphQLField<any, any>,
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 */
}

Expand Down
12 changes: 5 additions & 7 deletions src/test/testDirectives.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down

0 comments on commit cdf2ccc

Please sign in to comment.