func interactiveEdit()

in cmd/changelog/create.go [174:223]


func interactiveEdit(annotation *changelog.Annotation, modules *gomod.ModuleTree) error {
	var issues []string

	template, err := changelog.AnnotationToTemplate(*annotation)
	if err != nil {
		return err
	}

	filledTemplate, err := editTemplate(template)
	if err != nil {
		return fmt.Errorf("failed to create change: %v", err)
	}

	filledAnnotation, err := changelog.TemplateToAnnotation(filledTemplate)
	if err != nil {
		return fmt.Errorf("failed to parse annotation: %v", err)
	}

	if err = changelog.Validate(filledAnnotation); err != nil {
		var ve *changelog.ValidationError
		if !errors.As(err, &ve) {
			return err
		}
		issues = append(issues, ve.Issues...)
	}

	if invalidModules := validateModules(filledAnnotation.Modules, modules); len(invalidModules) > 0 {
		for _, module := range invalidModules {
			issues = append(issues, fmt.Sprintf("unknown module: %s", module))
		}
	}

	if len(issues) > 0 {
		var sb strings.Builder
		sb.WriteString("Invalid Template:\n")
		for _, issue := range issues {
			sb.WriteRune('\t')
			sb.WriteString(issue)
			sb.WriteRune('\n')
		}
		return fmt.Errorf(sb.String())
	}

	// Ensure this didn't get swapped / changed
	filledAnnotation.ID = annotation.ID

	*annotation = filledAnnotation

	return nil
}