d8863611dc
BUG= R=sigmund@google.com Review URL: https://chromereviews.googleplex.com/125447013
76 lines
2.6 KiB
Dart
Executable File
76 lines
2.6 KiB
Dart
Executable File
#!/usr/bin/env dart
|
|
|
|
/// Command line tool to run the checker on a Dart program.
|
|
library ddc.bin.checker;
|
|
|
|
import 'dart:io';
|
|
|
|
import 'package:args/args.dart';
|
|
import 'package:logging/logging.dart' show Logger, Level;
|
|
|
|
import 'package:ddc/devc.dart';
|
|
import 'package:ddc/src/checker/dart_sdk.dart' show dartSdkDirectory, mockSdkSources;
|
|
import 'package:ddc/src/checker/resolver.dart' show TypeResolver;
|
|
|
|
final ArgParser argParser = new ArgParser()
|
|
..addFlag(
|
|
'sdk-check', abbr: 's', help: 'Typecheck sdk libs', defaultsTo: false)
|
|
..addOption('log', abbr: 'l', help: 'Logging level', defaultsTo: 'severe')
|
|
..addOption('dart-sdk', help: 'Dart SDK Path', defaultsTo: null)
|
|
..addFlag(
|
|
'dart-gen', abbr: 'd', help: 'Generate dart output', defaultsTo: false)
|
|
..addFlag(
|
|
'dart-gen-fmt', help: 'Generate readable dart output', defaultsTo: true)
|
|
..addFlag(
|
|
'mock-sdk', abbr: 'm', help: 'Use a mock Dart SDK', defaultsTo: false)
|
|
..addFlag('new-checker', abbr: 'n', help: 'Use the new type checker',
|
|
defaultsTo: false)
|
|
..addOption('out', abbr: 'o', help: 'Output directory', defaultsTo: null)
|
|
..addFlag('help', abbr: 'h', help: 'Display this message');
|
|
|
|
void _showUsageAndExit() {
|
|
print('usage: dartdevc [<options>] <file.dart>\n');
|
|
print('<file.dart> is a single Dart file to process.\n');
|
|
print('<options> include:\n');
|
|
print(argParser.usage);
|
|
exit(1);
|
|
}
|
|
|
|
int main(List<String> argv) {
|
|
ArgResults args = argParser.parse(argv);
|
|
if (args['help']) _showUsageAndExit();
|
|
|
|
bool shouldMockSdk = args['mock-sdk'];
|
|
String dartSdkPath;
|
|
if (!shouldMockSdk) {
|
|
dartSdkPath = args['dart-sdk'];
|
|
if (dartSdkPath == null) dartSdkPath = dartSdkDirectory;
|
|
if (dartSdkPath == null) {
|
|
print('Could not automatically find dart sdk path.');
|
|
print('Please pass in explicitly: --dart-sdk <path>');
|
|
exit(1);
|
|
}
|
|
}
|
|
|
|
if (args.rest.length == 0) {
|
|
print('Expected filename.');
|
|
_showUsageAndExit();
|
|
}
|
|
|
|
String levelName = args['log'].toUpperCase();
|
|
Level level = Level.LEVELS.firstWhere((Level l) => l.name == levelName);
|
|
var useColors = stdioType(stdout) == StdioType.TERMINAL;
|
|
setupLogger(level, print, useColors: useColors);
|
|
|
|
var typeResolver = new TypeResolver(shouldMockSdk ?
|
|
TypeResolver.sdkResolverFromMock(mockSdkSources) :
|
|
TypeResolver.sdkResolverFromDir(dartSdkPath));
|
|
|
|
var filename = args.rest[0];
|
|
compile(filename, typeResolver, checkSdk: args['sdk-check'],
|
|
formatOutput: args['dart-gen-fmt'], outputDart: args['dart-gen'],
|
|
outputDir: args['out'], useColors: useColors).then((success) {
|
|
exit(success ? 0 : 1);
|
|
});
|
|
}
|