| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 | "use strict";// comment fixesmodule.exports = function(ast, comments, tokens) {  if (comments.length) {    var firstComment = comments[0];    var lastComment = comments[comments.length - 1];    // fixup program start    if (!tokens.length) {      // if no tokens, the program starts at the end of the last comment      ast.start = lastComment.end;      ast.loc.start.line = lastComment.loc.end.line;      ast.loc.start.column = lastComment.loc.end.column;      if (ast.leadingComments === null && ast.innerComments.length) {        ast.leadingComments = ast.innerComments;      }    } else if (firstComment.start < tokens[0].start) {      // if there are comments before the first token, the program starts at the first token      var token = tokens[0];      // ast.start = token.start;      // ast.loc.start.line = token.loc.start.line;      // ast.loc.start.column = token.loc.start.column;      // estraverse do not put leading comments on first node when the comment      // appear before the first token      if (ast.body.length) {        var node = ast.body[0];        node.leadingComments = [];        var firstTokenStart = token.start;        var len = comments.length;        for (var i = 0; i < len && comments[i].start < firstTokenStart; i++) {          node.leadingComments.push(comments[i]);        }      }    }    // fixup program end    if (tokens.length) {      var lastToken = tokens[tokens.length - 1];      if (lastComment.end > lastToken.end) {        // If there is a comment after the last token, the program ends at the        // last token and not the comment        // ast.end = lastToken.end;        ast.range[1] = lastToken.end;        ast.loc.end.line = lastToken.loc.end.line;        ast.loc.end.column = lastToken.loc.end.column;      }    }  } else {    if (!tokens.length) {      ast.loc.start.line = 1;      ast.loc.end.line = 1;    }  }  if (ast.body && ast.body.length > 0) {    ast.loc.start.line = ast.body[0].loc.start.line;    ast.range[0] = ast.body[0].start;  }};
 |