From b90cdb2221521b7cbfa5fabb833139336d3cbbd3 Mon Sep 17 00:00:00 2001 From: Andy Date: Fri, 2 Mar 2018 10:22:52 -0800 Subject: [PATCH] Reduce duplicate code for TextChange overlaps (#22278) --- src/compiler/utilities.ts | 26 ++++++++------------------ 1 file changed, 8 insertions(+), 18 deletions(-) diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 040001c4fdd..8108d0f1692 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -3759,27 +3759,20 @@ namespace ts { } export function textSpanOverlapsWith(span: TextSpan, other: TextSpan) { - const overlapStart = Math.max(span.start, other.start); - const overlapEnd = Math.min(textSpanEnd(span), textSpanEnd(other)); - return overlapStart < overlapEnd; + return textSpanOverlap(span, other) !== undefined; } export function textSpanOverlap(span1: TextSpan, span2: TextSpan) { - const overlapStart = Math.max(span1.start, span2.start); - const overlapEnd = Math.min(textSpanEnd(span1), textSpanEnd(span2)); - if (overlapStart < overlapEnd) { - return createTextSpanFromBounds(overlapStart, overlapEnd); - } - return undefined; + const overlap = textSpanIntersection(span1, span2); + return overlap && overlap.length === 0 ? undefined : overlap; } export function textSpanIntersectsWithTextSpan(span: TextSpan, other: TextSpan) { - return other.start <= textSpanEnd(span) && textSpanEnd(other) >= span.start; + return decodedTextSpanIntersectsWith(span.start, span.length, other.start, other.length); } export function textSpanIntersectsWith(span: TextSpan, start: number, length: number) { - const end = start + length; - return start <= textSpanEnd(span) && end >= span.start; + return decodedTextSpanIntersectsWith(span.start, span.length, start, length); } export function decodedTextSpanIntersectsWith(start1: number, length1: number, start2: number, length2: number) { @@ -3793,12 +3786,9 @@ namespace ts { } export function textSpanIntersection(span1: TextSpan, span2: TextSpan) { - const intersectStart = Math.max(span1.start, span2.start); - const intersectEnd = Math.min(textSpanEnd(span1), textSpanEnd(span2)); - if (intersectStart <= intersectEnd) { - return createTextSpanFromBounds(intersectStart, intersectEnd); - } - return undefined; + const start = Math.max(span1.start, span2.start); + const end = Math.min(textSpanEnd(span1), textSpanEnd(span2)); + return start <= end ? createTextSpanFromBounds(start, end) : undefined; } export function createTextSpan(start: number, length: number): TextSpan {