| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 /// Set of flags and options passed to the compiler | 5 /// Set of flags and options passed to the compiler |
| 6 library dev_compiler.src.options; | 6 library dev_compiler.src.options; |
| 7 | 7 |
| 8 import 'dart:io'; | 8 import 'dart:io'; |
| 9 | 9 |
| 10 import 'package:args/args.dart'; | 10 import 'package:args/args.dart'; |
| (...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 229 | 229 |
| 230 /// Whether to emit the source map files. | 230 /// Whether to emit the source map files. |
| 231 @override | 231 @override |
| 232 final bool emitSourceMaps; | 232 final bool emitSourceMaps; |
| 233 | 233 |
| 234 /// Location for runtime files, such as `dart_runtime.js`. By default this is | 234 /// Location for runtime files, such as `dart_runtime.js`. By default this is |
| 235 /// inferred to be under `lib/runtime/` in the location of the `dev_compiler` | 235 /// inferred to be under `lib/runtime/` in the location of the `dev_compiler` |
| 236 /// package (if we can infer where that is located). | 236 /// package (if we can infer where that is located). |
| 237 final String runtimeDir; | 237 final String runtimeDir; |
| 238 | 238 |
| 239 /// Custom URI mappings, such as "dart:foo" -> "path/to/foo.dart" |
| 240 final Map<String, String> customUrlMappings; |
| 241 |
| 239 CompilerOptions({this.allowConstCasts: true, this.checkSdk: false, | 242 CompilerOptions({this.allowConstCasts: true, this.checkSdk: false, |
| 240 this.dumpInfo: false, this.dumpInfoFile, this.dumpSrcDir, | 243 this.dumpInfo: false, this.dumpInfoFile, this.dumpSrcDir, |
| 241 this.forceCompile: false, this.formatOutput: false, | 244 this.forceCompile: false, this.formatOutput: false, |
| 242 this.ignoreTypes: false, | 245 this.ignoreTypes: false, |
| 243 this.wrapClosures: RulesOptions.wrapClosuresDefault, this.outputDir, | 246 this.wrapClosures: RulesOptions.wrapClosuresDefault, this.outputDir, |
| 244 this.outputDart: false, this.useColors: true, | 247 this.outputDart: false, this.useColors: true, |
| 245 this.covariantGenerics: true, this.relaxedCasts: true, | 248 this.covariantGenerics: true, this.relaxedCasts: true, |
| 246 this.useMultiPackage: false, this.packageRoot: 'packages/', | 249 this.useMultiPackage: false, this.packageRoot: 'packages/', |
| 247 this.packagePaths: const <String>[], this.resources: const <String>[], | 250 this.packagePaths: const <String>[], this.resources: const <String>[], |
| 248 this.inferDownwards: RulesOptions.inferDownwardsDefault, | 251 this.inferDownwards: RulesOptions.inferDownwardsDefault, |
| 249 this.inferFromOverrides: ResolverOptions.inferFromOverridesDefault, | 252 this.inferFromOverrides: ResolverOptions.inferFromOverridesDefault, |
| 250 this.inferTransitively: ResolverOptions.inferTransitivelyDefault, | 253 this.inferTransitively: ResolverOptions.inferTransitivelyDefault, |
| 251 this.onlyInferConstsAndFinalFields: ResolverOptions.onlyInferConstAndFinal
FieldsDefault, | 254 this.onlyInferConstsAndFinalFields: ResolverOptions.onlyInferConstAndFinal
FieldsDefault, |
| 252 this.nonnullableTypes: TypeOptions.NONNULLABLE_TYPES, this.help: false, | 255 this.nonnullableTypes: TypeOptions.NONNULLABLE_TYPES, this.help: false, |
| 253 this.useMockSdk: false, this.dartSdkPath, this.logLevel: Level.SEVERE, | 256 this.useMockSdk: false, this.dartSdkPath, this.logLevel: Level.SEVERE, |
| 254 this.emitSourceMaps: true, this.entryPointFile: null, | 257 this.emitSourceMaps: true, this.entryPointFile: null, |
| 255 this.serverMode: false, this.useImplicitHtml: false, | 258 this.serverMode: false, this.useImplicitHtml: false, |
| 256 this.enableHashing: false, this.host: 'localhost', this.port: 8080, | 259 this.enableHashing: false, this.host: 'localhost', this.port: 8080, |
| 257 this.runtimeDir}); | 260 this.runtimeDir, this.customUrlMappings: const {}}); |
| 258 } | 261 } |
| 259 | 262 |
| 260 /// Parses options from the command-line | 263 /// Parses options from the command-line |
| 261 CompilerOptions parseOptions(List<String> argv) { | 264 CompilerOptions parseOptions(List<String> argv) { |
| 262 ArgResults args = argParser.parse(argv); | 265 ArgResults args = argParser.parse(argv); |
| 266 bool showUsage = args['help']; |
| 267 |
| 263 var serverMode = args['server']; | 268 var serverMode = args['server']; |
| 264 var enableHashing = args['hashing']; | 269 var enableHashing = args['hashing']; |
| 265 if (enableHashing == null) { | 270 if (enableHashing == null) { |
| 266 enableHashing = serverMode; | 271 enableHashing = serverMode; |
| 267 } | 272 } |
| 268 // TODO(jmesserly): shouldn't level always default to warning? | 273 // TODO(jmesserly): shouldn't level always default to warning? |
| 269 var logLevel = serverMode ? Level.WARNING : Level.SEVERE; | 274 var logLevel = serverMode ? Level.WARNING : Level.SEVERE; |
| 270 var levelName = args['log']; | 275 var levelName = args['log']; |
| 271 if (levelName != null) { | 276 if (levelName != null) { |
| 272 levelName = levelName.toUpperCase(); | 277 levelName = levelName.toUpperCase(); |
| 273 logLevel = Level.LEVELS.firstWhere((l) => l.name == levelName, | 278 logLevel = Level.LEVELS.firstWhere((l) => l.name == levelName, |
| 274 orElse: () => logLevel); | 279 orElse: () => logLevel); |
| 275 } | 280 } |
| 276 var useColors = stdioType(stdout) == StdioType.TERMINAL; | 281 var useColors = stdioType(stdout) == StdioType.TERMINAL; |
| 277 var sdkPath = args['dart-sdk']; | 282 var sdkPath = args['dart-sdk']; |
| 278 if (sdkPath == null && !args['mock-sdk']) { | 283 if (sdkPath == null && !args['mock-sdk']) { |
| 279 sdkPath = getSdkDir(argv).path; | 284 sdkPath = getSdkDir(argv).path; |
| 280 } | 285 } |
| 281 var runtimeDir = args['runtime-dir']; | 286 var runtimeDir = args['runtime-dir']; |
| 282 if (runtimeDir == null) { | 287 if (runtimeDir == null) { |
| 283 runtimeDir = _computeRuntimeDir(); | 288 runtimeDir = _computeRuntimeDir(); |
| 284 } | 289 } |
| 285 var outputDir = args['out']; | 290 var outputDir = args['out']; |
| 286 if (outputDir == null && serverMode) { | 291 if (outputDir == null && serverMode) { |
| 287 outputDir = Directory.systemTemp.createTempSync("dev_compiler_out_").path; | 292 outputDir = Directory.systemTemp.createTempSync("dev_compiler_out_").path; |
| 288 } | 293 } |
| 289 var dumpInfo = args['dump-info']; | 294 var dumpInfo = args['dump-info']; |
| 290 if (dumpInfo == null) dumpInfo = serverMode; | 295 if (dumpInfo == null) dumpInfo = serverMode; |
| 291 | 296 |
| 297 var customUrlMappings = <String, String>{}; |
| 298 for (var mapping in args['url-mapping']) { |
| 299 var splitMapping = mapping.split(','); |
| 300 if (splitMapping.length != 2) { |
| 301 showUsage = true; |
| 302 continue; |
| 303 } |
| 304 customUrlMappings[splitMapping[0]] = splitMapping[1]; |
| 305 } |
| 306 |
| 292 var entryPointFile = args.rest.length == 0 ? null : args.rest.first; | 307 var entryPointFile = args.rest.length == 0 ? null : args.rest.first; |
| 293 | 308 |
| 294 return new CompilerOptions( | 309 return new CompilerOptions( |
| 295 allowConstCasts: args['allow-const-casts'], | 310 allowConstCasts: args['allow-const-casts'], |
| 296 checkSdk: args['sdk-check'], | 311 checkSdk: args['sdk-check'], |
| 297 dumpInfo: dumpInfo, | 312 dumpInfo: dumpInfo, |
| 298 dumpInfoFile: args['dump-info-file'], | 313 dumpInfoFile: args['dump-info-file'], |
| 299 dumpSrcDir: args['dump-src-to'], | 314 dumpSrcDir: args['dump-src-to'], |
| 300 forceCompile: args['force-compile'] || serverMode, | 315 forceCompile: args['force-compile'] || serverMode, |
| 301 formatOutput: args['dart-gen-fmt'], | 316 formatOutput: args['dart-gen-fmt'], |
| 302 ignoreTypes: args['ignore-types'], | 317 ignoreTypes: args['ignore-types'], |
| 303 wrapClosures: args['wrap-closures'], | 318 wrapClosures: args['wrap-closures'], |
| 304 outputDart: args['dart-gen'], | 319 outputDart: args['dart-gen'], |
| 305 outputDir: outputDir, | 320 outputDir: outputDir, |
| 306 covariantGenerics: args['covariant-generics'], | 321 covariantGenerics: args['covariant-generics'], |
| 307 relaxedCasts: args['relaxed-casts'], | 322 relaxedCasts: args['relaxed-casts'], |
| 308 useColors: useColors, | 323 useColors: useColors, |
| 324 customUrlMappings: customUrlMappings, |
| 309 useMultiPackage: args['use-multi-package'], | 325 useMultiPackage: args['use-multi-package'], |
| 310 packageRoot: args['package-root'], | 326 packageRoot: args['package-root'], |
| 311 packagePaths: args['package-paths'].split(','), | 327 packagePaths: args['package-paths'].split(','), |
| 312 resources: args['resources'] | 328 resources: args['resources'] |
| 313 .split(',') | 329 .split(',') |
| 314 .where((s) => s.isNotEmpty) | 330 .where((s) => s.isNotEmpty) |
| 315 .toList(), | 331 .toList(), |
| 316 inferDownwards: args['infer-downwards'], | 332 inferDownwards: args['infer-downwards'], |
| 317 inferFromOverrides: args['infer-from-overrides'], | 333 inferFromOverrides: args['infer-from-overrides'], |
| 318 inferTransitively: args['infer-transitively'], | 334 inferTransitively: args['infer-transitively'], |
| 319 onlyInferConstsAndFinalFields: args['infer-only-finals'], | 335 onlyInferConstsAndFinalFields: args['infer-only-finals'], |
| 320 nonnullableTypes: optionsToList(args['nonnullable'], | 336 nonnullableTypes: optionsToList(args['nonnullable'], |
| 321 defaultValue: TypeOptions.NONNULLABLE_TYPES), | 337 defaultValue: TypeOptions.NONNULLABLE_TYPES), |
| 322 help: args['help'], | 338 help: showUsage, |
| 323 useMockSdk: args['mock-sdk'], | 339 useMockSdk: args['mock-sdk'], |
| 324 dartSdkPath: sdkPath, | 340 dartSdkPath: sdkPath, |
| 325 logLevel: logLevel, | 341 logLevel: logLevel, |
| 326 emitSourceMaps: args['source-maps'], | 342 emitSourceMaps: args['source-maps'], |
| 327 entryPointFile: entryPointFile, | 343 entryPointFile: entryPointFile, |
| 328 serverMode: serverMode, | 344 serverMode: serverMode, |
| 329 useImplicitHtml: serverMode && entryPointFile.endsWith('.dart'), | 345 useImplicitHtml: serverMode && entryPointFile.endsWith('.dart'), |
| 330 enableHashing: enableHashing, | 346 enableHashing: enableHashing, |
| 331 host: args['host'], | 347 host: args['host'], |
| 332 port: int.parse(args['port']), | 348 port: int.parse(args['port']), |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 373 ..addOption('dart-sdk', help: 'Dart SDK Path', defaultsTo: null) | 389 ..addOption('dart-sdk', help: 'Dart SDK Path', defaultsTo: null) |
| 374 ..addFlag('dart-gen', | 390 ..addFlag('dart-gen', |
| 375 abbr: 'd', help: 'Generate dart output', defaultsTo: false) | 391 abbr: 'd', help: 'Generate dart output', defaultsTo: false) |
| 376 ..addFlag('dart-gen-fmt', | 392 ..addFlag('dart-gen-fmt', |
| 377 help: 'Generate readable dart output', defaultsTo: true) | 393 help: 'Generate readable dart output', defaultsTo: true) |
| 378 ..addOption('dump-src-to', help: 'Dump dart src code', defaultsTo: null) | 394 ..addOption('dump-src-to', help: 'Dump dart src code', defaultsTo: null) |
| 379 ..addOption('package-root', | 395 ..addOption('package-root', |
| 380 abbr: 'p', | 396 abbr: 'p', |
| 381 help: 'Package root to resolve "package:" imports', | 397 help: 'Package root to resolve "package:" imports', |
| 382 defaultsTo: 'packages/') | 398 defaultsTo: 'packages/') |
| 399 ..addOption('url-mapping', |
| 400 help: '--url-mapping=libraryUri,/path/to/library.dart uses library.dart\n' |
| 401 'as the source for an import of of "libraryUri".', |
| 402 allowMultiple: true, |
| 403 splitCommas: false) |
| 383 ..addFlag('use-multi-package', | 404 ..addFlag('use-multi-package', |
| 384 help: 'Whether to use the multi-package resolver for "package:" imports', | 405 help: 'Whether to use the multi-package resolver for "package:" imports', |
| 385 defaultsTo: false) | 406 defaultsTo: false) |
| 386 ..addOption('package-paths', | 407 ..addOption('package-paths', |
| 387 help: 'if using the multi-package resolver, the list of directories to\n' | 408 help: 'if using the multi-package resolver, the list of directories to\n' |
| 388 'look for packages in.', defaultsTo: '') | 409 'look for packages in.', defaultsTo: '') |
| 389 ..addOption('resources', | 410 ..addOption('resources', |
| 390 help: 'Additional resources to serve', defaultsTo: '') | 411 help: 'Additional resources to serve', defaultsTo: '') |
| 391 ..addFlag('source-maps', | 412 ..addFlag('source-maps', |
| 392 help: 'Whether to emit source map files', defaultsTo: true) | 413 help: 'Whether to emit source map files', defaultsTo: true) |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 458 // The pub-cache directory is two levels up, but we verify that the layout | 479 // The pub-cache directory is two levels up, but we verify that the layout |
| 459 // looks correct. | 480 // looks correct. |
| 460 if (path.basename(dir) != 'dev_compiler') return null; | 481 if (path.basename(dir) != 'dev_compiler') return null; |
| 461 dir = path.dirname(dir); | 482 dir = path.dirname(dir); |
| 462 if (path.basename(dir) != 'global_packages') return null; | 483 if (path.basename(dir) != 'global_packages') return null; |
| 463 dir = path.dirname(dir); | 484 dir = path.dirname(dir); |
| 464 return path.join(dir, cacheDir, 'lib', 'runtime'); | 485 return path.join(dir, cacheDir, 'lib', 'runtime'); |
| 465 } | 486 } |
| 466 return null; | 487 return null; |
| 467 } | 488 } |
| OLD | NEW |