[flutter_tools] Provide global options with subcommand help text (#54884)
diff --git a/packages/flutter_tools/lib/src/runner/flutter_command.dart b/packages/flutter_tools/lib/src/runner/flutter_command.dart index 852fc62..e6dfe4e 100644 --- a/packages/flutter_tools/lib/src/runner/flutter_command.dart +++ b/packages/flutter_tools/lib/src/runner/flutter_command.dart
@@ -848,6 +848,23 @@ } } + @override + String get usage { + final String usageWithoutDescription = super.usage.substring( + // The description plus two newlines. + description.length + 2, + ); + final String help = <String>[ + description, + '', + 'Global options:', + runner.argParser.usage, + '', + usageWithoutDescription, + ].join('\n'); + return help; + } + ApplicationPackageStore applicationPackages; /// Gets the parsed command-line option named [name] as `bool`.
diff --git a/packages/flutter_tools/test/general.shard/runner/flutter_command_test.dart b/packages/flutter_tools/test/general.shard/runner/flutter_command_test.dart index ca7b5fd..a66eb03 100644 --- a/packages/flutter_tools/test/general.shard/runner/flutter_command_test.dart +++ b/packages/flutter_tools/test/general.shard/runner/flutter_command_test.dart
@@ -42,6 +42,12 @@ when(mockProcessInfo.maxRss).thenReturn(10); }); + testUsingContext('help text contains global options', () { + final FakeCommand fake = FakeCommand(); + createTestCommandRunner(fake); + expect(fake.usage, contains('Global options:\n')); + }); + testUsingContext('honors shouldUpdateCache false', () async { final DummyFlutterCommand flutterCommand = DummyFlutterCommand(shouldUpdateCache: false); await flutterCommand.run(); @@ -423,10 +429,9 @@ }); } - class FakeCommand extends FlutterCommand { @override - String get description => null; + String get description => 'A fake command'; @override String get name => 'fake';