decaffeinate-parser
Version:
A better AST for CoffeeScript, inspired by CoffeeScriptRedux.
52 lines (51 loc) • 1.83 kB
JavaScript
;
/* eslint-disable @typescript-eslint/camelcase */
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
exports.__esModule = true;
/**
* Assumes first_line/first_column are correct.
*/
function fixInvalidLocationData(locationData, linesAndColumns) {
var last_line = locationData.last_line, last_column = locationData.last_column;
var indexForLocation = linesAndColumns.indexForLocation({
line: last_line,
column: last_column
});
if (indexForLocation !== null) {
return locationData;
}
else {
var offset = 1;
for (;;) {
var index = linesAndColumns.indexForLocation({
line: last_line,
column: last_column - offset
});
offset++;
if (index !== null) {
var location = linesAndColumns.locationForIndex(index + offset);
if (!location) {
throw new Error("Unable to determine adjustment offset for incorrect location data: " +
(JSON.stringify(locationData) + ". No valid location found for index: ") +
("" + (index + offset)));
}
last_line = location.line;
last_column = location.column;
break;
}
}
return __assign(__assign({}, locationData), { last_line: last_line,
last_column: last_column });
}
}
exports["default"] = fixInvalidLocationData;