Index: pkg/polymer/lib/src/build/linter.dart |
diff --git a/pkg/polymer/lib/src/build/linter.dart b/pkg/polymer/lib/src/build/linter.dart |
index 714e50e743b706d0cf339ba6f1d2bb312f454ada..bfc395a1b3b3ba083d2b7d92a8881e3af8c4e0d2 100644 |
--- a/pkg/polymer/lib/src/build/linter.dart |
+++ b/pkg/polymer/lib/src/build/linter.dart |
@@ -7,6 +7,7 @@ |
library polymer.src.build.linter; |
import 'dart:async'; |
+import 'dart:convert'; |
import 'package:barback/barback.dart'; |
import 'package:code_transformers/assets.dart'; |
@@ -16,6 +17,7 @@ import 'package:source_span/source_span.dart'; |
import 'common.dart'; |
import 'utils.dart'; |
+import 'wrapped_logger.dart'; |
/// A linter that checks for common Polymer errors and produces warnings to |
/// show on the editor or the command line. Leaves sources unchanged, but |
@@ -34,11 +36,20 @@ class Linter extends Transformer with PolymerTransformer { |
var id = primary.id; |
transform.addOutput(primary); // this phase is analysis only |
seen.add(id); |
+ bool isEntryPoint = options.isHtmlEntryPoint(id); |
+ |
+ var logger = options.releaseMode ? transform.logger : |
+ new WrappedLogger(transform, convertErrorsToWarnings: true); |
+ |
return readPrimaryAsHtml(transform).then((document) { |
- return _collectElements(document, id, transform, seen).then((elements) { |
- bool isEntrypoint = options.isHtmlEntryPoint(id); |
- new _LinterVisitor(id, transform.logger, elements, isEntrypoint) |
- .run(document); |
+ return _collectElements(document, id, transform, logger, seen) |
+ .then((elements) { |
+ new _LinterVisitor(id, logger, elements, isEntryPoint).run(document); |
+ |
+ // Write out the logs collected by our [WrappedLogger]. |
+ if (options.injectBuildLogsInOutput && logger is WrappedLogger) { |
+ return logger.writeOutput(); |
+ } |
}); |
}); |
} |
@@ -49,12 +60,14 @@ class Linter extends Transformer with PolymerTransformer { |
/// first. |
Future<Map<String, _ElementSummary>> _collectElements( |
Document document, AssetId sourceId, Transform transform, |
- Set<AssetId> seen, [Map<String, _ElementSummary> elements]) { |
+ TransformLogger logger, Set<AssetId> seen, |
+ [Map<String, _ElementSummary> elements]) { |
if (elements == null) elements = <String, _ElementSummary>{}; |
- return _getImportedIds(document, sourceId, transform) |
+ return _getImportedIds(document, sourceId, transform, logger) |
// Note: the import order is relevant, so we visit in that order. |
.then((ids) => Future.forEach(ids, |
- (id) => _readAndCollectElements(id, transform, seen, elements))) |
+ (id) => _readAndCollectElements( |
+ id, transform, logger, seen, elements))) |
.then((_) { |
if (sourceId.package == 'polymer' && |
sourceId.path == 'lib/src/js/polymer/polymer.html' && |
@@ -62,23 +75,24 @@ class Linter extends Transformer with PolymerTransformer { |
elements['polymer-element'] = |
new _ElementSummary('polymer-element', null, null); |
} |
- return _addElements(document, transform.logger, elements); |
+ return _addElements(document, logger, elements); |
}) |
.then((_) => elements); |
} |
Future _readAndCollectElements(AssetId id, Transform transform, |
- Set<AssetId> seen, Map<String, _ElementSummary> elements) { |
+ TransformLogger logger, Set<AssetId> seen, |
+ Map<String, _ElementSummary> elements) { |
if (id == null || seen.contains(id)) return new Future.value(null); |
seen.add(id); |
return readAsHtml(id, transform, showWarnings: false).then( |
- (doc) => _collectElements(doc, id, transform, seen, elements)); |
+ (doc) => _collectElements(doc, id, transform, logger, seen, elements)); |
} |
Future<List<AssetId>> _getImportedIds( |
- Document document, AssetId sourceId, Transform transform) { |
+ Document document, AssetId sourceId, Transform transform, |
+ TransformLogger logger) { |
var importIds = []; |
- var logger = transform.logger; |
for (var tag in document.querySelectorAll('link')) { |
if (tag.attributes['rel'] != 'import') continue; |
var href = tag.attributes['href']; |
@@ -153,11 +167,11 @@ class _LinterVisitor extends TreeVisitor { |
bool _dartTagSeen = false; |
bool _polymerHtmlSeen = false; |
bool _polymerExperimentalHtmlSeen = false; |
- bool _isEntrypoint; |
+ bool _isEntryPoint; |
Map<String, _ElementSummary> _elements; |
_LinterVisitor( |
- this._sourceId, this._logger, this._elements, this._isEntrypoint) { |
+ this._sourceId, this._logger, this._elements, this._isEntryPoint) { |
// We normalize the map, so each element has a direct reference to any |
// element it extends from. |
for (var tag in _elements.values) { |
@@ -183,7 +197,7 @@ class _LinterVisitor extends TreeVisitor { |
void run(Document doc) { |
visit(doc); |
- if (_isEntrypoint && !_dartTagSeen && !_polymerExperimentalHtmlSeen) { |
+ if (_isEntryPoint && !_dartTagSeen && !_polymerExperimentalHtmlSeen) { |
_logger.warning(USE_INIT_DART, span: doc.body.sourceSpan); |
} |
} |
@@ -281,7 +295,7 @@ class _LinterVisitor extends TreeVisitor { |
if (isDart) { |
if (_dartTagSeen) _logger.warning(ONLY_ONE_TAG, span: node.sourceSpan); |
- if (_isEntrypoint && _polymerExperimentalHtmlSeen) { |
+ if (_isEntryPoint && _polymerExperimentalHtmlSeen) { |
_logger.warning(NO_DART_SCRIPT_AND_EXPERIMENTAL, span: node.sourceSpan); |
} |
_dartTagSeen = true; |
@@ -456,4 +470,4 @@ const String NO_DART_SCRIPT_AND_EXPERIMENTAL = |
'the main document (for now).'; |
const List<String> INTERNALLY_DEFINED_ELEMENTS = |
- const ['auto-binding-dart', 'polymer-element']; |
+ const ['auto-binding-dart', 'polymer-element']; |