Make GrDiffGroupRange use LineRange

This is to avoid having two very similar but inconsistent range types in
the API.

Change-Id: I14497e6e2cc0d1c519346bf024894dcf9be6eeed
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-builder/gr-diff-builder.ts b/polygerrit-ui/app/elements/diff/gr-diff-builder/gr-diff-builder.ts
index d7ddc3f..3afa1e3 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-builder/gr-diff-builder.ts
+++ b/polygerrit-ui/app/elements/diff/gr-diff-builder/gr-diff-builder.ts
@@ -182,8 +182,8 @@
       let groupEndLine = 0;
       if (side) {
         const range = rangeBySide(group.lineRange, side);
-        groupStartLine = range.start || 0;
-        groupEndLine = range.end || 0;
+        groupStartLine = range.start_line;
+        groupEndLine = range.end_line;
       }
 
       if (groupStartLine === 0) {
@@ -312,8 +312,9 @@
     contextGroups: GrDiffGroup[],
     viewMode: DiffViewMode
   ) {
-    const leftStart = contextGroups[0].lineRange.left.start!;
-    const leftEnd = contextGroups[contextGroups.length - 1].lineRange.left.end!;
+    const leftStart = contextGroups[0].lineRange.left.start_line;
+    const leftEnd =
+      contextGroups[contextGroups.length - 1].lineRange.left.end_line;
     const numLines = leftEnd - leftStart + 1;
 
     if (numLines === 0) console.error('context group without lines');
@@ -493,8 +494,14 @@
         const firstRange = groups[0].lineRange;
         const lastRange = groups[groups.length - 1].lineRange;
         const lineRange = {
-          left: {start: firstRange.left.start, end: lastRange.left.end},
-          right: {start: firstRange.right.start, end: lastRange.right.end},
+          left: {
+            start_line: firstRange.left.start_line,
+            end_line: lastRange.left.end_line,
+          },
+          right: {
+            start_line: firstRange.right.start_line,
+            end_line: lastRange.right.end_line,
+          },
         };
         button.dispatchEvent(
           new CustomEvent<ContentLoadNeededEventDetail>('content-load-needed', {
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-processor/gr-diff-processor.ts b/polygerrit-ui/app/elements/diff/gr-diff-processor/gr-diff-processor.ts
index 5a432dd..a0584b6 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-processor/gr-diff-processor.ts
+++ b/polygerrit-ui/app/elements/diff/gr-diff-processor/gr-diff-processor.ts
@@ -371,8 +371,11 @@
     group.ignoredWhitespaceOnly = !!chunk.common;
     if (chunk.skip) {
       group.lineRange = {
-        left: {start: offsetLeft, end: offsetLeft + chunk.skip - 1},
-        right: {start: offsetRight, end: offsetRight + chunk.skip - 1},
+        left: {start_line: offsetLeft, end_line: offsetLeft + chunk.skip - 1},
+        right: {
+          start_line: offsetRight,
+          end_line: offsetRight + chunk.skip - 1,
+        },
       };
     }
     return group;
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-processor/gr-diff-processor_test.js b/polygerrit-ui/app/elements/diff/gr-diff-processor/gr-diff-processor_test.js
index 0c3c9bf..f5cbcc0 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-processor/gr-diff-processor_test.js
+++ b/polygerrit-ui/app/elements/diff/gr-diff-processor/gr-diff-processor_test.js
@@ -202,8 +202,8 @@
         const skipGroup = commonGroup.contextGroups[1];
         assert.equal(skipGroup.skip, 43900);
         const expectedRange = {
-          left: {start: 21, end: 43920},
-          right: {start: 21, end: 43920},
+          left: {start_line: 21, end_line: 43920},
+          right: {start_line: 21, end_line: 43920},
         };
         assert.deepEqual(skipGroup.lineRange, expectedRange);
 
@@ -499,8 +499,8 @@
       const skipGroup = commonGroup.contextGroups[1];
       assert.equal(skipGroup.skip, 60);
       const expectedRange = {
-        left: {start: 22, end: 81},
-        right: {start: 21, end: 80},
+        left: {start_line: 22, end_line: 81},
+        right: {start_line: 21, end_line: 80},
       };
       assert.deepEqual(skipGroup.lineRange, expectedRange);
 
@@ -834,20 +834,26 @@
         assert.deepEqual(
             skippedGroup.lineRange,
             {
-              left: {start: lineNums.left + 1, end: lineNums.left + skip},
-              right: {start: lineNums.right + 1, end: lineNums.right + skip},
+              left: {
+                start_line: lineNums.left + 1,
+                end_line: lineNums.left + skip,
+              },
+              right: {
+                start_line: lineNums.right + 1,
+                end_line: lineNums.right + skip,
+              },
             });
 
         assert.deepEqual(
             abGroup.lineRange,
             {
               left: {
-                start: lineNums.left + skip + 1,
-                end: lineNums.left + skip + rows.length,
+                start_line: lineNums.left + skip + 1,
+                end_line: lineNums.left + skip + rows.length,
               },
               right: {
-                start: lineNums.right + skip + 1,
-                end: lineNums.right + skip + rows.length,
+                start_line: lineNums.right + skip + 1,
+                end_line: lineNums.right + skip + rows.length,
               },
             });
       });
diff --git a/polygerrit-ui/app/elements/diff/gr-diff/gr-diff-group.ts b/polygerrit-ui/app/elements/diff/gr-diff/gr-diff-group.ts
index 11d3ce3..4100b7a 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff/gr-diff-group.ts
+++ b/polygerrit-ui/app/elements/diff/gr-diff/gr-diff-group.ts
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 import {BLANK_LINE, GrDiffLine, GrDiffLineType} from './gr-diff-line';
+import {LineRange} from '../../../api/diff';
 import {Side} from '../../../constants/constants';
 
 export enum GrDiffGroupType {
@@ -33,17 +34,12 @@
   right: GrDiffLine;
 }
 
-interface Range {
-  start: number | null;
-  end: number | null;
-}
-
 export interface GrDiffGroupRange {
-  left: Range;
-  right: Range;
+  left: LineRange;
+  right: LineRange;
 }
 
-export function rangeBySide(range: GrDiffGroupRange, side: Side): Range {
+export function rangeBySide(range: GrDiffGroupRange, side: Side): LineRange {
   return side === Side.LEFT ? range.left : range.right;
 }
 
@@ -92,8 +88,8 @@
     if (hiddenEnd) {
       let beforeLength = 0;
       if (before.length > 0) {
-        const beforeStart = before[0].lineRange.left.start || 0;
-        const beforeEnd = before[before.length - 1].lineRange.left.end || 0;
+        const beforeStart = before[0].lineRange.left.start_line;
+        const beforeEnd = before[before.length - 1].lineRange.left.end_line;
         beforeLength = beforeEnd - beforeStart + 1;
       }
       [hidden, after] = _splitCommonGroups(hidden, hiddenEnd - beforeLength);
@@ -137,8 +133,8 @@
     // group will in the future mean load more data - and therefore we want to
     // fire an event when user wants to do it.
     const closerToStartThanEnd =
-      leftSplit - (group.lineRange.left.start || 0) <
-      (group.lineRange.right.end || 0) - leftSplit;
+      leftSplit - group.lineRange.left.start_line <
+      group.lineRange.right.end_line - leftSplit;
     if (closerToStartThanEnd) {
       afterSplit = group;
     } else {
@@ -191,18 +187,18 @@
   split: number
 ): GrDiffGroup[][] {
   if (groups.length === 0) return [[], []];
-  const leftSplit = (groups[0].lineRange.left.start || 0) + split;
-  const rightSplit = (groups[0].lineRange.right.start || 0) + split;
+  const leftSplit = groups[0].lineRange.left.start_line + split;
+  const rightSplit = groups[0].lineRange.right.start_line + split;
 
   const beforeGroups = [];
   const afterGroups = [];
   for (const group of groups) {
     const isCompletelyBefore =
-      (group.lineRange.left.end || 0) < leftSplit ||
-      (group.lineRange.right.end || 0) < rightSplit;
+      group.lineRange.left.end_line < leftSplit ||
+      group.lineRange.right.end_line < rightSplit;
     const isCompletelyAfter =
-      leftSplit <= (group.lineRange.left.start || 0) ||
-      rightSplit <= (group.lineRange.right.start || 0);
+      leftSplit <= group.lineRange.left.start_line ||
+      rightSplit <= group.lineRange.right.start_line;
     if (isCompletelyBefore) {
       beforeGroups.push(group);
     } else if (isCompletelyAfter) {
@@ -264,8 +260,8 @@
 
   /** Both start and end line are inclusive. */
   lineRange: GrDiffGroupRange = {
-    left: {start: null, end: null},
-    right: {start: null, end: null},
+    left: {start_line: 0, end_line: 0},
+    right: {start_line: 0, end_line: 0},
   };
 
   moveDetails?: {
@@ -344,16 +340,13 @@
 
     if (line.type === GrDiffLineType.ADD || line.type === GrDiffLineType.BOTH) {
       if (
-        this.lineRange.right.start === null ||
-        line.afterNumber < this.lineRange.right.start
+        this.lineRange.right.start_line === 0 ||
+        line.afterNumber < this.lineRange.right.start_line
       ) {
-        this.lineRange.right.start = line.afterNumber;
+        this.lineRange.right.start_line = line.afterNumber;
       }
-      if (
-        this.lineRange.right.end === null ||
-        line.afterNumber > this.lineRange.right.end
-      ) {
-        this.lineRange.right.end = line.afterNumber;
+      if (line.afterNumber > this.lineRange.right.end_line) {
+        this.lineRange.right.end_line = line.afterNumber;
       }
     }
 
@@ -362,16 +355,13 @@
       line.type === GrDiffLineType.BOTH
     ) {
       if (
-        this.lineRange.left.start === null ||
-        line.beforeNumber < this.lineRange.left.start
+        this.lineRange.left.start_line === 0 ||
+        line.beforeNumber < this.lineRange.left.start_line
       ) {
-        this.lineRange.left.start = line.beforeNumber;
+        this.lineRange.left.start_line = line.beforeNumber;
       }
-      if (
-        this.lineRange.left.end === null ||
-        line.beforeNumber > this.lineRange.left.end
-      ) {
-        this.lineRange.left.end = line.beforeNumber;
+      if (line.beforeNumber > this.lineRange.left.end_line) {
+        this.lineRange.left.end_line = line.beforeNumber;
       }
     }
   }
diff --git a/polygerrit-ui/app/elements/diff/gr-diff/gr-diff-group_test.js b/polygerrit-ui/app/elements/diff/gr-diff/gr-diff-group_test.js
index 8182941..4c7d346 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff/gr-diff-group_test.js
+++ b/polygerrit-ui/app/elements/diff/gr-diff/gr-diff-group_test.js
@@ -32,8 +32,8 @@
     assert.deepEqual(group.adds, [l1, l2]);
     assert.deepEqual(group.removes, [l3]);
     assert.deepEqual(group.lineRange, {
-      left: {start: 64, end: 64},
-      right: {start: 128, end: 129},
+      left: {start_line: 64, end_line: 64},
+      right: {start_line: 128, end_line: 129},
     });
 
     let pairs = group.getSideBySidePairs();
@@ -66,8 +66,8 @@
     assert.deepEqual(group.removes, []);
 
     assert.deepEqual(group.lineRange, {
-      left: {start: 64, end: 66},
-      right: {start: 128, end: 130},
+      left: {start_line: 64, end_line: 66},
+      right: {start_line: 128, end_line: 130},
     });
 
     let pairs = group.getSideBySidePairs();
@@ -184,8 +184,8 @@
         const skipGroup = new GrDiffGroup(GrDiffGroupType.BOTH);
         skipGroup.skip = 60;
         skipGroup.lineRange = {
-          left: {start: 8, end: 67},
-          right: {start: 10, end: 69},
+          left: {start_line: 8, end_line: 67},
+          right: {start_line: 10, end_line: 69},
         };
         groups = [
           new GrDiffGroup(GrDiffGroupType.BOTH, [