tools/diff-processor/cmd/detect_missing_docs.go (86 lines of code) (raw):

package cmd import ( "slices" "encoding/json" "fmt" "io" "os" "github.com/GoogleCloudPlatform/magic-modules/tools/diff-processor/detector" "github.com/GoogleCloudPlatform/magic-modules/tools/diff-processor/diff" "github.com/spf13/cobra" "golang.org/x/exp/maps" newProvider "google/provider/new/google/provider" oldProvider "google/provider/old/google/provider" ) const detectMissingDocDesc = `Compute list of fields missing documents` type MissingDocsInfo struct { Name string FilePath string Fields []string } type detectMissingDocsOptions struct { rootOptions *rootOptions computeSchemaDiff func() diff.SchemaDiff computeDatasourceSchemaDiff func() diff.SchemaDiff stdout io.Writer } type MissingDocsSummary struct { Resource []detector.MissingDocDetails DataSource []detector.MissingDocDetails } func newDetectMissingDocsCmd(rootOptions *rootOptions) *cobra.Command { o := &detectMissingDocsOptions{ rootOptions: rootOptions, computeSchemaDiff: func() diff.SchemaDiff { return schemaDiff }, computeDatasourceSchemaDiff: func() diff.SchemaDiff { return diff.ComputeSchemaDiff(oldProvider.DatasourceMap(), newProvider.DatasourceMap()) }, stdout: os.Stdout, } cmd := &cobra.Command{ Use: "detect-missing-docs", Short: detectMissingDocDesc, Long: detectMissingDocDesc, Args: cobra.ExactArgs(1), RunE: func(c *cobra.Command, args []string) error { return o.run(args) }, } return cmd } func (o *detectMissingDocsOptions) run(args []string) error { schemaDiff := o.computeSchemaDiff() detectedResources, err := detector.DetectMissingDocs(schemaDiff, args[0]) if err != nil { return err } datasourceSchemaDiff := o.computeDatasourceSchemaDiff() detectedDataSources, err := detector.DetectMissingDocsForDatasource(datasourceSchemaDiff, args[0]) if err != nil { return err } sum := MissingDocsSummary{ Resource: sortMissingDocDetails(detectedResources), DataSource: sortMissingDocDetails(detectedDataSources), } if err := json.NewEncoder(o.stdout).Encode(sum); err != nil { return fmt.Errorf("error encoding json: %w", err) } return nil } func sortMissingDocDetails(m map[string]detector.MissingDocDetails) []detector.MissingDocDetails { itemNames := maps.Keys(m) slices.Sort(itemNames) arr := []detector.MissingDocDetails{} for _, itemName := range itemNames { details := m[itemName] arr = append(arr, detector.MissingDocDetails{ Name: itemName, FilePath: details.FilePath, Fields: details.Fields, }) } return arr }