| Index: pkg/analyzer/lib/options.dart
|
| ===================================================================
|
| --- pkg/analyzer/lib/options.dart (revision 45350)
|
| +++ pkg/analyzer/lib/options.dart (working copy)
|
| @@ -1,443 +0,0 @@
|
| -// Copyright (c) 2013, 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 options;
|
| -
|
| -import 'dart:io';
|
| -
|
| -import 'package:args/args.dart';
|
| -
|
| -const _BINARY_NAME = 'dartanalyzer';
|
| -
|
| -/**
|
| - * Analyzer commandline configuration options.
|
| - */
|
| -class CommandLineOptions {
|
| - /** The path to the dart SDK */
|
| - final String dartSdkPath;
|
| -
|
| - /** A table mapping the names of defined variables to their values. */
|
| - final Map<String, String> definedVariables;
|
| -
|
| - /** Whether to report hints */
|
| - final bool disableHints;
|
| -
|
| - /** Whether to display version information */
|
| - final bool displayVersion;
|
| -
|
| - /**
|
| - * Whether to enable null-aware operators (DEP 9).
|
| - */
|
| - final bool enableNullAwareOperators;
|
| -
|
| - /**
|
| - * Whether to strictly follow the specification when generating warnings on
|
| - * "call" methods (fixes dartbug.com/21938).
|
| - */
|
| - final bool enableStrictCallChecks;
|
| -
|
| - /**
|
| - * Whether to treat type mismatches found during constant evaluation as
|
| - * errors.
|
| - */
|
| - final bool enableTypeChecks;
|
| -
|
| - /** Whether to ignore unrecognized flags */
|
| - final bool ignoreUnrecognizedFlags;
|
| -
|
| - /** Whether to log additional analysis messages and exceptions */
|
| - final bool log;
|
| -
|
| - /** Whether to use machine format for error display */
|
| - final bool machineFormat;
|
| -
|
| - /** The path to the package root */
|
| - final String packageRootPath;
|
| -
|
| - /** Whether to show performance statistics */
|
| - final bool perf;
|
| -
|
| - /** Batch mode (for unit testing) */
|
| - final bool shouldBatch;
|
| -
|
| - /** Whether to show package: warnings */
|
| - final bool showPackageWarnings;
|
| -
|
| - /** Whether to show SDK warnings */
|
| - final bool showSdkWarnings;
|
| -
|
| - /** The source files to analyze */
|
| - final List<String> sourceFiles;
|
| -
|
| - /** Whether to show both cold and hot performance statistics */
|
| - final bool warmPerf;
|
| -
|
| - /** Whether to treat warnings as fatal */
|
| - final bool warningsAreFatal;
|
| -
|
| - /** A table mapping library URIs to the file system path where the library
|
| - * source is located.
|
| - */
|
| - final Map<String, String> customUrlMappings;
|
| -
|
| - /**
|
| - * Initialize options from the given parsed [args].
|
| - */
|
| - CommandLineOptions._fromArgs(ArgResults args,
|
| - Map<String, String> definedVariables,
|
| - Map<String, String> customUrlMappings)
|
| - : dartSdkPath = args['dart-sdk'],
|
| - this.definedVariables = definedVariables,
|
| - disableHints = args['no-hints'],
|
| - displayVersion = args['version'],
|
| - enableNullAwareOperators = args['enable-null-aware-operators'],
|
| - enableStrictCallChecks = args['enable-strict-call-checks'],
|
| - enableTypeChecks = args['enable_type_checks'],
|
| - ignoreUnrecognizedFlags = args['ignore-unrecognized-flags'],
|
| - log = args['log'],
|
| - machineFormat = args['machine'] || args['format'] == 'machine',
|
| - packageRootPath = args['package-root'],
|
| - perf = args['perf'],
|
| - shouldBatch = args['batch'],
|
| - showPackageWarnings = args['show-package-warnings'] ||
|
| - args['package-warnings'],
|
| - showSdkWarnings = args['show-sdk-warnings'] || args['warnings'],
|
| - sourceFiles = args.rest,
|
| - warmPerf = args['warm-perf'],
|
| - warningsAreFatal = args['fatal-warnings'],
|
| - this.customUrlMappings = customUrlMappings;
|
| -
|
| - /**
|
| - * Parse [args] into [CommandLineOptions] describing the specified
|
| - * analyzer options. In case of a format error, prints error and exists.
|
| - */
|
| - static CommandLineOptions parse(List<String> args) {
|
| - CommandLineOptions options = _parse(args);
|
| - // check SDK
|
| - {
|
| - var sdkPath = options.dartSdkPath;
|
| - // check that SDK is specified
|
| - if (sdkPath == null) {
|
| - print('Usage: $_BINARY_NAME: no Dart SDK found.');
|
| - exit(15);
|
| - }
|
| - // check that SDK is existing directory
|
| - if (!(new Directory(sdkPath)).existsSync()) {
|
| - print('Usage: $_BINARY_NAME: invalid Dart SDK path: $sdkPath');
|
| - exit(15);
|
| - }
|
| - }
|
| - // OK
|
| - return options;
|
| - }
|
| -
|
| - static String _getVersion() {
|
| - try {
|
| - // This is relative to bin/snapshot, so ../..
|
| - String versionPath =
|
| - Platform.script.resolve('../../version').toFilePath();
|
| - File versionFile = new File(versionPath);
|
| - return versionFile.readAsStringSync().trim();
|
| - } catch (_) {
|
| - // This happens when the script is not running in the context of an SDK.
|
| - return "<unknown>";
|
| - }
|
| - }
|
| -
|
| - static CommandLineOptions _parse(List<String> args) {
|
| - args = args.expand((String arg) => arg.split('=')).toList();
|
| - var parser = new CommandLineParser()
|
| - ..addFlag('batch',
|
| - abbr: 'b',
|
| - help: 'Run in batch mode',
|
| - defaultsTo: false,
|
| - negatable: false)
|
| - ..addOption('dart-sdk', help: 'The path to the Dart SDK')
|
| - ..addOption('package-root',
|
| - abbr: 'p',
|
| - help: 'The path to the package root. The flag package-root is deprecated. Remove to use package information computed by pub.')
|
| - ..addOption('format',
|
| - help: 'Specifies the format in which errors are displayed')
|
| - ..addFlag('machine',
|
| - help: 'Print errors in a format suitable for parsing (deprecated)',
|
| - defaultsTo: false,
|
| - negatable: false)
|
| - ..addFlag('version',
|
| - help: 'Print the analyzer version',
|
| - defaultsTo: false,
|
| - negatable: false)
|
| - ..addFlag('no-hints',
|
| - help: 'Do not show hint results', defaultsTo: false, negatable: false)
|
| - ..addFlag('ignore-unrecognized-flags',
|
| - help: 'Ignore unrecognized command line flags',
|
| - defaultsTo: false,
|
| - negatable: false)
|
| - ..addFlag('fatal-warnings',
|
| - help: 'Treat non-type warnings as fatal',
|
| - defaultsTo: false,
|
| - negatable: false)
|
| - ..addFlag('package-warnings',
|
| - help: 'Show warnings from package: imports',
|
| - defaultsTo: false,
|
| - negatable: false)
|
| - ..addFlag('show-package-warnings',
|
| - help: 'Show warnings from package: imports (deprecated)',
|
| - defaultsTo: false,
|
| - negatable: false)
|
| - ..addFlag('perf',
|
| - help: 'Show performance statistics',
|
| - defaultsTo: false,
|
| - negatable: false)
|
| - ..addFlag('warnings',
|
| - help: 'Show warnings from SDK imports',
|
| - defaultsTo: false,
|
| - negatable: false)
|
| - ..addFlag('show-sdk-warnings',
|
| - help: 'Show warnings from SDK imports (deprecated)',
|
| - defaultsTo: false,
|
| - negatable: false)
|
| - ..addFlag('help',
|
| - abbr: 'h',
|
| - help: 'Display this help message',
|
| - defaultsTo: false,
|
| - negatable: false)
|
| - ..addOption('url-mapping',
|
| - help: '--url-mapping=libraryUri,/path/to/library.dart directs the '
|
| - 'analyzer to use "library.dart" as the source for an import ' 'of "libraryUri"',
|
| - allowMultiple: true)
|
| - //
|
| - // Hidden flags.
|
| - //
|
| - ..addFlag('enable-async',
|
| - help: 'Enable support for the proposed async feature',
|
| - defaultsTo: false,
|
| - negatable: false,
|
| - hide: true)
|
| - ..addFlag('enable-enum',
|
| - help: 'Enable support for the proposed enum feature',
|
| - defaultsTo: false,
|
| - negatable: false,
|
| - hide: true)
|
| - ..addFlag('enable-null-aware-operators',
|
| - help: 'Enable support for null-aware operators (DEP 9)',
|
| - defaultsTo: false,
|
| - negatable: false,
|
| - hide: true)
|
| - ..addFlag('enable-strict-call-checks',
|
| - help: 'Fix issue 21938',
|
| - defaultsTo: false,
|
| - negatable: false,
|
| - hide: true)
|
| - ..addFlag('log',
|
| - help: 'Log additional messages and exceptions',
|
| - defaultsTo: false,
|
| - negatable: false,
|
| - hide: true)
|
| - ..addFlag('warm-perf',
|
| - help: 'Show both cold and warm performance statistics',
|
| - defaultsTo: false,
|
| - negatable: false,
|
| - hide: true)
|
| - ..addFlag('enable_type_checks',
|
| - help: 'Check types in constant evaluation',
|
| - defaultsTo: false,
|
| - negatable: false,
|
| - hide: true);
|
| -
|
| - try {
|
| - // TODO(scheglov) https://code.google.com/p/dart/issues/detail?id=11061
|
| - args =
|
| - args.map((String arg) => arg == '-batch' ? '--batch' : arg).toList();
|
| - Map<String, String> definedVariables = <String, String>{};
|
| - var results = parser.parse(args, definedVariables);
|
| - // help requests
|
| - if (results['help']) {
|
| - _showUsage(parser);
|
| - exit(0);
|
| - }
|
| - // batch mode and input files
|
| - if (results['batch']) {
|
| - if (results.rest.isNotEmpty) {
|
| - print('No source files expected in the batch mode.');
|
| - _showUsage(parser);
|
| - exit(15);
|
| - }
|
| - } else if (results['version']) {
|
| - print('$_BINARY_NAME version ${_getVersion()}');
|
| - exit(0);
|
| - } else {
|
| - if (results.rest.isEmpty) {
|
| - _showUsage(parser);
|
| - exit(15);
|
| - }
|
| - }
|
| - Map<String, String> customUrlMappings = <String, String>{};
|
| - for (String mapping in results['url-mapping']) {
|
| - List<String> splitMapping = mapping.split(',');
|
| - if (splitMapping.length != 2) {
|
| - _showUsage(parser);
|
| - exit(15);
|
| - }
|
| - customUrlMappings[splitMapping[0]] = splitMapping[1];
|
| - }
|
| - return new CommandLineOptions._fromArgs(
|
| - results, definedVariables, customUrlMappings);
|
| - } on FormatException catch (e) {
|
| - print(e.message);
|
| - _showUsage(parser);
|
| - exit(15);
|
| - }
|
| - }
|
| -
|
| - static _showUsage(parser) {
|
| - print('Usage: $_BINARY_NAME [options...] <libraries to analyze...>');
|
| - print(parser.getUsage());
|
| - print('');
|
| - print('For more information, see http://www.dartlang.org/tools/analyzer.');
|
| - }
|
| -}
|
| -
|
| -/**
|
| - * Commandline argument parser.
|
| - *
|
| - * TODO(pquitslund): when the args package supports ignoring unrecognized
|
| - * options/flags, this class can be replaced with a simple [ArgParser] instance.
|
| - */
|
| -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')) {
|
| -
|
| - //TODO(pquitslund): replace w/ the following once library skew issues are
|
| - // sorted out
|
| - //return args.where((arg) => !arg.startsWith('--') ||
|
| - // _knownFlags.contains(arg.substring(2)));
|
| -
|
| - // 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)) {
|
| - //print('remove: $arg');
|
| - //"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;
|
| - }
|
| -}
|
|
|