mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00
73 lines
2.4 KiB
Dart
73 lines
2.4 KiB
Dart
// Copyright 2014 The Flutter Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
import 'dart:async';
|
|
|
|
import 'package:completion/completion.dart';
|
|
|
|
import '../base/common.dart';
|
|
import '../base/file_system.dart';
|
|
import '../globals.dart' as globals;
|
|
import '../runner/flutter_command.dart';
|
|
|
|
class ShellCompletionCommand extends FlutterCommand {
|
|
ShellCompletionCommand() {
|
|
argParser.addFlag(
|
|
'overwrite',
|
|
defaultsTo: false,
|
|
negatable: true,
|
|
help: 'Causes the given shell completion setup script to be overwritten if it already exists.',
|
|
);
|
|
}
|
|
|
|
@override
|
|
final String name = 'bash-completion';
|
|
|
|
@override
|
|
final String description = 'Output command line shell completion setup scripts.\n\n'
|
|
'This command prints the flutter command line completion setup script for Bash and Zsh. To '
|
|
'use it, specify an output file and follow the instructions in the generated output file to '
|
|
'install it in your shell environment. Once it is sourced, your shell will be able to '
|
|
'complete flutter commands and options.';
|
|
|
|
@override
|
|
final List<String> aliases = <String>['zsh-completion'];
|
|
|
|
@override
|
|
bool get shouldUpdateCache => false;
|
|
|
|
/// Return null to disable analytics recording of the `bash-completion` command.
|
|
@override
|
|
Future<String> get usagePath async => null;
|
|
|
|
@override
|
|
Future<FlutterCommandResult> runCommand() async {
|
|
if (argResults.rest.length > 1) {
|
|
throwToolExit('Too many arguments given to bash-completion command.', exitCode: 1);
|
|
}
|
|
|
|
if (argResults.rest.isEmpty || argResults.rest.first == '-') {
|
|
final String script = generateCompletionScript(<String>['flutter']);
|
|
globals.stdio.stdoutWrite(script);
|
|
return FlutterCommandResult.warning();
|
|
}
|
|
|
|
final File outputFile = globals.fs.file(argResults.rest.first);
|
|
if (outputFile.existsSync() && !boolArg('overwrite')) {
|
|
throwToolExit(
|
|
'Output file ${outputFile.path} already exists, will not overwrite. '
|
|
'Use --overwrite to force overwriting existing output file.',
|
|
exitCode: 1,
|
|
);
|
|
}
|
|
try {
|
|
outputFile.writeAsStringSync(generateCompletionScript(<String>['flutter']));
|
|
} on FileSystemException catch (error) {
|
|
throwToolExit('Unable to write shell completion setup script.\n$error', exitCode: 1);
|
|
}
|
|
|
|
return FlutterCommandResult.success();
|
|
}
|
|
}
|