public IEnumerable <VariableUsage> GetUsages(string query)
        {
            var document = this.parser.Parse(new Source(query));

            this.Visit(document);

            return(VariableUsagesProvider.Get(this.operation, document, this.schema));
        }
        public override GraphQLOperationDefinition EndVisitOperationDefinition(GraphQLOperationDefinition definition)
        {
            var variableUsages = VariableUsagesProvider.Get(definition, this.document, this.Schema);

            foreach (var usage in variableUsages)
            {
                this.VerifyUsage(usage);
            }

            return(base.EndVisitOperationDefinition(definition));
        }
        public override GraphQLOperationDefinition EndVisitOperationDefinition(GraphQLOperationDefinition definition)
        {
            var variableUsages = VariableUsagesProvider.Get(definition, this.document, this.Schema);
            var operationName  = definition.Name != null ? definition.Name.Value : null;

            foreach (var variableDefinition in this.variableDefinitions)
            {
                var variableName = variableDefinition.Variable.Name.Value;
                if (!variableUsages.Any(e => e.Variable.Name.Value == variableName))
                {
                    this.Errors.Add(new GraphQLException(this.GetUnusedVariablesMessage(variableName, operationName),
                                                         new[] { variableDefinition }));
                }
            }

            return(base.EndVisitOperationDefinition(definition));
        }