41 lines
1.2 KiB
JavaScript
41 lines
1.2 KiB
JavaScript
"use strict";
|
|
|
|
module.exports = function(ast) {
|
|
ast.type = "Program";
|
|
ast.sourceType = ast.program.sourceType;
|
|
ast.directives = ast.program.directives;
|
|
ast.body = ast.program.body;
|
|
delete ast.program;
|
|
|
|
if (ast.comments.length) {
|
|
const lastComment = ast.comments[ast.comments.length - 1];
|
|
|
|
if (!ast.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;
|
|
} else {
|
|
const lastToken = ast.tokens[ast.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.range[1] = lastToken.end;
|
|
ast.loc.end.line = lastToken.loc.end.line;
|
|
ast.loc.end.column = lastToken.loc.end.column;
|
|
}
|
|
}
|
|
} else {
|
|
if (!ast.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;
|
|
}
|
|
};
|