Chromium Code Reviews| Index: lib/src/options.dart |
| diff --git a/lib/src/options.dart b/lib/src/options.dart |
| index 4abc5a0c822c03faa96002ba79accabdcec9ab99..5e617ba2203aa34d976861e59a03752385b99109 100644 |
| --- a/lib/src/options.dart |
| +++ b/lib/src/options.dart |
| @@ -15,22 +15,9 @@ import 'package:path/path.dart' as path; |
| import 'package:yaml/yaml.dart'; |
| /// Options used by our checker. |
| -// TODO(jmesserly): move useMultiPackage/packageRoot to CompilerOptions. |
| -class ResolverOptions { |
| - /// Whether to resolve 'package:' uris using the multi-package resolver. |
| - final bool useMultiPackage; |
|
vsm
2015/06/03 15:37:47
Seems a little weird to move these out of Resolver
Jennifer Messerly
2015/06/03 16:24:11
Hmmm. What is "resolution" in this context? Analyz
|
| - |
| - /// Package root when resolving 'package:' urls the standard way. |
| - final String packageRoot; |
| - |
| - /// List of paths used for the multi-package resolver. |
| - final List<String> packagePaths; |
| - |
| - /// List of additional non-Dart resources to resolve and serve. |
| - final List<String> resources; |
| - |
| +abstract class ResolverOptions { |
| /// Whether to infer return types and field types from overriden members. |
| - final bool inferFromOverrides; |
| + bool get inferFromOverrides; |
| static const inferFromOverridesDefault = true; |
| /// Whether to infer types for consts and fields by looking at initializers on |
| @@ -47,27 +34,20 @@ class ResolverOptions { |
| /// |
| /// When this feature is turned off, we don't use the type of `B` to infer the |
| /// type of `A`, even if `B` has a declared type. |
| - final bool inferTransitively; |
| + bool get inferTransitively; |
| static const inferTransitivelyDefault = true; |
| /// Restrict inference of fields and top-levels to those that are final and |
| /// const. |
| - final bool onlyInferConstsAndFinalFields; |
| + bool get onlyInferConstsAndFinalFields; |
| static const onlyInferConstAndFinalFieldsDefault = false; |
| /// File where to start compilation from. |
| - final String entryPointFile; |
| + String get entryPointFile; |
| // True if the resolver should implicitly provide an html entry point. |
| - final bool useImplicitHtml; |
| + bool get useImplicitHtml; |
| static const String implicitHtmlFile = 'index.html'; |
| - |
| - ResolverOptions({this.useMultiPackage: false, this.packageRoot: 'packages/', |
| - this.packagePaths: const <String>[], this.resources: const <String>[], |
| - this.inferFromOverrides: inferFromOverridesDefault, |
| - this.inferTransitively: inferTransitivelyDefault, |
| - this.onlyInferConstsAndFinalFields: onlyInferConstAndFinalFieldsDefault, |
| - this.entryPointFile: null, this.useImplicitHtml: false}); |
| } |
| // TODO(vsm): Merge RulesOptions and TypeOptions |
| @@ -181,20 +161,19 @@ class CompilerOptions implements RulesOptions, ResolverOptions, JSCodeOptions { |
| @override |
| final bool relaxedCasts; |
| + /// Custom URI mappings, such as "dart:foo" -> "path/to/foo.dart" |
| + final Map<String, String> customUrlMappings; |
| + |
| /// Whether to resolve 'package:' uris using the multi-package resolver. |
| - @override |
| final bool useMultiPackage; |
| /// Package root when resolving 'package:' urls the standard way. |
| - @override |
| final String packageRoot; |
| /// List of paths used for the multi-package resolver. |
| - @override |
| final List<String> packagePaths; |
| /// List of additional non-Dart resources to resolve and serve. |
| - @override |
| final List<String> resources; |
| /// Whether to infer types downwards from local context |
| @@ -243,8 +222,9 @@ class CompilerOptions implements RulesOptions, ResolverOptions, JSCodeOptions { |
| this.wrapClosures: RulesOptions.wrapClosuresDefault, this.outputDir, |
| this.outputDart: false, this.useColors: true, |
| this.covariantGenerics: true, this.relaxedCasts: true, |
| - this.useMultiPackage: false, this.packageRoot: 'packages/', |
| - this.packagePaths: const <String>[], this.resources: const <String>[], |
| + this.customUrlMappings: const {}, this.useMultiPackage: false, |
| + this.packageRoot: 'packages/', this.packagePaths: const <String>[], |
| + this.resources: const <String>[], |
| this.inferDownwards: RulesOptions.inferDownwardsDefault, |
| this.inferFromOverrides: ResolverOptions.inferFromOverridesDefault, |
| this.inferTransitively: ResolverOptions.inferTransitivelyDefault, |
| @@ -260,6 +240,8 @@ class CompilerOptions implements RulesOptions, ResolverOptions, JSCodeOptions { |
| /// Parses options from the command-line |
| CompilerOptions parseOptions(List<String> argv) { |
| ArgResults args = argParser.parse(argv); |
| + bool showUsage = args['help']; |
| + |
| var serverMode = args['server']; |
| var enableHashing = args['hashing']; |
| if (enableHashing == null) { |
| @@ -289,6 +271,16 @@ CompilerOptions parseOptions(List<String> argv) { |
| var dumpInfo = args['dump-info']; |
| if (dumpInfo == null) dumpInfo = serverMode; |
| + var customUrlMappings = <String, String>{}; |
| + for (var mapping in args['url-mapping']) { |
| + var splitMapping = mapping.split(','); |
| + if (splitMapping.length != 2) { |
| + showUsage = true; |
| + continue; |
| + } |
| + customUrlMappings[splitMapping[0]] = splitMapping[1]; |
| + } |
| + |
| var entryPointFile = args.rest.length == 0 ? null : args.rest.first; |
| return new CompilerOptions( |
| @@ -306,6 +298,7 @@ CompilerOptions parseOptions(List<String> argv) { |
| covariantGenerics: args['covariant-generics'], |
| relaxedCasts: args['relaxed-casts'], |
| useColors: useColors, |
| + customUrlMappings: customUrlMappings, |
| useMultiPackage: args['use-multi-package'], |
| packageRoot: args['package-root'], |
| packagePaths: args['package-paths'].split(','), |
| @@ -319,7 +312,7 @@ CompilerOptions parseOptions(List<String> argv) { |
| onlyInferConstsAndFinalFields: args['infer-only-finals'], |
| nonnullableTypes: optionsToList(args['nonnullable'], |
| defaultValue: TypeOptions.NONNULLABLE_TYPES), |
| - help: args['help'], |
| + help: showUsage, |
| useMockSdk: args['mock-sdk'], |
| dartSdkPath: sdkPath, |
| logLevel: logLevel, |
| @@ -380,6 +373,11 @@ final ArgParser argParser = new ArgParser() |
| abbr: 'p', |
| help: 'Package root to resolve "package:" imports', |
| defaultsTo: 'packages/') |
| + ..addOption('url-mapping', |
| + help: '--url-mapping=libraryUri,/path/to/library.dart uses library.dart\n' |
| + 'as the source for an import of of "libraryUri".', |
| + allowMultiple: true, |
| + splitCommas: false) |
| ..addFlag('use-multi-package', |
| help: 'Whether to use the multi-package resolver for "package:" imports', |
| defaultsTo: false) |