chore(shorebird_cli): prettify doctor output formatting (#2167)
This commit is contained in:
@@ -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', () {
|
||||
|
||||
Reference in New Issue
Block a user