printAffected static method
Implementation
static void printAffected(ImpactResult result, {String? warningMessage, bool explain = false}) {
printHeader();
if (warningMessage != null) {
print(warningMessage);
print('');
}
if (result.isFallback) {
final exp = result.fallbackExplanation ?? "Dependency analysis is incomplete. Falling back to the full test suite to avoid false negatives.";
print('\u26a0 ' + exp);
print('Reason: ' + (result.fallbackReason ?? 'unknown'));
print('');
}
if (result.changedFiles.isEmpty) {
print('No changed files detected.');
print('');
} else {
print('Changed:');
for (final f in result.changedFiles) {
print(' M ' + f);
}
print('');
}
if (result.analysisLevel == 'symbol' && result.changedSymbols.isNotEmpty) {
print('Changed symbol(s):');
for (final sym in result.changedSymbols) {
print(' ? ' + sym);
}
print('');
}
if (result.isFallback) {
print('Affected tests:');
print(' ALL ' + result.totalTests.toString() + ' tests (Fallback active)');
print('');
} else if (result.affectedTests.isEmpty) {
print('Affected tests:');
print(' None');
print('');
} else {
print('Affected tests:');
print('');
for (final affected in result.affectedTests) {
print(' ? ' + affected.testPath);
if (explain && result.impactPaths.isNotEmpty) {
final matchingPaths = result.impactPaths.where((p) => p.testPath == affected.testPath);
for (final path in matchingPaths) {
print(' Impact path:');
print(' ' + path.testPath);
for (final s in path.symbolChain) {
print(' ?');
print(' ' + s);
}
}
} else if (affected.dependencyChain.length > 1) {
final chain = affected.dependencyChain.reversed.join(' -> ');
print(' reason: ' + chain);
}
}
print('');
}
if (result.unaffectedCount > 0) {
print('Not affected:');
for (final skipped in result.unaffectedTests) {
print(' ? ' + skipped);
}
print('');
}
print('Impact:');
print(' ' + result.affectedCount.toString() + ' / ' + result.totalTests.toString() + ' tests (Level: ' + result.analysisLevel + ')');
}