Path: blob/main/extensions/copilot/src/util/common/annotatedLineRange.ts
13397 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { LineRange } from '../vs/editor/common/core/ranges/lineRange';67export class AnnotatedLineRange<T> extends LineRange {8public static fromLineRange(range: LineRange): AnnotatedLineRange<void> {9return new AnnotatedLineRange(range.startLineNumber, range.endLineNumberExclusive, undefined);10}1112public static fromLineRangeWithData<T>(range: LineRange, data: T): AnnotatedLineRange<T> {13return new AnnotatedLineRange(range.startLineNumber, range.endLineNumberExclusive, data);14}1516constructor(17startLineNumber: number,18endLineNumberExclusive: number,19public readonly data: T,20) {21super(startLineNumber, endLineNumberExclusive);22}23}2425export class AnnotatedLineRanges<T> {26constructor(27/**28* Have to be sorted and disjoined.29*/30public readonly ranges: readonly AnnotatedLineRange<T>[],31) {32}3334public getFilled(range: LineRange): AnnotatedLineRanges<T | void> {35const filledRanges: AnnotatedLineRange<T | void>[] = [];36let lastEndLineNumberExclusive = range.startLineNumber;37for (const r of this.ranges) {38if (r.startLineNumber > lastEndLineNumberExclusive) {39filledRanges.push(new AnnotatedLineRange(lastEndLineNumberExclusive, r.startLineNumber, undefined));40}41filledRanges.push(r);42lastEndLineNumberExclusive = r.endLineNumberExclusive;43}44if (lastEndLineNumberExclusive < range.endLineNumberExclusive) {45filledRanges.push(new AnnotatedLineRange(lastEndLineNumberExclusive, range.endLineNumberExclusive, undefined));46}47return new AnnotatedLineRanges(filledRanges);48}4950public intersects(range: LineRange): boolean {51for (const r of this.ranges) {52if (r.intersectsStrict(range)) {53return true;54}55}56return false;57}5859public withAdded<T2>(range: AnnotatedLineRange<T2>): AnnotatedLineRanges<T | T2> {60const newRanges: AnnotatedLineRange<T | T2>[] = [...this.ranges];61newRanges.push(range);62newRanges.sort((a, b) => a.startLineNumber - b.startLineNumber);63return new AnnotatedLineRanges(newRanges);64}65}666768