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

Unified Diff: bin/dartdevc.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 | « no previous file | bin/devrun.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: bin/dartdevc.dart
diff --git a/bin/dartdevc.dart b/bin/dartdevc.dart
index 31fe287f30c5c9ece72b10eb6cfa92d74b89fd40..6be7a969f9cb54b4436749b15489cd80169cf8f8 100755
--- a/bin/dartdevc.dart
+++ b/bin/dartdevc.dart
@@ -1,46 +1,78 @@
#!/usr/bin/env dart
-// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2016, 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.
-/// Runs dev_compiler's checker, and optionally the code generator.
-/// Also can run a server for local development.
-library dev_compiler.bin.dartdevc;
+/// Command line entry point for Dart Development Compiler (dartdevc).
+///
+/// Supported commands are
+/// * compile: builds a collection of dart libraries into a single JS module
+///
+/// Additionally, these commands are being considered
+/// * link: combines several JS modules into a single JS file
+/// * build: compiles & links a set of code, automatically determining
+/// appropriate groupings of libraries to combine into JS modules
+/// * watch: watch a directory and recompile build units automatically
+/// * serve: uses `watch` to recompile and exposes a simple static file server
+/// for local development
+///
+/// These commands are combined so we have less names to expose on the PATH,
+/// and for development simplicity while the precise UI has not been determined.
+///
+/// A more typical structure for web tools is simply to have the compiler with
+/// "watch" as an option. The challenge for us is:
+///
+/// * Dart used to assume whole-program compiles, so we don't have a
+/// user-declared unit of building, and neither "libraries" or "packages" will
+/// work,
+/// * We do not assume a `node` JS installation, so we cannot easily reuse
+/// existing tools for the "link" step, or assume users have a local
+/// file server,
+/// * We didn't have a file watcher API at first,
+/// * We had no conventions about where compiled output should go (or even
+/// that we would be compiling at all, vs running on an in-browser Dart VM),
+/// * We wanted a good first impression with our simple examples, so we used
+/// local file servers, and users have an expectation of it now, even though
+/// it doesn't scale to typical apps that need their own real servers.
import 'dart:io';
+import 'package:args/command_runner.dart';
+import 'package:dev_compiler/src/compiler/command.dart';
-import 'package:dev_compiler/devc.dart' show devCompilerVersion;
-import 'package:dev_compiler/src/compiler.dart'
- show validateOptions, compile, setupLogger;
-import 'package:dev_compiler/src/options.dart';
-
-const String _appName = 'dartdevc';
-
-void _showUsageAndExit() {
- print('usage: dartdevc [<options>] <file.dart>...\n');
- print('<file.dart> is one or more Dart files to process.\n');
- print('<options> include:\n');
- print(argParser.usage);
- exit(1);
-}
-
-main(List<String> args) {
- var options;
-
+main(List<String> args) async {
+ var runner = new CommandRunner('dartdevc', 'Dart Development Compiler');
+ runner.addCommand(new CompileCommand());
try {
- options = validateOptions(args);
- } on FormatException catch (e) {
- print('${e.message}\n');
- _showUsageAndExit();
- }
-
- if (options == null || options.help) _showUsageAndExit();
- if (options.version) {
- print('${_appName} version ${devCompilerVersion}');
- exit(0);
+ await runner.run(args);
+ } on UsageException catch (e) {
+ // Incorrect usage, input file not found, etc.
+ print(e);
+ exit(64);
+ } on CompileErrorException catch (e) {
+ // Code has error(s) and failed to compile.
+ print(e);
+ exit(1);
+ } catch (e, s) {
+ // Anything else is likely a compiler bug.
+ //
+ // --unsafe-force-compile is a bit of a grey area, but it's nice not to
+ // crash while compiling
+ // (of course, output code may crash, if it had errors).
+ //
+ print("");
+ print("We're sorry, you've found a bug in our compiler.");
+ print("You can report this bug at:");
+ print(" https://github.com/dart-lang/dev_compiler/issues");
+ print("");
+ print("Please include the information below in your report, along with");
+ print("any other information that may help us track it down. Thanks!");
+ print("");
+ print(" dartdevc arguments: " + args.join(' '));
+ print(" dart --version: ${Platform.version}");
+ print("");
+ print("```");
+ print(e);
+ print(s);
+ print("```");
}
-
- setupLogger(options.logLevel, print);
- bool success = compile(options);
- exit(success ? 0 : 1);
}
« no previous file with comments | « no previous file | bin/devrun.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698