decaffeinate-parser
Version:
A better AST for CoffeeScript, inspired by CoffeeScriptRedux.
31 lines (30 loc) • 1.38 kB
JavaScript
;
exports.__esModule = true;
var SourceType_1 = require("coffee-lex/dist/SourceType");
var getLocation_1 = require("./getLocation");
var locationDataFromSourceRange_1 = require("./locationDataFromSourceRange");
var sourceRangeFromLocationData_1 = require("./sourceRangeFromLocationData");
function expandToIncludeParens(context, locationData) {
var sourceRange = sourceRangeFromLocationData_1["default"](context, locationData);
// eslint-disable-next-line no-constant-condition
while (true) {
var tokens = getSurroundingParens(context, sourceRange);
if (tokens === null) {
break;
}
sourceRange = { start: tokens.openParen.start, end: tokens.closeParen.end };
}
return locationDataFromSourceRange_1["default"](context, sourceRange);
}
exports["default"] = expandToIncludeParens;
function getSurroundingParens(context, sourceRange) {
var tokenBefore = getLocation_1.firstSemanticTokenBefore(context, sourceRange.start);
var tokenAfter = getLocation_1.firstSemanticTokenAfter(context, sourceRange.end);
if (tokenBefore === null || tokenBefore.type !== SourceType_1["default"].LPAREN) {
return null;
}
if (tokenAfter === null || tokenAfter.type !== SourceType_1["default"].RPAREN) {
return null;
}
return { openParen: tokenBefore, closeParen: tokenAfter };
}