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

Unified Diff: lib/src/utils.dart

Issue 973433003: Initial cut for a development server (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Created 5 years, 10 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
Index: lib/src/utils.dart
diff --git a/lib/src/utils.dart b/lib/src/utils.dart
index 09bc4300a810728e1606bcdf6d4e5c65349b3409..f813772aff76ec69002b1d04f65fa08ef7f6c8fe 100644
--- a/lib/src/utils.dart
+++ b/lib/src/utils.dart
@@ -14,12 +14,15 @@ import 'package:analyzer/src/generated/ast.dart'
ExportDirective,
PartDirective,
CompilationUnit,
- Identifier;
+ Identifier,
+ AnnotatedNode,
+ AstNode;
import 'package:analyzer/src/generated/engine.dart'
show ParseDartTask, AnalysisContext;
import 'package:analyzer/src/generated/source.dart' show Source;
import 'package:analyzer/src/generated/element.dart';
import 'package:analyzer/analyzer.dart' show parseDirectives;
+import 'package:source_span/source_span.dart';
bool isDartPrivateLibrary(LibraryElement library) {
var uri = library.source.uri;
@@ -232,3 +235,33 @@ class OutWriter {
new File(_path).writeAsStringSync('$_sb');
}
}
+
+SourceLocation locationFor(CompilationUnit unit, Uri uri, int offset) {
Jennifer Messerly 2015/03/03 02:24:22 not sure the "For" adds much. "getSourceLocation"?
Siggi Cherem (dart-lang) 2015/03/04 04:44:24 What do you think about locationForOffset?
Jennifer Messerly 2015/03/04 15:35:10 yeah that works too. Just curious, is it intention
Siggi Cherem (dart-lang) 2015/03/04 17:38:16 funny - technically no, but every time I start nam
+ var lineInfo = unit.lineInfo.getLocation(offset);
+ return new SourceLocation(offset,
+ sourceUrl: uri,
+ line: lineInfo.lineNumber - 1,
+ column: lineInfo.columnNumber - 1);
+}
+
+SourceSpan spanFor(CompilationUnit unit, Uri uri, AstNode node) {
+ var currentToken = node is AnnotatedNode
+ ? node.firstTokenAfterCommentAndMetadata
+ : node.beginToken;
+ var begin = currentToken.offset;
+ var endToken = node.endToken;
+ var text = new StringBuffer();
Jennifer Messerly 2015/03/03 02:24:22 I presume there is a method to this madness :-) g
Siggi Cherem (dart-lang) 2015/03/04 04:44:24 yeah, this was more twisted than it needed to be :
+ append(tok) {
+ var offset = tok.offset;
+ var diff = offset - begin - text.length;
+ text.write(' ' * diff);
+ text.write(tok.lexeme);
+ }
+ while (currentToken != endToken) {
+ append(currentToken);
+ currentToken = currentToken.next;
+ }
+ append(currentToken);
+ return new SourceSpan(
+ locationFor(unit, uri, begin), locationFor(unit, uri, node.end), '$text');
+}

Powered by Google App Engine
This is Rietveld 408576698