[ 'enter' => function() use (&$variableNameDefined) { $variableNameDefined = []; }, 'leave' => function(OperationDefinitionNode $operation) use (&$variableNameDefined, $context) { $usages = $context->getRecursiveVariableUsages($operation); foreach ($usages as $usage) { $node = $usage['node']; $varName = $node->name->value; if (empty($variableNameDefined[$varName])) { $context->reportError(new Error( self::undefinedVarMessage( $varName, $operation->name ? $operation->name->value : null ), [ $node, $operation ] )); } } } ], NodeKind::VARIABLE_DEFINITION => function(VariableDefinitionNode $def) use (&$variableNameDefined) { $variableNameDefined[$def->variable->name->value] = true; } ]; } }