chore(shorebird_cli): prettify doctor output formatting (#2167)

This commit is contained in:
Bryan Oltman
2024-05-29 15:37:28 -04:00
committed by GitHub
parent 72bca4faa1
commit af744d29b6
3 changed files with 36 additions and 18 deletions
+16 -1
View File
@@ -1,3 +1,5 @@
import 'dart:convert';
import 'package:mason_logger/mason_logger.dart';
import 'package:scoped_deps/scoped_deps.dart';
import 'package:shorebird_cli/src/logger.dart';
@@ -100,7 +102,20 @@ class Doctor {
}
for (final issue in unresolvedIssues) {
logger.info(' ${issue.displayMessage}');
if (issue.displayMessage == null) {
continue;
}
final lines = const LineSplitter().convert(issue.displayMessage!);
for (final (i, line) in lines.indexed) {
var leadingPaddingSpaceCount = 2;
if (i > 0) {
// Indent subsequent lines to align with the first line after the
// leading string and the space following it.
leadingPaddingSpaceCount += issue.severity.rawLeading.length + 1;
}
logger.info('${' ' * leadingPaddingSpaceCount}$line');
}
}
allIssues.addAll(unresolvedIssues);
@@ -22,12 +22,21 @@ enum ValidationIssueSeverity {
/// Display helpers for printing [ValidationIssue]s.
extension Display on ValidationIssueSeverity {
String get leading {
String get rawLeading {
switch (this) {
case ValidationIssueSeverity.error:
return red.wrap('[✗]')!;
return '[✗]';
case ValidationIssueSeverity.warning:
return yellow.wrap('[!]')!;
return '[!]';
}
}
String get displayLeading {
switch (this) {
case ValidationIssueSeverity.error:
return red.wrap(rawLeading)!;
case ValidationIssueSeverity.warning:
return yellow.wrap(rawLeading)!;
}
}
}
@@ -52,7 +61,7 @@ class ValidationIssue {
/// A console-friendly description of this issue.
String? get displayMessage {
return '${severity.leading} $message';
return '${severity.displayLeading} $message';
}
// coverage:ignore-start
@@ -12,7 +12,9 @@ void main() {
group(Doctor, () {
const validationWarning = ValidationIssue(
severity: ValidationIssueSeverity.warning,
message: 'warning',
message: '''
warning
with multiple lines''',
);
const validationError = ValidationIssue(
severity: ValidationIssueSeverity.error,
@@ -75,18 +77,10 @@ void main() {
verify(validator.validate).called(1);
}
verify(
() =>
logger.info(any(that: stringContainsInOrder(['[!]', 'warning']))),
).called(1);
verify(
() => logger.info(any(that: stringContainsInOrder(['[✗]', 'error']))),
).called(1);
verify(
() => logger.info(any(that: contains('2 issues detected.'))),
).called(1);
verify(() => logger.info(' ${yellow.wrap('[!]')} warning')).called(1);
verify(() => logger.info(' with multiple lines')).called(1);
verify(() => logger.info(' ${red.wrap('[]')} error')).called(1);
verify(() => logger.info('2 issues detected.')).called(1);
});
group('when validators only yield warnings', () {