diff --git a/src/vs/workbench/api/browser/mainThreadNotebook.ts b/src/vs/workbench/api/browser/mainThreadNotebook.ts index a50501f24fe..44c535b755c 100644 --- a/src/vs/workbench/api/browser/mainThreadNotebook.ts +++ b/src/vs/workbench/api/browser/mainThreadNotebook.ts @@ -160,7 +160,10 @@ export class MainThreadNotebooks extends Disposable implements MainThreadNoteboo if (!textModel) { return false; } - return textModel.applyEdits(modelVersionId, cellEdits, true, undefined, () => undefined, undefined); + if (textModel.versionId !== modelVersionId) { + return false; + } + return textModel.applyEdits(cellEdits, true, undefined, () => undefined, undefined); } private _isDeltaEmpty(delta: INotebookDocumentsAndEditorsDelta) { diff --git a/src/vs/workbench/contrib/bulkEdit/browser/bulkCellEdits.ts b/src/vs/workbench/contrib/bulkEdit/browser/bulkCellEdits.ts index 714e459272b..d633df9b24d 100644 --- a/src/vs/workbench/contrib/bulkEdit/browser/bulkCellEdits.ts +++ b/src/vs/workbench/contrib/bulkEdit/browser/bulkCellEdits.ts @@ -49,14 +49,14 @@ export class BulkCellEdits { const ref = await this._notebookModelService.resolve(first.resource); // check state - // if (typeof first.versionId === 'number' && ref.object.notebook.versionId !== first.versionId) { - // ref.dispose(); - // throw new Error(`Notebook '${first.resource}' has changed in the meantime`); - // } + if (typeof first.versionId === 'number' && ref.object.notebook.versionId !== first.versionId) { + ref.dispose(); + throw new Error(`Notebook '${first.resource}' has changed in the meantime`); + } // apply edits const edits = group.map(entry => entry.cellEdit); - ref.object.notebook.applyEdits(ref.object.notebook.versionId, edits, true, undefined, () => undefined, this._undoRedoGroup); + ref.object.notebook.applyEdits(edits, true, undefined, () => undefined, this._undoRedoGroup); ref.dispose(); this._progress.report(undefined); diff --git a/src/vs/workbench/contrib/notebook/browser/contrib/coreActions.ts b/src/vs/workbench/contrib/notebook/browser/contrib/coreActions.ts index 61e55c38886..bf558951330 100644 --- a/src/vs/workbench/contrib/notebook/browser/contrib/coreActions.ts +++ b/src/vs/workbench/contrib/notebook/browser/contrib/coreActions.ts @@ -777,7 +777,7 @@ export async function changeCellToKind(kind: CellKind, context: INotebookCellAct const text = cell.getText(); const idx = notebookEditor.viewModel.getCellIndex(cell); - notebookEditor.viewModel.notebookDocument.applyEdits(notebookEditor.viewModel.notebookDocument.versionId, [ + notebookEditor.viewModel.notebookDocument.applyEdits([ { editType: CellEditType.Replace, index: idx, @@ -1593,10 +1593,10 @@ registerAction2(class extends NotebookCellAction { return; } - editor.viewModel.notebookDocument.applyEdits(editor.viewModel.notebookDocument.versionId, [{ editType: CellEditType.Output, index, outputs: [] }], true, undefined, () => undefined, undefined); + editor.viewModel.notebookDocument.applyEdits([{ editType: CellEditType.Output, index, outputs: [] }], true, undefined, () => undefined, undefined); if (context.cell.metadata && context.cell.metadata?.runState !== NotebookCellRunState.Running) { - context.notebookEditor.viewModel.notebookDocument.applyEdits(context.notebookEditor.viewModel.notebookDocument.versionId, [{ + context.notebookEditor.viewModel.notebookDocument.applyEdits([{ editType: CellEditType.Metadata, index, metadata: { ...context.cell.metadata, runState: NotebookCellRunState.Idle, @@ -1756,7 +1756,6 @@ export class ChangeCellLanguageAction extends NotebookCellAction { } else { const index = context.notebookEditor.viewModel.notebookDocument.cells.indexOf(context.cell.model); context.notebookEditor.viewModel.notebookDocument.applyEdits( - context.notebookEditor.viewModel.notebookDocument.versionId, [{ editType: CellEditType.CellLanguage, index, language: languageId }], true, undefined, () => undefined, undefined ); @@ -1805,7 +1804,7 @@ registerAction2(class extends NotebookAction { return; } - editor.viewModel.notebookDocument.applyEdits(editor.viewModel.notebookDocument.versionId, + editor.viewModel.notebookDocument.applyEdits( editor.viewModel.notebookDocument.cells.map((cell, index) => ({ editType: CellEditType.Output, index, outputs: [] })), true, undefined, () => undefined, undefined); @@ -1827,7 +1826,7 @@ registerAction2(class extends NotebookAction { } }).filter(edit => !!edit) as ICellEditOperation[]; if (clearExecutionMetadataEdits.length) { - context.notebookEditor.viewModel.notebookDocument.applyEdits(context.notebookEditor.viewModel.notebookDocument.versionId, clearExecutionMetadataEdits, true, undefined, () => undefined, undefined); + context.notebookEditor.viewModel.notebookDocument.applyEdits(clearExecutionMetadataEdits, true, undefined, () => undefined, undefined); } } }); @@ -1962,7 +1961,7 @@ abstract class ChangeNotebookCellMetadataAction extends NotebookCellAction { return; } - textModel.applyEdits(textModel.versionId, [{ editType: CellEditType.Metadata, index, metadata: { ...context.cell.metadata, ...this.getMetadataDelta() } }], true, undefined, () => undefined, undefined); + textModel.applyEdits([{ editType: CellEditType.Metadata, index, metadata: { ...context.cell.metadata, ...this.getMetadataDelta() } }], true, undefined, () => undefined, undefined); } abstract getMetadataDelta(): NotebookCellMetadata; @@ -2116,7 +2115,7 @@ CommandsRegistry.registerCommand('notebook.trust', (accessor, args) => { const document = notebookService.listNotebookDocuments().find(document => document.uri.toString() === uri.toString()); if (document) { - document.applyEdits(document.versionId, [{ editType: CellEditType.DocumentMetadata, metadata: { ...document.metadata, ...{ trusted: true } } }], true, undefined, () => undefined, undefined, false); + document.applyEdits([{ editType: CellEditType.DocumentMetadata, metadata: { ...document.metadata, ...{ trusted: true } } }], true, undefined, () => undefined, undefined, false); } }); diff --git a/src/vs/workbench/contrib/notebook/browser/diff/diffComponents.ts b/src/vs/workbench/contrib/notebook/browser/diff/diffComponents.ts index 235dd429996..f2b9c409f97 100644 --- a/src/vs/workbench/contrib/notebook/browser/diff/diffComponents.ts +++ b/src/vs/workbench/contrib/notebook/browser/diff/diffComponents.ts @@ -440,7 +440,6 @@ abstract class AbstractElementRenderer extends Disposable { if (newLangauge !== undefined && newLangauge !== this.cell.modified!.language) { const index = this.notebookEditor.textModel!.cells.indexOf(this.cell.modified!.textModel); this.notebookEditor.textModel!.applyEdits( - this.notebookEditor.textModel!.versionId, [{ editType: CellEditType.CellLanguage, index, language: newLangauge }], true, undefined, @@ -455,7 +454,7 @@ abstract class AbstractElementRenderer extends Disposable { return; } - this.notebookEditor.textModel!.applyEdits(this.notebookEditor.textModel!.versionId, [ + this.notebookEditor.textModel!.applyEdits([ { editType: CellEditType.Metadata, index, metadata: result } ], true, undefined, () => undefined, undefined); } catch { diff --git a/src/vs/workbench/contrib/notebook/browser/notebookServiceImpl.ts b/src/vs/workbench/contrib/notebook/browser/notebookServiceImpl.ts index 177c781dbc3..9e0b32ea996 100644 --- a/src/vs/workbench/contrib/notebook/browser/notebookServiceImpl.ts +++ b/src/vs/workbench/contrib/notebook/browser/notebookServiceImpl.ts @@ -608,7 +608,7 @@ export class NotebookService extends Disposable implements INotebookService, IEd ? firstSelectIndex : viewModel.notebookDocument.cells.length - 1; - viewModel.notebookDocument.applyEdits(viewModel.notebookDocument.versionId, edits, true, { kind: SelectionStateType.Index, selections: viewModel.getSelections() }, () => { + viewModel.notebookDocument.applyEdits(edits, true, { kind: SelectionStateType.Index, selections: viewModel.getSelections() }, () => { return { kind: SelectionStateType.Index, selections: [{ start: newFocusedCellIndex, end: newFocusedCellIndex + 1 }] diff --git a/src/vs/workbench/contrib/notebook/browser/view/renderers/cellRenderer.ts b/src/vs/workbench/contrib/notebook/browser/view/renderers/cellRenderer.ts index 0150a7d7cb0..96202566534 100644 --- a/src/vs/workbench/contrib/notebook/browser/view/renderers/cellRenderer.ts +++ b/src/vs/workbench/contrib/notebook/browser/view/renderers/cellRenderer.ts @@ -341,11 +341,11 @@ abstract class AbstractCellRenderer { } if (templateData.currentRenderedCell.metadata?.inputCollapsed) { - textModel.applyEdits(textModel.versionId, [ + textModel.applyEdits([ { editType: CellEditType.Metadata, index, metadata: { ...templateData.currentRenderedCell.metadata, inputCollapsed: false } } ], true, undefined, () => undefined, undefined); } else if (templateData.currentRenderedCell.metadata?.outputCollapsed) { - textModel.applyEdits(textModel.versionId, [ + textModel.applyEdits([ { editType: CellEditType.Metadata, index, metadata: { ...templateData.currentRenderedCell.metadata, outputCollapsed: false } } ], true, undefined, () => undefined, undefined); } diff --git a/src/vs/workbench/contrib/notebook/browser/viewModel/notebookViewModel.ts b/src/vs/workbench/contrib/notebook/browser/viewModel/notebookViewModel.ts index 47f60132a7a..fba6e2fc7a1 100644 --- a/src/vs/workbench/contrib/notebook/browser/viewModel/notebookViewModel.ts +++ b/src/vs/workbench/contrib/notebook/browser/viewModel/notebookViewModel.ts @@ -670,7 +670,7 @@ export class NotebookViewModel extends Disposable implements EditorFoldingStateD createCell(index: number, source: string, language: string, type: CellKind, metadata: NotebookCellMetadata | undefined, outputs: IOutputDto[], synchronous: boolean, pushUndoStop: boolean = true, previouslyPrimary: number | null = null, previouslyFocused: ICellViewModel[] = []): CellViewModel { const beforeSelections = previouslyFocused.map(e => e.handle); - this._notebook.applyEdits(this._notebook.versionId, [ + this._notebook.applyEdits([ { editType: CellEditType.Replace, index, @@ -703,7 +703,7 @@ export class NotebookViewModel extends Disposable implements EditorFoldingStateD let endSelections: number[] = this.selectionHandles.filter(handle => handle !== endPrimarySelection); - this._notebook.applyEdits(this._notebook.versionId, [ + this._notebook.applyEdits([ { editType: CellEditType.Replace, index: index, @@ -732,7 +732,7 @@ export class NotebookViewModel extends Disposable implements EditorFoldingStateD return false; } - this._notebook.applyEdits(this._notebook.versionId, [ + this._notebook.applyEdits([ { editType: CellEditType.Move, index, diff --git a/src/vs/workbench/contrib/notebook/common/model/notebookTextModel.ts b/src/vs/workbench/contrib/notebook/common/model/notebookTextModel.ts index 6422841aab1..0246e87346e 100644 --- a/src/vs/workbench/contrib/notebook/common/model/notebookTextModel.ts +++ b/src/vs/workbench/contrib/notebook/common/model/notebookTextModel.ts @@ -283,10 +283,7 @@ export class NotebookTextModel extends Disposable implements INotebookTextModel this._operationManager.pushStackElement(label, selectionState, undoRedoGroup); } - applyEdits(modelVersionId: number, rawEdits: ICellEditOperation[], synchronous: boolean, beginSelectionState: ISelectionState | undefined, endSelectionsComputer: () => ISelectionState | undefined, undoRedoGroup: UndoRedoGroup | undefined, computeUndoRedo: boolean = true): boolean { - if (modelVersionId !== this._versionId) { - return false; - } + applyEdits(rawEdits: ICellEditOperation[], synchronous: boolean, beginSelectionState: ISelectionState | undefined, endSelectionsComputer: () => ISelectionState | undefined, undoRedoGroup: UndoRedoGroup | undefined, computeUndoRedo: boolean = true): boolean { this._eventEmitter.beginDeferredEmit(); this.pushStackElement('edit', beginSelectionState, undoRedoGroup); diff --git a/src/vs/workbench/contrib/notebook/common/notebookEditorModel.ts b/src/vs/workbench/contrib/notebook/common/notebookEditorModel.ts index dd58e663194..f5755de9105 100644 --- a/src/vs/workbench/contrib/notebook/common/notebookEditorModel.ts +++ b/src/vs/workbench/contrib/notebook/common/notebookEditorModel.ts @@ -224,7 +224,7 @@ export class NotebookEditorModel extends EditorModel implements INotebookEditorM this.notebook.metadata = data.data.metadata; this.notebook.transientOptions = data.transientOptions; const edits: ICellEditOperation[] = [{ editType: CellEditType.Replace, index: 0, count: this.notebook.cells.length, cells: data.data.cells }]; - this.notebook.applyEdits(this.notebook.versionId, edits, true, undefined, () => undefined, undefined); + this.notebook.applyEdits(edits, true, undefined, () => undefined, undefined); } if (backupId) { diff --git a/src/vs/workbench/contrib/notebook/test/notebookTextModel.test.ts b/src/vs/workbench/contrib/notebook/test/notebookTextModel.test.ts index 6caa4fd6624..ad78291ec13 100644 --- a/src/vs/workbench/contrib/notebook/test/notebookTextModel.test.ts +++ b/src/vs/workbench/contrib/notebook/test/notebookTextModel.test.ts @@ -29,7 +29,7 @@ suite('NotebookTextModel', () => { ['var d = 4;', 'javascript', CellKind.Code, [], { editable: false }] ], (editor, viewModel, textModel) => { - textModel.applyEdits(textModel.versionId, [ + textModel.applyEdits([ { editType: CellEditType.Replace, index: 1, count: 0, cells: [new TestCell(viewModel.viewType, 5, 'var e = 5;', 'javascript', CellKind.Code, [], textModelService)] }, { editType: CellEditType.Replace, index: 3, count: 0, cells: [new TestCell(viewModel.viewType, 6, 'var f = 6;', 'javascript', CellKind.Code, [], textModelService)] }, ], true, undefined, () => undefined, undefined); @@ -54,7 +54,7 @@ suite('NotebookTextModel', () => { ['var d = 4;', 'javascript', CellKind.Code, [], { editable: false }] ], (editor, viewModel, textModel) => { - textModel.applyEdits(textModel.versionId, [ + textModel.applyEdits([ { editType: CellEditType.Replace, index: 1, count: 0, cells: [new TestCell(viewModel.viewType, 5, 'var e = 5;', 'javascript', CellKind.Code, [], textModelService)] }, { editType: CellEditType.Replace, index: 1, count: 0, cells: [new TestCell(viewModel.viewType, 6, 'var f = 6;', 'javascript', CellKind.Code, [], textModelService)] }, ], true, undefined, () => undefined, undefined); @@ -79,7 +79,7 @@ suite('NotebookTextModel', () => { ['var d = 4;', 'javascript', CellKind.Code, [], { editable: false }] ], (editor, viewModel, textModel) => { - textModel.applyEdits(textModel.versionId, [ + textModel.applyEdits([ { editType: CellEditType.Replace, index: 1, count: 1, cells: [] }, { editType: CellEditType.Replace, index: 3, count: 1, cells: [] }, ], true, undefined, () => undefined, undefined); @@ -102,7 +102,7 @@ suite('NotebookTextModel', () => { ['var d = 4;', 'javascript', CellKind.Code, [], { editable: false }] ], (editor, viewModel, textModel) => { - textModel.applyEdits(textModel.versionId, [ + textModel.applyEdits([ { editType: CellEditType.Replace, index: 1, count: 1, cells: [] }, { editType: CellEditType.Replace, index: 3, count: 0, cells: [new TestCell(viewModel.viewType, 5, 'var e = 5;', 'javascript', CellKind.Code, [], textModelService)] }, ], true, undefined, () => undefined, undefined); @@ -127,7 +127,7 @@ suite('NotebookTextModel', () => { ['var d = 4;', 'javascript', CellKind.Code, [], { editable: false }] ], (editor, viewModel, textModel) => { - textModel.applyEdits(textModel.versionId, [ + textModel.applyEdits([ { editType: CellEditType.Replace, index: 1, count: 1, cells: [] }, { editType: CellEditType.Replace, index: 1, count: 0, cells: [new TestCell(viewModel.viewType, 5, 'var e = 5;', 'javascript', CellKind.Code, [], textModelService)] }, ], true, undefined, () => undefined, undefined); @@ -152,7 +152,7 @@ suite('NotebookTextModel', () => { ['var d = 4;', 'javascript', CellKind.Code, [], { editable: false }] ], (editor, viewModel, textModel) => { - textModel.applyEdits(textModel.versionId, [ + textModel.applyEdits([ { editType: CellEditType.Replace, index: 1, count: 1, cells: [new TestCell(viewModel.viewType, 5, 'var e = 5;', 'javascript', CellKind.Code, [], textModelService)] }, ], true, undefined, () => undefined, undefined); @@ -176,7 +176,7 @@ suite('NotebookTextModel', () => { // invalid index 1 assert.throws(() => { - textModel.applyEdits(textModel.versionId, [{ + textModel.applyEdits([{ index: Number.MAX_VALUE, editType: CellEditType.Output, outputs: [] @@ -185,14 +185,14 @@ suite('NotebookTextModel', () => { // invalid index 2 assert.throws(() => { - textModel.applyEdits(textModel.versionId, [{ + textModel.applyEdits([{ index: -1, editType: CellEditType.Output, outputs: [] }], true, undefined, () => undefined, undefined); }); - textModel.applyEdits(textModel.versionId, [{ + textModel.applyEdits([{ index: 0, editType: CellEditType.Output, outputs: [{ @@ -205,7 +205,7 @@ suite('NotebookTextModel', () => { assert.strictEqual(textModel.cells[0].outputs.length, 1); // append - textModel.applyEdits(textModel.versionId, [{ + textModel.applyEdits([{ index: 0, editType: CellEditType.Output, append: true, @@ -222,7 +222,7 @@ suite('NotebookTextModel', () => { assert.strictEqual(second.outputId, 'someId2'); // replace all - textModel.applyEdits(textModel.versionId, [{ + textModel.applyEdits([{ index: 0, editType: CellEditType.Output, outputs: [{ @@ -251,7 +251,7 @@ suite('NotebookTextModel', () => { // invalid index 1 assert.throws(() => { - textModel.applyEdits(textModel.versionId, [{ + textModel.applyEdits([{ index: Number.MAX_VALUE, editType: CellEditType.Metadata, metadata: { editable: false } @@ -260,14 +260,14 @@ suite('NotebookTextModel', () => { // invalid index 2 assert.throws(() => { - textModel.applyEdits(textModel.versionId, [{ + textModel.applyEdits([{ index: -1, editType: CellEditType.Metadata, metadata: { editable: false } }], true, undefined, () => undefined, undefined); }); - textModel.applyEdits(textModel.versionId, [{ + textModel.applyEdits([{ index: 0, editType: CellEditType.Metadata, metadata: { editable: false }, @@ -297,7 +297,7 @@ suite('NotebookTextModel', () => { }); const version = textModel.versionId; - textModel.applyEdits(textModel.versionId, [ + textModel.applyEdits([ { editType: CellEditType.Replace, index: 1, count: 1, cells: [] }, { editType: CellEditType.Replace, index: 1, count: 0, cells: [new TestCell(viewModel.viewType, 5, 'var e = 5;', 'javascript', CellKind.Code, [], textModelService)] }, ], true, undefined, () => ({ kind: SelectionStateType.Index, selections: [{ start: 0, end: 1 }] }), undefined); @@ -334,7 +334,7 @@ suite('NotebookTextModel', () => { }); const version = textModel.versionId; - textModel.applyEdits(textModel.versionId, [ + textModel.applyEdits([ { editType: CellEditType.Replace, index: 1, count: 1, cells: [] }, { index: 0, @@ -362,7 +362,6 @@ suite('NotebookTextModel', () => { assert.strictEqual(model.cells[0].outputs.length, 0); const success1 = model.applyEdits( - model.versionId, [{ editType: CellEditType.Output, index: 0, outputs: [ { outputId: 'out1', outputs: [{ mime: 'application/x.notebook.stream', value: 1 }] } @@ -375,7 +374,6 @@ suite('NotebookTextModel', () => { assert.strictEqual(model.cells[0].outputs.length, 1); const success2 = model.applyEdits( - model.versionId, [{ editType: CellEditType.Output, index: 0, outputs: [ { outputId: 'out2', outputs: [{ mime: 'application/x.notebook.stream', value: 1 }] }