const sliceHunk = ({changes}, startOldLineNumber, endOldLineNumber) => { const changeIndex = changes.findIndex(change => computeOldLineNumber(change) >= startOldLineNumber); if (changeIndex === -1) { return null; } // It is possible to have some insert changes before `startOldLineNumber`, // since we slice from old line number, these changes can be ommited, so we need to grab them back const startIndex = (() => { if (changeIndex === 0) { return changeIndex; } const nearestHeadingNocmalChangeIndex = findLastIndex(changes, change => !change.isInsert, changeIndex - 1); return nearestHeadingNocmalChangeIndex === -1 ? changeIndex : nearestHeadingNocmalChangeIndex + 1; })(); if (endOldLineNumber === undefined) { const slicedChanges = changes.slice(startIndex); return createHunkFromChanges(slicedChanges); } const endIndex = findLastIndex(changes, change => computeOldLineNumber(change) <= endOldLineNumber); const slicedChanges = changes.slice(startIndex, endIndex === -1 ? undefined : endIndex); return createHunkFromChanges(slicedChanges); }