Index: lib/dartdoc/comment_map.dart |
diff --git a/lib/dartdoc/comment_map.dart b/lib/dartdoc/comment_map.dart |
index bf1589c266dfad3e56094b805bb495f4cbdd641f..5bd10d7e861f73d5621409d71aa04efade0ad695 100644 |
--- a/lib/dartdoc/comment_map.dart |
+++ b/lib/dartdoc/comment_map.dart |
@@ -24,11 +24,11 @@ class CommentMap { |
_libraryComments = <String>{}; |
/** Finds the doc comment preceding the given source span, if there is one. */ |
- String find(SourceSpan span) { |
+ String find(Location span) { |
if (span == null) return null; |
- _ensureFileParsed(span.file); |
- final comment = _comments[span.file.filename][span.start]; |
+ _ensureFileParsed(span.source()); |
+ final comment = _comments[span.source().uri().toString()][span.start()]; |
if (comment == null) return ''; |
return comment; |
} |
@@ -37,32 +37,31 @@ class CommentMap { |
* Finds the doc comment associated with the `#library` directive for the |
* given file. |
*/ |
- String findLibrary(SourceFile file) { |
- _ensureFileParsed(file); |
- final comment = _libraryComments[file.filename]; |
+ String findLibrary(Source source) { |
+ _ensureFileParsed(source); |
+ final comment = _libraryComments[source.uri().toString()]; |
if (comment == null) return ''; |
return comment; |
} |
- _ensureFileParsed(SourceFile file) { |
- _comments.putIfAbsent(file.filename, () => _parseComments(file)); |
+ _ensureFileParsed(Source source) { |
+ _comments.putIfAbsent(source.uri().toString(), () => |
+ _parseComments(source)); |
} |
- _parseComments(SourceFile file) { |
+ _parseComments(Source source) { |
final comments = new Map<int, String>(); |
- final tokenizer = new Tokenizer(file, false); |
+ final scanner = new dart2js.StringScanner(source.text(), true); |
var lastComment = null; |
- while (true) { |
- final token = tokenizer.next(); |
- if (token.kind == TokenKind.END_OF_FILE) break; |
- |
- if (token.kind == TokenKind.COMMENT) { |
- final text = token.text; |
+ var token = scanner.tokenize(); |
+ while (token.kind != dart2js.EOF_TOKEN) { |
+ if (token.kind == dart2js.COMMENT_TOKEN) { |
+ final text = token.slowToString(); |
if (text.startsWith('/**')) { |
// Remember that we've encountered a doc comment. |
- lastComment = stripComment(token.text); |
+ lastComment = stripComment(token.slowToString()); |
} else if (text.startsWith('///')) { |
var line = text.substring(3); |
// Allow a leading space. |
@@ -73,23 +72,20 @@ class CommentMap { |
lastComment = '$lastComment$line'; |
} |
} |
- } else if (token.kind == TokenKind.WHITESPACE) { |
- // Ignore whitespace tokens. |
- } else if (token.kind == TokenKind.HASH) { |
+ } else if (token.kind == dart2js.HASH_TOKEN) { |
// Look for #library() to find the library comment. |
- final next = tokenizer.next(); |
- if ((lastComment != null) && (next.kind == TokenKind.LIBRARY)) { |
- _libraryComments[file.filename] = lastComment; |
- lastComment = null; |
- } |
- } else { |
- if (lastComment != null) { |
- // We haven't attached the last doc comment to something yet, so stick |
- // it to this token. |
- comments[token.start] = lastComment; |
+ final next = token.next; |
+ if ((lastComment != null) && (next.stringValue == 'library')) { |
+ _libraryComments[source.uri().toString()] = lastComment; |
lastComment = null; |
} |
+ } else if (lastComment != null) { |
+ // We haven't attached the last doc comment to something yet, so stick |
+ // it to this token. |
+ comments[token.charOffset] = lastComment; |
+ lastComment = null; |
} |
+ token = token.next; |
} |
return comments; |