Currently all the direct rule validations run in sequence. The problem with this is that if any rule in particular takes a long time to finish, this will cause a delay in processing (emitting to sink, writing to disk, and printing) all validations.
Instead consider running each plugins validations in a goroutine. The goroutines can then put their validation results in a channel. As the validationResults are read from the channel, they can be emitted to a sink, written to disk, and printed. This will also ensure we process validation results as they complete rather than waiting for all validation results to be ready before reporting on the first result.
Summary
Currently all the direct rule validations run in sequence. The problem with this is that if any rule in particular takes a long time to finish, this will cause a delay in processing (emitting to sink, writing to disk, and printing) all validations.
Instead consider running each plugins validations in a goroutine. The goroutines can then put their validation results in a channel. As the validationResults are read from the channel, they can be emitted to a sink, written to disk, and printed. This will also ensure we process validation results as they complete rather than waiting for all validation results to be ready before reporting on the first result.