42 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
module.exports = function AttachCommentTreeVisitor(ParseTreeVisitor, log) {
 | 
						|
 | 
						|
  function AttachCommentTreeVisitorImpl() {
 | 
						|
    ParseTreeVisitor.call(this);
 | 
						|
  }
 | 
						|
 | 
						|
  AttachCommentTreeVisitorImpl.prototype = {
 | 
						|
 | 
						|
    __proto__: ParseTreeVisitor.prototype,
 | 
						|
 | 
						|
 | 
						|
    visit: function(tree, comments) {
 | 
						|
      this.comments = comments;
 | 
						|
      this.index = 0;
 | 
						|
      this.currentComment = this.comments[this.index];
 | 
						|
 | 
						|
      if (this.currentComment) log.silly('comment: ' +
 | 
						|
          this.currentComment.range.start.line + ' - ' +
 | 
						|
          this.currentComment.range.end.line);
 | 
						|
 | 
						|
      ParseTreeVisitor.prototype.visit.call(this, tree);
 | 
						|
    },
 | 
						|
 | 
						|
    // 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
 | 
						|
    visitAny: function(tree) {
 | 
						|
      if (tree && tree.location && tree.location.start && this.currentComment) {
 | 
						|
        if (this.currentComment.range.end.offset < tree.location.start.offset) {
 | 
						|
          log.silly('tree: ' + tree.constructor.name + ' - ' + tree.location.start.line);
 | 
						|
          tree.commentBefore = this.currentComment;
 | 
						|
          this.currentComment.treeAfter = tree;
 | 
						|
          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 AttachCommentTreeVisitorImpl;
 | 
						|
}; |