@@ -298,6 +298,7 @@ func (e *Engine) check(ctx context.Context, path string, config interface{}, nam
298298
299299 var failures []output.Result
300300 var warnings []output.Result
301+ var excludes []output.Result
301302 for _ , ruleResult := range ruleQueryResult .Results {
302303
303304 // Exceptions have already been accounted for in the exception query so
@@ -311,6 +312,21 @@ func (e *Engine) check(ctx context.Context, path string, config interface{}, nam
311312 continue
312313 }
313314
315+ localExcludeQuery := fmt .Sprintf ("data.%s.exclude_%s[_][_] = %q" , namespace , removeRulePrefix (rule ), ruleResult .Message )
316+ localExcludeQueryResult , err := e .query (ctx , config , localExcludeQuery )
317+ if err != nil {
318+ return output.CheckResult {}, fmt .Errorf ("query exception: %w" , err )
319+ }
320+
321+ // If the query was a failure, let's have a look & see if an exception was written for it.
322+ if len (localExcludeQueryResult .Results ) > 0 {
323+ // append an exception & continue
324+ localExcludeResult := localExcludeQueryResult .Results [0 ]
325+ localExcludeResult .Message = localExcludeQuery
326+ excludes = append (excludes , localExcludeResult )
327+ continue
328+ }
329+
314330 if isFailure (rule ) {
315331 failures = append (failures , ruleResult )
316332 } else {
@@ -321,6 +337,7 @@ func (e *Engine) check(ctx context.Context, path string, config interface{}, nam
321337 checkResult .Failures = append (checkResult .Failures , failures ... )
322338 checkResult .Warnings = append (checkResult .Warnings , warnings ... )
323339 checkResult .Exceptions = append (checkResult .Exceptions , exceptions ... )
340+ checkResult .Excludes = append (checkResult .Excludes , excludes ... )
324341
325342 checkResult .Queries = append (checkResult .Queries , exceptionQueryResult )
326343 checkResult .Queries = append (checkResult .Queries , ruleQueryResult )
0 commit comments