code: func parseTypeSystemDefinition(parser *Parser) (ast.Node, error) {
  	var (
  		item parseDefinitionFn
  		err  error
  	)
  	// Many definitions begin with a description and require a lookahead.
  	keywordToken := parser.Token
  	if peekDescription(parser) {
  		if keywordToken, err = lookahead(parser); err != nil {
  			return nil, err
  		}
  	}
  
  	if keywordToken.Kind != lexer.NAME {
  		return nil, unexpected(parser, keywordToken)
  	}
  	var ok bool
  	if item, ok = tokenDefinitionFn[keywordToken.Value]; !ok {
  		return nil, unexpected(parser, keywordToken)
  	}
  	return item(parser)
  }
docs: /* Implements the parsing rules in the Type Definition section. */
  /**
   * TypeSystemDefinition :
   *   - SchemaDefinition
   *   - TypeDefinition
   *   - TypeExtension
   *   - DirectiveDefinition
   *
   * TypeDefinition :
   *   - ScalarTypeDefinition
   *   - ObjectTypeDefinition
   *   - InterfaceTypeDefinition
   *   - UnionTypeDefinition
   *   - EnumTypeDefinition
   *   - InputObjectTypeDefinition
   */