code: func ArgumentsOfCorrectTypeRule(context *ValidationContext) *ValidationRuleInstance {
  	visitorOpts := &visitor.VisitorOptions{
  		KindFuncMap: map[string]visitor.NamedVisitFuncs{
  			kinds.Argument: {
  				Kind: func(p visitor.VisitFuncParams) (string, interface{}) {
  					if argAST, ok := p.Node.(*ast.Argument); ok {
  						if argDef := context.Argument(); argDef != nil {
  							if isValid, messages := isValidLiteralValue(argDef.Type, argAST.Value); !isValid {
  								var messagesStr, argNameValue string
  								if argAST.Name != nil {
  									argNameValue = argAST.Name.Value
  								}
  
  								if len(messages) > 0 {
  									messagesStr = "\n" + strings.Join(messages, "\n")
  								}
  								reportError(
  									context,
  									fmt.Sprintf(`Argument "%v" has invalid value %v.%v`,
  										argNameValue, printer.Print(argAST.Value), messagesStr),
  									[]ast.Node{argAST.Value},
  								)
  							}
  
  						}
  					}
  					return visitor.ActionSkip, nil
  				},
  			},
  		},
  	}
  	return &ValidationRuleInstance{
  		VisitorOpts: visitorOpts,
  	}
  }
docs: // ArgumentsOfCorrectTypeRule Argument values of correct type
  //
  // A GraphQL document is only valid if all field argument literal values are
  // of the type expected by their position.