UNPKG

decaffeinate-parser

Version:

A better AST for CoffeeScript, inspired by CoffeeScriptRedux.

28 lines (27 loc) 1.25 kB
import SourceType from 'coffee-lex/dist/SourceType'; import { firstSemanticTokenAfter, firstSemanticTokenBefore } from './getLocation'; import locationDataFromSourceRange from './locationDataFromSourceRange'; import sourceRangeFromLocationData from './sourceRangeFromLocationData'; export default function expandToIncludeParens(context, locationData) { var sourceRange = sourceRangeFromLocationData(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(context, sourceRange); } function getSurroundingParens(context, sourceRange) { var tokenBefore = firstSemanticTokenBefore(context, sourceRange.start); var tokenAfter = firstSemanticTokenAfter(context, sourceRange.end); if (tokenBefore === null || tokenBefore.type !== SourceType.LPAREN) { return null; } if (tokenAfter === null || tokenAfter.type !== SourceType.RPAREN) { return null; } return { openParen: tokenBefore, closeParen: tokenAfter }; }