mirror of
https://github.com/flutter/flutter
synced 2024-10-13 19:52:53 +00:00
Fixes terse doctor output when no devices available. (#22108)
This commit is contained in:
parent
f16d005d66
commit
306bcbde8a
|
@ -124,12 +124,20 @@ class Doctor {
|
||||||
for (DoctorValidator validator in validators) {
|
for (DoctorValidator validator in validators) {
|
||||||
final ValidationResult result = await validator.validate();
|
final ValidationResult result = await validator.validate();
|
||||||
buffer.write('${result.leadingBox} ${validator.title} is ');
|
buffer.write('${result.leadingBox} ${validator.title} is ');
|
||||||
if (result.type == ValidationType.missing)
|
switch (result.type) {
|
||||||
buffer.write('not installed.');
|
case ValidationType.missing:
|
||||||
else if (result.type == ValidationType.partial)
|
buffer.write('not installed.');
|
||||||
buffer.write('partially installed; more components are available.');
|
break;
|
||||||
else
|
case ValidationType.partial:
|
||||||
buffer.write('fully installed.');
|
buffer.write('partially installed; more components are available.');
|
||||||
|
break;
|
||||||
|
case ValidationType.notAvailable:
|
||||||
|
buffer.write('not available.');
|
||||||
|
break;
|
||||||
|
case ValidationType.installed:
|
||||||
|
buffer.write('fully installed.');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (result.statusInfo != null)
|
if (result.statusInfo != null)
|
||||||
buffer.write(' (${result.statusInfo})');
|
buffer.write(' (${result.statusInfo})');
|
||||||
|
@ -171,11 +179,17 @@ class Doctor {
|
||||||
}
|
}
|
||||||
status.stop();
|
status.stop();
|
||||||
|
|
||||||
if (result.type == ValidationType.missing) {
|
switch (result.type) {
|
||||||
doctorResult = false;
|
case ValidationType.missing:
|
||||||
}
|
doctorResult = false;
|
||||||
if (result.type != ValidationType.installed) {
|
issues += 1;
|
||||||
issues += 1;
|
break;
|
||||||
|
case ValidationType.partial:
|
||||||
|
case ValidationType.notAvailable:
|
||||||
|
issues += 1;
|
||||||
|
break;
|
||||||
|
case ValidationType.installed:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result.statusInfo != null)
|
if (result.statusInfo != null)
|
||||||
|
@ -238,7 +252,8 @@ abstract class Workflow {
|
||||||
enum ValidationType {
|
enum ValidationType {
|
||||||
missing,
|
missing,
|
||||||
partial,
|
partial,
|
||||||
installed
|
notAvailable,
|
||||||
|
installed,
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class DoctorValidator {
|
abstract class DoctorValidator {
|
||||||
|
@ -286,6 +301,7 @@ class GroupedValidator extends DoctorValidator {
|
||||||
mergedType = ValidationType.partial;
|
mergedType = ValidationType.partial;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case ValidationType.notAvailable:
|
||||||
case ValidationType.partial:
|
case ValidationType.partial:
|
||||||
mergedType = ValidationType.partial;
|
mergedType = ValidationType.partial;
|
||||||
break;
|
break;
|
||||||
|
@ -322,6 +338,7 @@ class ValidationResult {
|
||||||
return '[✗]';
|
return '[✗]';
|
||||||
case ValidationType.installed:
|
case ValidationType.installed:
|
||||||
return '[✓]';
|
return '[✓]';
|
||||||
|
case ValidationType.notAvailable:
|
||||||
case ValidationType.partial:
|
case ValidationType.partial:
|
||||||
return '[!]';
|
return '[!]';
|
||||||
}
|
}
|
||||||
|
@ -600,7 +617,7 @@ class IntelliJValidatorOnMac extends IntelliJValidator {
|
||||||
}
|
}
|
||||||
|
|
||||||
class DeviceValidator extends DoctorValidator {
|
class DeviceValidator extends DoctorValidator {
|
||||||
DeviceValidator() : super('Connected devices');
|
DeviceValidator() : super('Connected device');
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<ValidationResult> validate() async {
|
Future<ValidationResult> validate() async {
|
||||||
|
@ -619,7 +636,7 @@ class DeviceValidator extends DoctorValidator {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (devices.isEmpty) {
|
if (devices.isEmpty) {
|
||||||
return ValidationResult(ValidationType.partial, messages);
|
return ValidationResult(ValidationType.notAvailable, messages);
|
||||||
} else {
|
} else {
|
||||||
return ValidationResult(ValidationType.installed, messages, statusInfo: '${devices.length} available');
|
return ValidationResult(ValidationType.installed, messages, statusInfo: '${devices.length} available');
|
||||||
}
|
}
|
||||||
|
|
|
@ -148,13 +148,16 @@ void main() {
|
||||||
'[✗] Missing Validator\n'
|
'[✗] Missing Validator\n'
|
||||||
' ✗ A useful error message\n'
|
' ✗ A useful error message\n'
|
||||||
' ! A hint message\n'
|
' ! A hint message\n'
|
||||||
|
'[!] Not Available Validator\n'
|
||||||
|
' ✗ A useful error message\n'
|
||||||
|
' ! A hint message\n'
|
||||||
'[!] Partial Validator with only a Hint\n'
|
'[!] Partial Validator with only a Hint\n'
|
||||||
' ! There is a hint here\n'
|
' ! There is a hint here\n'
|
||||||
'[!] Partial Validator with Errors\n'
|
'[!] Partial Validator with Errors\n'
|
||||||
' ✗ A error message indicating partial installation\n'
|
' ✗ A error message indicating partial installation\n'
|
||||||
' ! Maybe a hint will help the user\n'
|
' ! Maybe a hint will help the user\n'
|
||||||
'\n'
|
'\n'
|
||||||
'! Doctor found issues in 3 categories.\n'
|
'! Doctor found issues in 4 categories.\n'
|
||||||
));
|
));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -170,6 +173,11 @@ void main() {
|
||||||
' • A message that is not an error\n'
|
' • A message that is not an error\n'
|
||||||
' ! A hint message\n'
|
' ! A hint message\n'
|
||||||
'\n'
|
'\n'
|
||||||
|
'[!] Not Available Validator\n'
|
||||||
|
' ✗ A useful error message\n'
|
||||||
|
' • A message that is not an error\n'
|
||||||
|
' ! A hint message\n'
|
||||||
|
'\n'
|
||||||
'[!] Partial Validator with only a Hint\n'
|
'[!] Partial Validator with only a Hint\n'
|
||||||
' ! There is a hint here\n'
|
' ! There is a hint here\n'
|
||||||
' • But there is no error\n'
|
' • But there is no error\n'
|
||||||
|
@ -179,7 +187,7 @@ void main() {
|
||||||
' ! Maybe a hint will help the user\n'
|
' ! Maybe a hint will help the user\n'
|
||||||
' • An extra message with some verbose details\n'
|
' • An extra message with some verbose details\n'
|
||||||
'\n'
|
'\n'
|
||||||
'! Doctor found issues in 3 categories.\n'
|
'! Doctor found issues in 4 categories.\n'
|
||||||
));
|
));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -301,6 +309,19 @@ class MissingValidator extends DoctorValidator {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class NotAvailableValidator extends DoctorValidator {
|
||||||
|
NotAvailableValidator(): super('Not Available Validator');
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<ValidationResult> validate() async {
|
||||||
|
final List<ValidationMessage> messages = <ValidationMessage>[];
|
||||||
|
messages.add(ValidationMessage.error('A useful error message'));
|
||||||
|
messages.add(ValidationMessage('A message that is not an error'));
|
||||||
|
messages.add(ValidationMessage.hint('A hint message'));
|
||||||
|
return ValidationResult(ValidationType.notAvailable, messages);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class PartialValidatorWithErrors extends DoctorValidator {
|
class PartialValidatorWithErrors extends DoctorValidator {
|
||||||
PartialValidatorWithErrors() : super('Partial Validator with Errors');
|
PartialValidatorWithErrors() : super('Partial Validator with Errors');
|
||||||
|
|
||||||
|
@ -336,6 +357,7 @@ class FakeDoctor extends Doctor {
|
||||||
_validators = <DoctorValidator>[];
|
_validators = <DoctorValidator>[];
|
||||||
_validators.add(PassingValidator('Passing Validator'));
|
_validators.add(PassingValidator('Passing Validator'));
|
||||||
_validators.add(MissingValidator());
|
_validators.add(MissingValidator());
|
||||||
|
_validators.add(NotAvailableValidator());
|
||||||
_validators.add(PartialValidatorWithHintsOnly());
|
_validators.add(PartialValidatorWithHintsOnly());
|
||||||
_validators.add(PartialValidatorWithErrors());
|
_validators.add(PartialValidatorWithErrors());
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue