Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(533)

Unified Diff: lib/src/options.dart

Issue 1879373004: Implement modular compilation (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « lib/src/multi_package_resolver.dart ('k') | lib/src/report.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/src/options.dart
diff --git a/lib/src/options.dart b/lib/src/options.dart
deleted file mode 100644
index 1de515f748d8f3eb60359eba256a8b2d3815db05..0000000000000000000000000000000000000000
--- a/lib/src/options.dart
+++ /dev/null
@@ -1,338 +0,0 @@
-// Copyright (c) 2014, 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.
-
-/// Set of flags and options passed to the compiler
-
-import 'dart:io';
-
-import 'package:args/args.dart';
-import 'package:cli_util/cli_util.dart' show getSdkDir;
-import 'package:logging/logging.dart' show Level;
-import 'package:path/path.dart' as path;
-import 'package:yaml/yaml.dart';
-
-import 'utils.dart' show parseEnum, getEnumName;
-
-const String _V8_BINARY_DEFAULT = 'node';
-const bool _CLOSURE_DEFAULT = false;
-
-/// Older V8 versions do not accept default values with destructuring in
-/// arrow functions yet (e.g. `({a} = {}) => 1`) but happily accepts them
-/// with regular functions (e.g. `function({a} = {}) { return 1 }`).
-///
-/// Supporting the syntax:
-/// * Chrome Canary (51)
-/// * Firefox
-///
-/// Not yet supporting:
-/// * Atom (1.5.4)
-/// * Electron (0.36.3)
-///
-// TODO(ochafik): Simplify this code when our target platforms catch up.
-const bool _DESTRUCTURE_NAMED_PARAMS_DEFAULT = false;
-
-/// Options used to set up Source URI resolution in the analysis context.
-class SourceResolverOptions {
- /// Whether to resolve 'package:' uris using the multi-package resolver.
- final bool useMultiPackage;
-
- /// Custom URI mappings, such as "dart:foo" -> "path/to/foo.dart"
- final Map<String, String> customUrlMappings;
-
- /// 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;
-
- /// Whether to use a mock-sdk during compilation.
- final bool useMockSdk;
-
- /// Path to the dart-sdk. Null if `useMockSdk` is true or if the path couldn't
- /// be determined
- final String dartSdkPath;
-
- const SourceResolverOptions(
- {this.useMockSdk: false,
- this.dartSdkPath,
- this.useMultiPackage: false,
- this.customUrlMappings: const {},
- this.packageRoot: 'packages/',
- this.packagePaths: const <String>[]});
-}
-
-enum ModuleFormat { es6, legacy, node }
-ModuleFormat parseModuleFormat(String s) => parseEnum(s, ModuleFormat.values);
-
-// TODO(jmesserly): refactor all codegen options here.
-class CodegenOptions {
- /// Whether to emit the source map files.
- final bool emitSourceMaps;
-
- /// Whether to force compilation of code with static errors.
- final bool forceCompile;
-
- /// Output directory for generated code.
- final String outputDir;
-
- /// Emit Closure Compiler-friendly code.
- final bool closure;
-
- /// Enable ES6 destructuring of named parameters.
- final bool destructureNamedParams;
-
- /// Which module format to support.
- /// Currently 'es6' and 'legacy' are supported.
- final ModuleFormat moduleFormat;
-
- const CodegenOptions(
- {this.emitSourceMaps: true,
- this.forceCompile: false,
- this.closure: _CLOSURE_DEFAULT,
- this.destructureNamedParams: _DESTRUCTURE_NAMED_PARAMS_DEFAULT,
- this.outputDir,
- this.moduleFormat: ModuleFormat.legacy});
-}
-
-/// Options for devrun.
-class RunnerOptions {
- /// V8-based binary to be used to run the .js output (d8, iojs, node).
- /// Can be just the executable name if it's in the path, or a path to the
- /// executable.
- final String v8Binary;
-
- const RunnerOptions({this.v8Binary: _V8_BINARY_DEFAULT});
-}
-
-/// General options used by the dev compiler and server.
-class CompilerOptions {
- final SourceResolverOptions sourceOptions;
- final CodegenOptions codegenOptions;
- final RunnerOptions runnerOptions;
-
- /// Whether to check the sdk libraries.
- final bool checkSdk;
-
- /// Whether to use colors when interacting on the console.
- final bool useColors;
-
- /// Whether the user asked for help.
- final bool help;
-
- /// Whether the user asked for the app version.
- final bool version;
-
- /// Minimum log-level reported on the command-line.
- final Level logLevel;
-
- /// Location for runtime files, such as `dart_runtime.js`. By default this is
- /// inferred to be under `lib/runtime/` in the location of the `dev_compiler`
- /// package (if we can infer where that is located).
- final String runtimeDir;
-
- /// The files to compile.
- final List<String> inputs;
-
- /// The base directory for [inputs]. Module imports will be generated relative
- /// to this directory.
- final String inputBaseDir;
-
- const CompilerOptions(
- {this.sourceOptions: const SourceResolverOptions(),
- this.codegenOptions: const CodegenOptions(),
- this.runnerOptions: const RunnerOptions(),
- this.checkSdk: false,
- this.useColors: true,
- this.help: false,
- this.version: false,
- this.logLevel: Level.WARNING,
- this.runtimeDir,
- this.inputs,
- this.inputBaseDir});
-}
-
-/// Parses options from the command-line
-CompilerOptions parseOptions(List<String> argv, {bool forceOutDir: false}) {
- ArgResults args = argParser.parse(argv);
- bool showUsage = args['help'];
- bool showVersion = args['version'];
-
- var logLevel = Level.WARNING;
- var levelName = args['log'];
- if (levelName != null) {
- levelName = levelName.toUpperCase();
- logLevel = Level.LEVELS
- .firstWhere((l) => l.name == levelName, orElse: () => logLevel);
- }
- var useColors = stdioType(stdout) == StdioType.TERMINAL;
- var sdkPath = args['dart-sdk'];
- if (sdkPath == null && !args['mock-sdk']) {
- sdkPath = getSdkDir(argv).path;
- }
- var runtimeDir = args['runtime-dir'];
- if (runtimeDir == null) {
- runtimeDir = _computeRuntimeDir();
- }
- var outputDir = args['out'];
- if (outputDir == null && forceOutDir) {
- outputDir = Directory.systemTemp.createTempSync("dev_compiler_out_").path;
- }
-
- var v8Binary = args['v8-binary'];
- if (v8Binary == null) v8Binary = _V8_BINARY_DEFAULT;
-
- 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];
- }
-
- return new CompilerOptions(
- codegenOptions: new CodegenOptions(
- emitSourceMaps: args['source-maps'],
- forceCompile: args['force-compile'],
- closure: args['closure'],
- destructureNamedParams: args['destructure-named-params'],
- outputDir: outputDir,
- moduleFormat: parseModuleFormat(args['modules'])),
- sourceOptions: new SourceResolverOptions(
- useMockSdk: args['mock-sdk'],
- dartSdkPath: sdkPath,
- customUrlMappings: customUrlMappings,
- useMultiPackage: args['use-multi-package'],
- packageRoot: args['package-root'],
- packagePaths: args['package-paths'].split(',')),
- runnerOptions: new RunnerOptions(v8Binary: v8Binary),
- checkSdk: args['sdk-check'],
- useColors: useColors,
- help: showUsage,
- version: showVersion,
- logLevel: logLevel,
- runtimeDir: runtimeDir,
- inputs: args.rest);
-}
-
-final ArgParser argParser = new ArgParser()
- ..addFlag('sdk-check',
- abbr: 's', help: 'Typecheck sdk libs', defaultsTo: false)
- ..addFlag('mock-sdk',
- abbr: 'm', help: 'Use a mock Dart SDK', defaultsTo: false)
-
- // input/output options
- ..addOption('out', abbr: 'o', help: 'Output directory', defaultsTo: null)
- ..addOption('dart-sdk', help: 'Dart SDK Path', defaultsTo: null)
- ..addOption('package-root',
- 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)
- ..addOption('package-paths',
- help: 'if using the multi-package resolver, the list of directories to\n'
- 'look for packages in.',
- defaultsTo: '')
- ..addFlag('source-maps',
- help: 'Whether to emit source map files', defaultsTo: true)
- ..addOption('runtime-dir',
- help: 'Where to find dev_compiler\'s runtime files', defaultsTo: null)
- ..addOption('modules',
- help: 'Which module pattern to emit',
- allowed: ModuleFormat.values.map(getEnumName).toList(),
- allowedHelp: {
- getEnumName(ModuleFormat.es6): 'es6 modules',
- getEnumName(ModuleFormat.legacy):
- 'a custom format used by dartdevc, similar to AMD',
- getEnumName(ModuleFormat.node):
- 'node.js modules (https://nodejs.org/api/modules.html)'
- },
- defaultsTo: getEnumName(ModuleFormat.legacy))
-
- // general options
- ..addFlag('help', abbr: 'h', help: 'Display this message')
- ..addFlag('version',
- negatable: false, help: 'Display the Dev Compiler verion')
- ..addFlag('closure',
- help: 'Emit Closure Compiler-friendly code (experimental)',
- defaultsTo: _CLOSURE_DEFAULT)
- ..addFlag('destructure-named-params',
- help: 'Destructure named parameters (requires ES6-enabled runtime)',
- defaultsTo: _DESTRUCTURE_NAMED_PARAMS_DEFAULT)
- ..addFlag('force-compile',
- abbr: 'f', help: 'Compile code with static errors', defaultsTo: false)
- ..addOption('log', abbr: 'l', help: 'Logging level (defaults to warning)')
- ..addOption('v8-binary',
- help: 'V8-based binary to run JavaScript output with (iojs, node, d8)',
- defaultsTo: _V8_BINARY_DEFAULT);
-
-// TODO: Switch over to the `pub_cache` package (or the Resource API)?
-
-const _ENTRY_POINTS = const [
- 'dartdevc.dart',
- 'dev_compiler.dart',
- 'devrun.dart'
-];
-
-final _ENTRY_POINT_SNAPSHOTS = _ENTRY_POINTS.map((f) => "$f.snapshot");
-
-/// Tries to find the `lib/runtime/` directory of the dev_compiler package. This
-/// works when running devc from it's sources or from a snapshot that is
-/// activated via `pub global activate`.
-String _computeRuntimeDir() {
- var scriptPath = path.fromUri(Platform.script);
- var file = path.basename(scriptPath);
- var dir = path.dirname(scriptPath);
- var lastdir = path.basename(dir);
- dir = path.dirname(dir);
-
- // Both the source dartdevc.dart and the snapshot generated by pub global activate
- // are under a bin folder.
- if (lastdir != 'bin') return null;
-
- // And both under a project directory containing a pubspec.lock file.
- var lockfile = path.join(dir, 'pubspec.lock');
- if (!new File(lockfile).existsSync()) return null;
-
- // If running from sources we found it!
- if (_ENTRY_POINTS.contains(file)) {
- return path.join(dir, 'lib', 'runtime');
- }
-
- // If running from a pub global snapshot, we need to read the lock file to
- // find where the actual sources are located in the pub cache.
- if (_ENTRY_POINT_SNAPSHOTS.contains(file)) {
- // Note: this depends on implementation details of pub.
- var yaml = loadYaml(new File(lockfile).readAsStringSync());
- var info = yaml['packages']['dev_compiler'];
- if (info == null) return null;
-
- var cacheDir;
- if (info['source'] == 'hosted') {
- cacheDir = path.join(
- 'hosted', 'pub.dartlang.org', 'dev_compiler-${info["version"]}');
- } else if (info['source'] == 'git') {
- var ref = info['description']['resolved-ref'];
- cacheDir = path.join('git', 'dev_compiler-${ref}');
- }
-
- // We should be under "/path/to/pub-cache/global_packages/dev_compiler".
- // The pub-cache directory is two levels up, but we verify that the layout
- // looks correct.
- if (path.basename(dir) != 'dev_compiler') return null;
- dir = path.dirname(dir);
- if (path.basename(dir) != 'global_packages') return null;
- dir = path.dirname(dir);
- return path.join(dir, cacheDir, 'lib', 'runtime');
- }
- return null;
-}
« no previous file with comments | « lib/src/multi_package_resolver.dart ('k') | lib/src/report.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698