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
}