knownOperationNames = []; return [ NodeKind::OPERATION_DEFINITION => function (OperationDefinitionNode $node) use ($context) : VisitorOperation { $operationName = $node->name; if ($operationName !== null) { if (! isset($this->knownOperationNames[$operationName->value])) { $this->knownOperationNames[$operationName->value] = $operationName; } else { $context->reportError(new Error( self::duplicateOperationNameMessage($operationName->value), [$this->knownOperationNames[$operationName->value], $operationName] )); } } return Visitor::skipNode(); }, NodeKind::FRAGMENT_DEFINITION => static function () : VisitorOperation { return Visitor::skipNode(); }, ]; } public static function duplicateOperationNameMessage($operationName) { return sprintf('There can be only one operation named "%s".', $operationName); } }