Index: pkg/front_end/lib/src/fasta/command_line.dart |
diff --git a/pkg/front_end/lib/src/fasta/command_line.dart b/pkg/front_end/lib/src/fasta/command_line.dart |
deleted file mode 100644 |
index 322ae7f83bf2973e8d2745218e96c3f76b816d3b..0000000000000000000000000000000000000000 |
--- a/pkg/front_end/lib/src/fasta/command_line.dart |
+++ /dev/null |
@@ -1,191 +0,0 @@ |
-// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
-// for details. All rights reserved. Use of this source code is governed by a |
-// BSD-style license that can be found in the LICENSE file. |
- |
-library fasta.command_line; |
- |
-import 'fasta_codes.dart' show Message, templateFastaCLIArgumentRequired; |
- |
-import 'deprecated_problems.dart' show deprecated_inputError; |
- |
-import 'problems.dart' show unhandled; |
- |
-deprecated_argumentError(Message usage, String message) { |
- if (usage != null) print(usage.message); |
- deprecated_inputError(null, null, message); |
-} |
- |
-argumentError(Message usage, Message message) { |
- if (usage != null) print(usage.message); |
- deprecated_inputError(null, null, message.message); |
-} |
- |
-class ParsedArguments { |
- final Map<String, dynamic> options = <String, dynamic>{}; |
- final List<String> arguments = <String>[]; |
- |
- toString() => "ParsedArguments($options, $arguments)"; |
-} |
- |
-/// Abstract parser for command-line options. |
-class CommandLine { |
- final Map<String, dynamic> options; |
- |
- final List<String> arguments; |
- |
- final Message usage; |
- |
- CommandLine.parsed(ParsedArguments p, this.usage) |
- : this.options = p.options, |
- this.arguments = p.arguments { |
- validate(); |
- if (verbose) { |
- print(p); |
- } |
- } |
- |
- CommandLine(List<String> arguments, |
- {Map<String, dynamic> specification, Message usage}) |
- : this.parsed(parse(arguments, specification, usage), usage); |
- |
- bool get verbose { |
- return options.containsKey("-v") || options.containsKey("--verbose"); |
- } |
- |
- /// Override to validate arguments and options. |
- void validate() {} |
- |
- /// Parses a list of command-line [arguments] into options and arguments. |
- /// |
- /// An /option/ is something that, normally, starts with `-` or `--` (one or |
- /// two dashes). However, as a special case `/?` and `/h` are also recognized |
- /// as options for increased compatibility with Windows. An option can have a |
- /// value. |
- /// |
- /// An /argument/ is something that isn't an option, for example, a file name. |
- /// |
- /// The specification is a map of options to one of the type literals `Uri`, |
- /// `int`, `bool`, or `String`, or a comma (`","`) that represents option |
- /// values of type [Uri], [int], [bool], [String], or a comma-separated list |
- /// of [String], respectively. |
- /// |
- /// If [arguments] contains `"--"`, anything before is parsed as options, and |
- /// arguments; anything following is treated as arguments (even if starting |
- /// with, for example, a `-`). |
- /// |
- /// Anything that looks like an option is assumed to be a `bool` option set |
- /// to true, unless it's mentioned in [specification] in which case the |
- /// option requires a value, either on the form `--option value` or |
- /// `--option=value`. |
- /// |
- /// This method performs only a limited amount of validation, but if an error |
- /// occurs, it will print [usage] along with a specific error message. |
- static ParsedArguments parse(List<String> arguments, |
- Map<String, dynamic> specification, Message usage) { |
- specification ??= const <String, dynamic>{}; |
- ParsedArguments result = new ParsedArguments(); |
- int index = arguments.indexOf("--"); |
- Iterable<String> nonOptions = const <String>[]; |
- Iterator<String> iterator = arguments.iterator; |
- if (index != -1) { |
- nonOptions = arguments.skip(index + 1); |
- iterator = arguments.take(index).iterator; |
- } |
- while (iterator.moveNext()) { |
- String argument = iterator.current; |
- if (argument.startsWith("-")) { |
- var valueSpecification = specification[argument]; |
- String value; |
- if (valueSpecification != null) { |
- if (!iterator.moveNext()) { |
- return argumentError(usage, |
- templateFastaCLIArgumentRequired.withArguments(argument)); |
- } |
- value = iterator.current; |
- } else { |
- index = argument.indexOf("="); |
- if (index != -1) { |
- value = argument.substring(index + 1); |
- argument = argument.substring(0, index); |
- valueSpecification = specification[argument]; |
- } |
- } |
- if (valueSpecification == null) { |
- if (value != null) { |
- return deprecated_argumentError( |
- usage, "Argument '$argument' doesn't take a value: '$value'."); |
- } |
- result.options[argument] = true; |
- } else { |
- if (valueSpecification is! String && valueSpecification is! Type) { |
- return deprecated_argumentError( |
- usage, |
- "Unrecognized type of value " |
- "specification: ${valueSpecification.runtimeType}."); |
- } |
- switch ("$valueSpecification") { |
- case ",": |
- result.options |
- .putIfAbsent(argument, () => <String>[]) |
- .addAll(value.split(",")); |
- break; |
- |
- case "int": |
- case "bool": |
- case "String": |
- case "Uri": |
- if (result.options.containsKey(argument)) { |
- return deprecated_argumentError( |
- usage, |
- "Multiple values for '$argument': " |
- "'${result.options[argument]}' and '$value'."); |
- } |
- var parsedValue; |
- if (valueSpecification == int) { |
- parsedValue = int.parse(value, onError: (_) { |
- return deprecated_argumentError( |
- usage, "Value for '$argument', '$value', isn't an int."); |
- }); |
- } else if (valueSpecification == bool) { |
- if (value == "true" || value == "yes") { |
- parsedValue = true; |
- } else if (value == "false" || value == "no") { |
- parsedValue = false; |
- } else { |
- return deprecated_argumentError( |
- usage, |
- "Value for '$argument' is '$value', " |
- "but expected one of: 'true', 'false', 'yes', or 'no'."); |
- } |
- } else if (valueSpecification == Uri) { |
- parsedValue = Uri.base.resolve(value); |
- } else if (valueSpecification == String) { |
- parsedValue = value; |
- } else if (valueSpecification is String) { |
- return deprecated_argumentError( |
- usage, |
- "Unrecognized value specification: " |
- "'$valueSpecification', try using a type literal instead."); |
- } else { |
- // All possible cases should have been handled above. |
- return unhandled("${valueSpecification.runtimeType}", |
- "CommandLine.parse", -1, null); |
- } |
- result.options[argument] = parsedValue; |
- break; |
- |
- default: |
- return deprecated_argumentError(usage, |
- "Unrecognized value specification: '$valueSpecification'."); |
- } |
- } |
- } else if (argument == "/?" || argument == "/h") { |
- result.options[argument] = true; |
- } else { |
- result.arguments.add(argument); |
- } |
- } |
- result.arguments.addAll(nonOptions); |
- return result; |
- } |
-} |