code: func parseDirectiveLocations(parser *Parser) ([]*ast.Name, error) {
  	locations := []*ast.Name{}
  	for {
  		if name, err := parseName(parser); err != nil {
  			return locations, err
  		} else {
  			locations = append(locations, name)
  		}
  
  		if hasPipe, err := skip(parser, lexer.PIPE); err != nil {
  			return locations, err
  		} else if !hasPipe {
  			break
  		}
  	}
  	return locations, nil
  }
docs: /**
   * DirectiveLocations :
   *   - Name
   *   - DirectiveLocations | Name
   */