code: func parseFragmentDefinition(parser *Parser) (ast.Node, error) {
  	start := parser.Token.Start
  	_, err := expectKeyWord(parser, lexer.FRAGMENT)
  	if err != nil {
  		return nil, err
  	}
  	name, err := parseFragmentName(parser)
  	if err != nil {
  		return nil, err
  	}
  	_, err = expectKeyWord(parser, "on")
  	if err != nil {
  		return nil, err
  	}
  	typeCondition, err := parseNamed(parser)
  	if err != nil {
  		return nil, err
  	}
  	directives, err := parseDirectives(parser)
  	if err != nil {
  		return nil, err
  	}
  	selectionSet, err := parseSelectionSet(parser)
  	if err != nil {
  		return nil, err
  	}
  	return ast.NewFragmentDefinition(&ast.FragmentDefinition{
  		Name:          name,
  		TypeCondition: typeCondition,
  		Directives:    directives,
  		SelectionSet:  selectionSet,
  		Loc:           loc(parser, start),
  	}), nil
  }
docs: /**
   * FragmentDefinition :
   *   - fragment FragmentName on TypeCondition Directives? SelectionSet
   *
   * TypeCondition : NamedType
   */