code: func findNameStep(parts []string, typeOptions sets.String) string {
  	if len(parts) == 0 {
  		return ""
  	}
  
  	numberOfPartsInStep := findKnownValue(parts[1:], typeOptions) + 1
  	// if we didn't find a known value, then the entire thing must be a name
  	if numberOfPartsInStep == 0 {
  		numberOfPartsInStep = len(parts)
  	}
  	nextParts := parts[0:numberOfPartsInStep]
  
  	return strings.Join(nextParts, ".")
  }
docs: // findNameStep takes the list of parts and a set of valid tags that can be used after the name.  It then walks the list of parts
  // until it find a valid "next" tag or until it reaches the end of the parts and then builds the name back up out of the individual parts