Index: pkg/polymer/lib/src/build/common.dart |
diff --git a/pkg/polymer/lib/src/build/common.dart b/pkg/polymer/lib/src/build/common.dart |
index bcde554030e4896273a70c5e164dc13049c62395..b1a7851b7141f07764ae3a52a7df1e167e51da8e 100644 |
--- a/pkg/polymer/lib/src/build/common.dart |
+++ b/pkg/polymer/lib/src/build/common.dart |
@@ -8,6 +8,10 @@ library polymer.src.build.common; |
import 'dart:async'; |
import 'dart:math' show min, max; |
+import 'package:analyzer/src/generated/ast.dart'; |
+import 'package:analyzer/src/generated/error.dart'; |
+import 'package:analyzer/src/generated/parser.dart'; |
+import 'package:analyzer/src/generated/scanner.dart'; |
import 'package:barback/barback.dart'; |
import 'package:html5lib/dom.dart' show Document; |
import 'package:html5lib/parser.dart' show HtmlParser; |
@@ -101,28 +105,28 @@ abstract class PolymerTransformer { |
}); |
} |
- /// Gets the appropriate URL to use in a [Span] to produce messages |
- /// (e.g. warnings) for users. This will attempt to format the URL in the most |
- /// useful way: |
- /// |
- /// - If the asset is within the primary package, then use the [id.path], |
- /// the user will know it is a file from their own code. |
- /// - If the asset is from another package, then use [assetUrlFor], this will |
- /// likely be a "package:" url to the file in the other package, which is |
- /// enough for users to identify where the error is. |
- String spanUrlFor(AssetId id, Transform transform) { |
- var primaryId = transform.primaryInput.id; |
- bool samePackage = id.package == primaryId.package; |
- return samePackage ? id.path |
- : assetUrlFor(id, primaryId, transform.logger, allowAssetUrl: true); |
- } |
- |
Future<bool> assetExists(AssetId id, Transform transform) => |
transform.getInput(id).then((_) => true).catchError((_) => false); |
String toString() => 'polymer ($runtimeType)'; |
} |
+/// Gets the appropriate URL to use in a [Span] to produce messages |
+/// (e.g. warnings) for users. This will attempt to format the URL in the most |
+/// useful way: |
+/// |
+/// - If the asset is within the primary package, then use the [id.path], |
+/// the user will know it is a file from their own code. |
+/// - If the asset is from another package, then use [assetUrlFor], this will |
+/// likely be a "package:" url to the file in the other package, which is |
+/// enough for users to identify where the error is. |
+String spanUrlFor(AssetId id, Transform transform) { |
+ var primaryId = transform.primaryInput.id; |
+ bool samePackage = id.package == primaryId.package; |
+ return samePackage ? id.path |
+ : assetUrlFor(id, primaryId, transform.logger, allowAssetUrl: true); |
+} |
+ |
/// Transformer phases which should be applied to the Polymer package. |
List<List<Transformer>> get phasesForPolymer => |
[[new ObservableTransformer(['lib/src/instance.dart'])]]; |
@@ -250,3 +254,19 @@ String _systemToAssetPath(String assetPath) { |
if (path.Style.platform != path.Style.windows) return assetPath; |
return path.posix.joinAll(path.split(assetPath)); |
} |
+ |
+ |
+/// Parse [code] using analyzer. |
+CompilationUnit parseCompilationUnit(String code) { |
+ var errorListener = new _ErrorCollector(); |
+ var reader = new CharSequenceReader(code); |
+ var scanner = new Scanner(null, reader, errorListener); |
+ var token = scanner.tokenize(); |
+ var parser = new Parser(null, errorListener); |
+ return parser.parseCompilationUnit(token); |
+} |
+ |
+class _ErrorCollector extends AnalysisErrorListener { |
+ final errors = <AnalysisError>[]; |
+ onError(error) => errors.add(error); |
+} |