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

Side by Side Diff: pkg/polymer/lib/src/build/runner.dart

Issue 112843004: Add linter by default for polymer's pub-build, also cleans up the linter code. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 /** 5 /**
6 * Definitions used to run the polymer linter and deploy tools without using 6 * Definitions used to run the polymer linter and deploy tools without using
7 * pub serve or pub deploy. 7 * pub serve or pub deploy.
8 */ 8 */
9 library polymer.src.build.runner; 9 library polymer.src.build.runner;
10 10
(...skipping 24 matching lines...) Expand all
35 35
36 /** Whether to run transformers on the test folder. */ 36 /** Whether to run transformers on the test folder. */
37 final bool transformTests; 37 final bool transformTests;
38 38
39 /** Whether to apply transformers on polymer dependencies. */ 39 /** Whether to apply transformers on polymer dependencies. */
40 final bool transformPolymerDependencies; 40 final bool transformPolymerDependencies;
41 41
42 /** Directory where to generate code, if any. */ 42 /** Directory where to generate code, if any. */
43 final String outDir; 43 final String outDir;
44 44
45 /**
46 * Whether to print error messages using a json-format that tools, such as the
47 * Dart Editor, can process.
48 */
49 final String machineFormat;
50
45 BarbackOptions(this.phases, this.outDir, {currentPackage, packageDirs, 51 BarbackOptions(this.phases, this.outDir, {currentPackage, packageDirs,
46 this.transformTests: false, this.transformPolymerDependencies: false}) 52 this.transformTests: false, this.transformPolymerDependencies: false,
53 this.machineFormat: false})
47 : currentPackage = (currentPackage != null 54 : currentPackage = (currentPackage != null
48 ? currentPackage : readCurrentPackageFromPubspec()), 55 ? currentPackage : readCurrentPackageFromPubspec()),
49 packageDirs = (packageDirs != null 56 packageDirs = (packageDirs != null
50 ? packageDirs : _readPackageDirsFromPub(currentPackage)); 57 ? packageDirs : _readPackageDirsFromPub(currentPackage));
51 58
52 } 59 }
53 60
54 /** 61 /**
55 * Creates a barback system as specified by [options] and runs it. Returns a 62 * Creates a barback system as specified by [options] and runs it. Returns a
56 * future that contains the list of assets generated after barback runs to 63 * future that contains the list of assets generated after barback runs to
57 * completion. 64 * completion.
58 */ 65 */
59 Future<AssetSet> runBarback(BarbackOptions options) { 66 Future<AssetSet> runBarback(BarbackOptions options) {
60 var barback = new Barback(new _PolymerPackageProvider(options.packageDirs)); 67 var barback = new Barback(new _PolymerPackageProvider(options.packageDirs));
61 _initBarback(barback, options); 68 _initBarback(barback, options);
62 _attachListeners(barback); 69 _attachListeners(barback, options);
63 if (options.outDir == null) return barback.getAllAssets(); 70 if (options.outDir == null) return barback.getAllAssets();
64 return _emitAllFiles(barback, options); 71 return _emitAllFiles(barback, options);
65 } 72 }
66 73
67 /** Extract the current package from the pubspec.yaml file. */ 74 /** Extract the current package from the pubspec.yaml file. */
68 String readCurrentPackageFromPubspec([String dir]) { 75 String readCurrentPackageFromPubspec([String dir]) {
69 var pubspec = new File( 76 var pubspec = new File(
70 dir == null ? 'pubspec.yaml' : path.join(dir, 'pubspec.yaml')); 77 dir == null ? 'pubspec.yaml' : path.join(dir, 'pubspec.yaml'));
71 if (!pubspec.existsSync()) { 78 if (!pubspec.existsSync()) {
72 print('error: pubspec.yaml file not found, please run this script from ' 79 print('error: pubspec.yaml file not found, please run this script from '
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 } 171 }
165 172
166 // In case of the current package, include also 'web'. 173 // In case of the current package, include also 'web'.
167 addAssets(options.currentPackage, 'web'); 174 addAssets(options.currentPackage, 'web');
168 if (options.transformTests) addAssets(options.currentPackage, 'test'); 175 if (options.transformTests) addAssets(options.currentPackage, 'test');
169 176
170 barback.updateSources(assets); 177 barback.updateSources(assets);
171 } 178 }
172 179
173 /** Attach error listeners on [barback] so we can report errors. */ 180 /** Attach error listeners on [barback] so we can report errors. */
174 void _attachListeners(Barback barback) { 181 void _attachListeners(Barback barback, BarbackOptions options) {
175 // Listen for errors and results 182 // Listen for errors and results
176 barback.errors.listen((e) { 183 barback.errors.listen((e) {
177 var trace = null; 184 var trace = null;
178 if (e is Error) trace = e.stackTrace; 185 if (e is Error) trace = e.stackTrace;
179 if (trace != null) { 186 if (trace != null) {
180 print(Trace.format(trace)); 187 print(Trace.format(trace));
181 } 188 }
182 print('error running barback: $e'); 189 print('error running barback: $e');
183 exit(1); 190 exit(1);
184 }); 191 });
185 192
186 barback.results.listen((result) { 193 barback.results.listen((result) {
187 if (!result.succeeded) { 194 if (!result.succeeded) {
188 print("build failed with errors: ${result.errors}"); 195 print("build failed with errors: ${result.errors}");
189 exit(1); 196 exit(1);
190 } 197 }
191 }); 198 });
199
200 barback.log.listen((entry) {
201 if (options.machineFormat) {
202 print(_jsonFormatter(entry));
203 } else {
204 print(_consoleFormatter(entry));
205 }
206 });
192 } 207 }
193 208
194 /** 209 /**
195 * Emits all outputs of [barback] and copies files that we didn't process (like 210 * Emits all outputs of [barback] and copies files that we didn't process (like
196 * polymer's libraries). 211 * polymer's libraries).
197 */ 212 */
198 Future _emitAllFiles(Barback barback, BarbackOptions options) { 213 Future _emitAllFiles(Barback barback, BarbackOptions options) {
199 return barback.getAllAssets().then((assets) { 214 return barback.getAllAssets().then((assets) {
200 // Delete existing output folder before we generate anything 215 // Delete existing output folder before we generate anything
201 var dir = new Directory(options.outDir); 216 var dir = new Directory(options.outDir);
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
304 Future _copyFile(String inpath, String outpath) { 319 Future _copyFile(String inpath, String outpath) {
305 _ensureDir(path.dirname(outpath)); 320 _ensureDir(path.dirname(outpath));
306 return new File(inpath).openRead().pipe(new File(outpath).openWrite()); 321 return new File(inpath).openRead().pipe(new File(outpath).openWrite());
307 } 322 }
308 323
309 /** Write contents of an [asset] into a file at [filepath]. */ 324 /** Write contents of an [asset] into a file at [filepath]. */
310 Future _writeAsset(String filepath, Asset asset) { 325 Future _writeAsset(String filepath, Asset asset) {
311 _ensureDir(path.dirname(filepath)); 326 _ensureDir(path.dirname(filepath));
312 return asset.read().pipe(new File(filepath).openWrite()); 327 return asset.read().pipe(new File(filepath).openWrite());
313 } 328 }
329
330 String _kindFromEntry(LogEntry entry) {
331 var level = entry.level;
332 return level == LogLevel.ERROR ? 'error'
333 : (level == LogLevel.WARNING ? 'warning' : 'info');
334 }
335
336 /**
337 * Formatter that generates messages using a format that can be parsed
338 * by tools, such as the Dart Editor, for reporting error messages.
339 */
340 String _jsonFormatter(LogEntry entry) {
341 var kind = _kindFromEntry(entry);
342 var span = entry.span;
343 return JSON.encode((span == null)
344 ? [{'method': kind, 'params': {'message': entry.message}}]
345 : [{'method': kind,
346 'params': {
347 'file': span.sourceUrl,
348 'message': entry.message,
349 'line': span.start.line + 1,
350 'charStart': span.start.offset,
351 'charEnd': span.end.offset,
352 }}]);
353 }
354
355 /**
356 * Formatter that generates messages that are easy to read on the console (used
357 * by default).
358 */
359 String _consoleFormatter(LogEntry entry) {
360 var kind = _kindFromEntry(entry);
361 var useColors = stdioType(stdout) == StdioType.TERMINAL;
362 var levelColor = (kind == 'error') ? _RED_COLOR : _MAGENTA_COLOR;
363 var output = new StringBuffer();
364 if (useColors) output.write(levelColor);
365 output..write(kind)..write(' ');
366 if (useColors) output.write(_NO_COLOR);
367 if (entry.span == null) {
368 output.write(entry.message);
369 } else {
370 output.write(entry.span.getLocationMessage(entry.message,
371 useColors: useColors,
372 color: levelColor));
373 }
374 return output.toString();
375 }
376
377 const String _RED_COLOR = '\u001b[31m';
378 const String _MAGENTA_COLOR = '\u001b[35m';
379 const String _NO_COLOR = '\u001b[0m';
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698