chore(doc-gen): fix AttachCommentTreeVisitor

In the case that there were more than one comment blocks preceding a block of
code, the visitor was only attaching the first comment. Really what we
should do is to attach the last comment before the code block.
This commit is contained in:
Peter Bacon Darwin 2015-03-18 17:54:15 +00:00
parent 014a28fef0
commit 6cdbe4a264
1 changed files with 10 additions and 5 deletions

View File

@ -16,7 +16,8 @@ module.exports = function AttachCommentTreeVisitor(ParseTreeVisitor, log) {
if (this.currentComment) log.silly('comment: ' + if (this.currentComment) log.silly('comment: ' +
this.currentComment.range.start.line + ' - ' + this.currentComment.range.start.line + ' - ' +
this.currentComment.range.end.line); this.currentComment.range.end.line + ' : ' +
this.currentComment.range.toString());
ParseTreeVisitor.prototype.visit.call(this, tree); ParseTreeVisitor.prototype.visit.call(this, tree);
}, },
@ -24,14 +25,18 @@ module.exports = function AttachCommentTreeVisitor(ParseTreeVisitor, log) {
// Really we ought to subclass ParseTreeVisitor but this is fiddly in ES5 so // Really we ought to subclass ParseTreeVisitor but this is fiddly in ES5 so
// it is easier to simply override the prototype's method on the instance // it is easier to simply override the prototype's method on the instance
visitAny: function(tree) { visitAny: function(tree) {
if (tree && tree.location && tree.location.start && this.currentComment) { if (tree && tree.location && tree.location.start && this.currentComment &&
if (this.currentComment.range.end.offset < tree.location.start.offset) { this.currentComment.range.end.offset < tree.location.start.offset) {
log.silly('tree: ' + tree.constructor.name + ' - ' + tree.location.start.line); log.silly('tree: ' + tree.constructor.name + ' - ' + tree.location.start.line);
while (this.currentComment &&
this.currentComment.range.end.offset < tree.location.start.offset) {
log.silly('comment: ' + this.currentComment.range.start.line + ' - ' +
this.currentComment.range.end.line + ' : ' +
this.currentComment.range.toString());
tree.commentBefore = this.currentComment; tree.commentBefore = this.currentComment;
this.currentComment.treeAfter = tree; this.currentComment.treeAfter = tree;
this.index++; this.index++;
this.currentComment = this.comments[this.index]; this.currentComment = this.comments[this.index];
if (this.currentComment) log.silly('comment: ' + this.currentComment.range.start.line + ' - ' + this.currentComment.range.end.line);
} }
} }
return ParseTreeVisitor.prototype.visitAny.call(this, tree); return ParseTreeVisitor.prototype.visitAny.call(this, tree);