variableDefs = []; return [ NodeKind::OPERATION_DEFINITION => [ 'enter' => function() { $this->variableDefs = []; }, 'leave' => function(OperationDefinitionNode $operation) use ($context) { $variableNameUsed = []; $usages = $context->getRecursiveVariableUsages($operation); $opName = $operation->name ? $operation->name->value : null; foreach ($usages as $usage) { $node = $usage['node']; $variableNameUsed[$node->name->value] = true; } foreach ($this->variableDefs as $variableDef) { $variableName = $variableDef->variable->name->value; if (empty($variableNameUsed[$variableName])) { $context->reportError(new Error( self::unusedVariableMessage($variableName, $opName), [$variableDef] )); } } } ], NodeKind::VARIABLE_DEFINITION => function($def) { $this->variableDefs[] = $def; } ]; } }