Skip to content

Commit 0d60804

Browse files
authored
ISpliceable.splice should take a readonly array of values (#166751)
Calling `.splice` should not modify the array of values passed in
1 parent ad2531a commit 0d60804

File tree

8 files changed

+11
-9
lines changed

8 files changed

+11
-9
lines changed

src/vs/base/browser/ui/list/listView.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,7 @@ export class ListView<T> implements ISpliceable<T>, IDisposable {
467467
}
468468
}
469469

470-
splice(start: number, deleteCount: number, elements: T[] = []): T[] {
470+
splice(start: number, deleteCount: number, elements: readonly T[] = []): T[] {
471471
if (this.splicing) {
472472
throw new Error('Can\'t run recursive splices.');
473473
}
@@ -482,7 +482,7 @@ export class ListView<T> implements ISpliceable<T>, IDisposable {
482482
}
483483
}
484484

485-
private _splice(start: number, deleteCount: number, elements: T[] = []): T[] {
485+
private _splice(start: number, deleteCount: number, elements: readonly T[] = []): T[] {
486486
const previousRenderRange = this.getRenderRange(this.lastRenderTop, this.lastRenderHeight);
487487
const deleteRange = { start, end: start + deleteCount };
488488
const removeRange = Range.intersect(previousRenderRange, deleteRange);

src/vs/base/browser/ui/list/listWidget.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1426,7 +1426,7 @@ export class List<T> implements ISpliceable<T>, IThemable, IDisposable {
14261426
return this._options;
14271427
}
14281428

1429-
splice(start: number, deleteCount: number, elements: T[] = []): void {
1429+
splice(start: number, deleteCount: number, elements: readonly T[] = []): void {
14301430
if (start < 0 || start > this.view.length) {
14311431
throw new ListError(this.user, `Invalid start index: ${start}`);
14321432
}

src/vs/base/browser/ui/table/tableWidget.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ export class Table<TRow> implements ISpliceable<TRow>, IThemable, IDisposable {
228228
this.list.updateOptions(options);
229229
}
230230

231-
splice(start: number, deleteCount: number, elements: TRow[] = []): void {
231+
splice(start: number, deleteCount: number, elements: readonly TRow[] = []): void {
232232
this.list.splice(start, deleteCount, elements);
233233
}
234234

src/vs/base/browser/ui/tree/abstractTree.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1317,7 +1317,7 @@ class TreeNodeList<T, TFilterData, TRef> extends List<ITreeNode<T, TFilterData>>
13171317
return new TreeNodeListMouseController(this, options.tree);
13181318
}
13191319

1320-
override splice(start: number, deleteCount: number, elements: ITreeNode<T, TFilterData>[] = []): void {
1320+
override splice(start: number, deleteCount: number, elements: readonly ITreeNode<T, TFilterData>[] = []): void {
13211321
super.splice(start, deleteCount, elements);
13221322

13231323
if (elements.length === 0) {

src/vs/base/common/arrays.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,7 @@ export function groupBy<T>(data: ReadonlyArray<T>, compare: (a: T, b: T) => numb
178178
}
179179

180180
interface IMutableSplice<T> extends ISplice<T> {
181+
readonly toInsert: T[];
181182
deleteCount: number;
182183
}
183184

src/vs/base/common/sequence.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ import { Emitter, Event } from 'vs/base/common/event';
88
export interface ISplice<T> {
99
readonly start: number;
1010
readonly deleteCount: number;
11-
readonly toInsert: T[];
11+
readonly toInsert: readonly T[];
1212
}
1313

1414
export interface ISpliceable<T> {
15-
splice(start: number, deleteCount: number, toInsert: T[]): void;
15+
splice(start: number, deleteCount: number, toInsert: readonly T[]): void;
1616
}
1717

1818
export interface ISequence<T> {
@@ -27,7 +27,7 @@ export class Sequence<T> implements ISequence<T>, ISpliceable<T> {
2727
private readonly _onDidSplice = new Emitter<ISplice<T>>();
2828
readonly onDidSplice: Event<ISplice<T>> = this._onDidSplice.event;
2929

30-
splice(start: number, deleteCount: number, toInsert: T[] = []): void {
30+
splice(start: number, deleteCount: number, toInsert: readonly T[] = []): void {
3131
this.elements.splice(start, deleteCount, ...toInsert);
3232
this._onDidSplice.fire({ start, deleteCount, toInsert });
3333
}

src/vs/workbench/contrib/notebook/browser/view/notebookCellList.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -481,7 +481,7 @@ export class NotebookCellList extends WorkbenchList<CellViewModel> implements ID
481481
this._updateElementsInWebview(viewDiffs);
482482
}
483483

484-
splice2(start: number, deleteCount: number, elements: CellViewModel[] = []): void {
484+
splice2(start: number, deleteCount: number, elements: readonly CellViewModel[] = []): void {
485485
// we need to convert start and delete count based on hidden ranges
486486
if (start < 0 || start > this.view.length) {
487487
return;

src/vs/workbench/contrib/notebook/common/notebookCommon.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -697,6 +697,7 @@ export class MimeTypeDisplayOrder {
697697
}
698698

699699
interface IMutableSplice<T> extends ISplice<T> {
700+
readonly toInsert: T[];
700701
deleteCount: number;
701702
}
702703

0 commit comments

Comments
 (0)