| Index: pkg/analysis_server/lib/src/server/driver.dart
|
| ===================================================================
|
| --- pkg/analysis_server/lib/src/server/driver.dart (revision 45355)
|
| +++ pkg/analysis_server/lib/src/server/driver.dart (working copy)
|
| @@ -17,7 +17,6 @@
|
| import 'package:analyzer/file_system/physical_file_system.dart';
|
| import 'package:analyzer/instrumentation/file_instrumentation.dart';
|
| import 'package:analyzer/instrumentation/instrumentation.dart';
|
| -import 'package:analyzer/options.dart';
|
| import 'package:analyzer/plugin/plugin.dart';
|
| import 'package:analyzer/src/generated/engine.dart';
|
| import 'package:analyzer/src/generated/incremental_logger.dart';
|
| @@ -419,3 +418,127 @@
|
| return uuid;
|
| }
|
| }
|
| +
|
| +/// Commandline argument parser. (Copied from analyzer/lib/options.dart)
|
| +/// TODO(pquitslund): replaces with a simple [ArgParser] instance
|
| +/// when the args package supports ignoring unrecognized
|
| +/// options/flags (https://github.com/dart-lang/args/issues/9).
|
| +class CommandLineParser {
|
| + final List<String> _knownFlags;
|
| + final bool _alwaysIgnoreUnrecognized;
|
| + final ArgParser _parser;
|
| +
|
| + /// Creates a new command line parser
|
| + CommandLineParser({bool alwaysIgnoreUnrecognized: false})
|
| + : _knownFlags = <String>[],
|
| + _alwaysIgnoreUnrecognized = alwaysIgnoreUnrecognized,
|
| + _parser = new ArgParser(allowTrailingOptions: true);
|
| +
|
| + ArgParser get parser => _parser;
|
| +
|
| + /// Defines a flag.
|
| + /// See [ArgParser.addFlag()].
|
| + void addFlag(String name, {String abbr, String help, bool defaultsTo: false,
|
| + bool negatable: true, void callback(bool value), bool hide: false}) {
|
| + _knownFlags.add(name);
|
| + _parser.addFlag(name,
|
| + abbr: abbr,
|
| + help: help,
|
| + defaultsTo: defaultsTo,
|
| + negatable: negatable,
|
| + callback: callback,
|
| + hide: hide);
|
| + }
|
| +
|
| + /// Defines a value-taking option.
|
| + /// See [ArgParser.addOption()].
|
| + void addOption(String name, {String abbr, String help, List<String> allowed,
|
| + Map<String, String> allowedHelp, String defaultsTo, void callback(value),
|
| + bool allowMultiple: false}) {
|
| + _knownFlags.add(name);
|
| + _parser.addOption(name,
|
| + abbr: abbr,
|
| + help: help,
|
| + allowed: allowed,
|
| + allowedHelp: allowedHelp,
|
| + defaultsTo: defaultsTo,
|
| + callback: callback,
|
| + allowMultiple: allowMultiple);
|
| + }
|
| +
|
| + /// Generates a string displaying usage information for the defined options.
|
| + /// See [ArgParser.usage].
|
| + String getUsage() => _parser.usage;
|
| +
|
| + /// Parses [args], a list of command-line arguments, matches them against the
|
| + /// flags and options defined by this parser, and returns the result. The
|
| + /// values of any defined variables are captured in the given map.
|
| + /// See [ArgParser].
|
| + ArgResults parse(
|
| + List<String> args, Map<String, String> definedVariables) => _parser
|
| + .parse(_filterUnknowns(parseDefinedVariables(args, definedVariables)));
|
| +
|
| + List<String> parseDefinedVariables(
|
| + List<String> args, Map<String, String> definedVariables) {
|
| + int count = args.length;
|
| + List<String> remainingArgs = <String>[];
|
| + for (int i = 0; i < count; i++) {
|
| + String arg = args[i];
|
| + if (arg == '--') {
|
| + while (i < count) {
|
| + remainingArgs.add(args[i++]);
|
| + }
|
| + } else if (arg.startsWith("-D")) {
|
| + definedVariables[arg.substring(2)] = args[++i];
|
| + } else {
|
| + remainingArgs.add(arg);
|
| + }
|
| + }
|
| + return remainingArgs;
|
| + }
|
| +
|
| + List<String> _filterUnknowns(List<String> args) {
|
| +
|
| + // Only filter args if the ignore flag is specified, or if
|
| + // _alwaysIgnoreUnrecognized was set to true
|
| + if (_alwaysIgnoreUnrecognized ||
|
| + args.contains('--ignore-unrecognized-flags')) {
|
| +
|
| + // Filter all unrecognized flags and options.
|
| + List<String> filtered = <String>[];
|
| + for (int i = 0; i < args.length; ++i) {
|
| + String arg = args[i];
|
| + if (arg.startsWith('--') && arg.length > 2) {
|
| + String option = arg.substring(2);
|
| + // strip the last '=value'
|
| + int equalsOffset = option.lastIndexOf('=');
|
| + if (equalsOffset != -1) {
|
| + option = option.substring(0, equalsOffset);
|
| + }
|
| + // check the option
|
| + if (!_knownFlags.contains(option)) {
|
| + //"eat" params by advancing to the next flag/option
|
| + i = _getNextFlagIndex(args, i);
|
| + } else {
|
| + filtered.add(arg);
|
| + }
|
| + } else {
|
| + filtered.add(arg);
|
| + }
|
| + }
|
| +
|
| + return filtered;
|
| + } else {
|
| + return args;
|
| + }
|
| + }
|
| +
|
| + _getNextFlagIndex(args, i) {
|
| + for (; i < args.length; ++i) {
|
| + if (args[i].startsWith('--')) {
|
| + return i;
|
| + }
|
| + }
|
| + return i;
|
| + }
|
| +}
|
|
|