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) |