func DetectMissingDocs()

in tools/diff-processor/detector/detector.go [172:220]


func DetectMissingDocs(schemaDiff diff.SchemaDiff, repoPath string) (map[string]MissingDocDetails, error) {
	ret := make(map[string]MissingDocDetails)
	for resource, resourceDiff := range schemaDiff {
		fieldsInDoc := make(map[string]bool)

		docFilePath, err := resourceToDocFile(resource, repoPath)
		if err == nil {
			content, err := os.ReadFile(docFilePath)
			if err != nil {
				return nil, fmt.Errorf("failed to read resource doc %s: %w", docFilePath, err)
			}
			parser := documentparser.NewParser()
			err = parser.Parse(content)
			if err != nil {
				return nil, fmt.Errorf("failed to parse document %s: %w", docFilePath, err)
			}

			fieldsInDoc = listToMap(parser.FlattenFields())
			// for iam resource
			if v, ok := fieldsInDoc["member/members"]; ok {
				fieldsInDoc["member"] = v
				fieldsInDoc["members"] = v
			}
		}
		var newFields []string
		for field, fieldDiff := range resourceDiff.Fields {
			if !isNewField(fieldDiff) {
				continue
			}
			// skip condition field, check mmv1/templates/terraform/resource_iam.html.markdown.tmpl for IamConditionsRequestType
			if field == "condition" || strings.HasPrefix(field, "condition.") {
				continue
			}
			if !fieldsInDoc[field] {
				newFields = append(newFields, field)
			}
		}
		if len(newFields) > 0 {
			sort.Strings(newFields)
			ret[resource] = MissingDocDetails{
				Name:     resource,
				FilePath: strings.ReplaceAll(docFilePath, repoPath, ""),
				Fields:   newFields,
			}

		}
	}
	return ret, nil
}