function findTokenIndex()

in packages/flow-remove-types/index.js [554:578]


function findTokenIndex(tokens, offset, matchBiasParam) {
  // Token ranges often overlap at the edges e.g {start: 0, end: 100}, {start: 100, end: 300}. The
  // `matchBiasParam` param allows a user to specify what to do in this case, defaulting to matching
  // against the start of a token range.
  var matchBias = matchBiasParam === 'end' ? 'end' : 'start';
  var min = 0;
  var max = tokens.length - 1;
  var ptr;

  while (min <= max) {
    ptr = ((min + max) / 2) | 0;
    var token = tokens[ptr];
    var end = endOf(token);
    var start = startOf(token);
    if (end < offset || (matchBias === 'start' && end === offset)) {
      min = ptr + 1;
    } else if (start > offset || (matchBias === 'end' && start === offset)) {
      max = ptr - 1;
    } else {
      return ptr;
    }
  }

  return ptr;
}