code: func parseInputValueDef(parser *Parser) (interface{}, error) {
  	var (
  		description *ast.StringValue
  		name        *ast.Name
  		ttype       ast.Type
  		directives  []*ast.Directive
  		err         error
  	)
  	start := parser.Token.Start
  	if description, err = parseDescription(parser); err != nil {
  		return nil, err
  	}
  	if name, err = parseName(parser); err != nil {
  		return nil, err
  	}
  	if _, err = expect(parser, lexer.COLON); err != nil {
  		return nil, err
  	}
  	if ttype, err = parseType(parser); err != nil {
  		return nil, err
  	}
  	var defaultValue ast.Value
  	if skp, err := skip(parser, lexer.EQUALS); err != nil {
  		return nil, err
  	} else if skp {
  		val, err := parseConstValue(parser)
  		if err != nil {
  			return nil, err
  		}
  		if val, ok := val.(ast.Value); ok {
  			defaultValue = val
  		}
  	}
  	if directives, err = parseDirectives(parser); err != nil {
  		return nil, err
  	}
  	return ast.NewInputValueDefinition(&ast.InputValueDefinition{
  		Name:         name,
  		Description:  description,
  		Type:         ttype,
  		DefaultValue: defaultValue,
  		Directives:   directives,
  		Loc:          loc(parser, start),
  	}), nil
  }
docs: /**
   * InputValueDefinition : Description? Name : Type DefaultValue? Directives?
   */