Skip to content

Commit 420aa32

Browse files
committed
add replaceNotebookMetadata, microsoft#105283
1 parent 951dd14 commit 420aa32

6 files changed

Lines changed: 33 additions & 12 deletions

File tree

src/vs/vscode.proposed.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1350,6 +1350,7 @@ declare module 'vscode' {
13501350
}
13511351

13521352
export interface WorkspaceEdit {
1353+
replaceNotebookMetadata(uri: Uri, value: NotebookDocumentMetadata): void;
13531354
replaceCells(uri: Uri, start: number, end: number, cells: NotebookCellData[], metadata?: WorkspaceEditEntryMetadata): void;
13541355
replaceCellOutput(uri: Uri, index: number, outputs: CellOutput[], metadata?: WorkspaceEditEntryMetadata): void;
13551356
replaceCellMetadata(uri: Uri, index: number, cellMetadata: NotebookCellMetadata, metadata?: WorkspaceEditEntryMetadata): void;

src/vs/workbench/api/browser/mainThreadEditors.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ function reviveWorkspaceEditDto2(data: IWorkspaceEditDto | undefined): ResourceE
4444
} else if (edit._type === WorkspaceEditType.Text) {
4545
result.push(new ResourceTextEdit(edit.resource, edit.edit, edit.modelVersionId, edit.metadata));
4646
} else if (edit._type === WorkspaceEditType.Cell) {
47-
result.push(new ResourceNotebookCellEdit(edit.resource, edit.edit, edit.modelVersionId, edit.metadata));
47+
result.push(new ResourceNotebookCellEdit(edit.resource, edit.edit, edit.notebookMetadata, edit.notebookVersionId, edit.metadata));
4848
}
4949
}
5050
return result;

src/vs/workbench/api/common/extHost.protocol.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1274,8 +1274,9 @@ export interface IWorkspaceTextEditDto {
12741274
export interface IWorkspaceCellEditDto {
12751275
_type: WorkspaceEditType.Cell;
12761276
resource: UriComponents;
1277-
edit: ICellEditOperation;
1278-
modelVersionId?: number;
1277+
edit?: ICellEditOperation;
1278+
notebookMetadata?: NotebookDocumentMetadata;
1279+
notebookVersionId?: number;
12791280
metadata?: IWorkspaceEditEntryMetadataDto;
12801281
}
12811282

src/vs/workbench/api/common/extHostTypeConverters.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -537,10 +537,11 @@ export namespace WorkspaceEdit {
537537
} else if (entry._type === types.FileEditType.Cell) {
538538
result.edits.push(<extHostProtocol.IWorkspaceCellEditDto>{
539539
_type: extHostProtocol.WorkspaceEditType.Cell,
540+
metadata: entry.metadata,
540541
resource: entry.uri,
541542
edit: entry.edit,
542-
metadata: entry.metadata,
543-
modelVersionId: notebooks?.lookupNotebookDocument(entry.uri)?.notebookDocument.version
543+
notebookMetadata: entry.notebookMetadata,
544+
notebookVersionId: notebooks?.lookupNotebookDocument(entry.uri)?.notebookDocument.version
544545
});
545546
}
546547
}

src/vs/workbench/api/common/extHostTypes.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -601,7 +601,8 @@ export interface IFileTextEdit {
601601
export interface IFileCellEdit {
602602
_type: FileEditType.Cell;
603603
uri: URI;
604-
edit: ICellEditOperation;
604+
edit?: ICellEditOperation;
605+
notebookMetadata?: vscode.NotebookDocumentMetadata;
605606
metadata?: vscode.WorkspaceEditEntryMetadata;
606607
}
607608

@@ -629,7 +630,11 @@ export class WorkspaceEdit implements vscode.WorkspaceEdit {
629630
this._edits.push({ _type: FileEditType.File, from: uri, to: undefined, options, metadata });
630631
}
631632

632-
// --- cell
633+
// --- notebook
634+
635+
replaceNotebookMetadata(uri: URI, value: vscode.NotebookDocumentMetadata, metadata?: vscode.WorkspaceEditEntryMetadata): void {
636+
this._edits.push({ _type: FileEditType.Cell, metadata, uri, notebookMetadata: value });
637+
}
633638

634639
replaceCells(uri: URI, start: number, end: number, cells: vscode.NotebookCellData[], metadata?: vscode.WorkspaceEditEntryMetadata): void {
635640
this._edits.push({ _type: FileEditType.Cell, metadata, uri, edit: { editType: CellEditType.Replace, index: start, count: end - start, cells: cells.map(cell => ({ ...cell, outputs: cell.outputs.map(output => addIdToOutput(output)) })) } });

src/vs/workbench/contrib/bulkEdit/browser/bulkCellEdits.ts

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,16 @@ import { URI } from 'vs/base/common/uri';
99
import { ResourceEdit } from 'vs/editor/browser/services/bulkEditService';
1010
import { WorkspaceEditMetadata } from 'vs/editor/common/modes';
1111
import { IProgress } from 'vs/platform/progress/common/progress';
12-
import { ICellEditOperation } from 'vs/workbench/contrib/notebook/common/notebookCommon';
12+
import { ICellEditOperation, NotebookDocumentMetadata } from 'vs/workbench/contrib/notebook/common/notebookCommon';
1313
import { INotebookEditorModelResolverService } from 'vs/workbench/contrib/notebook/common/notebookEditorModelResolverService';
1414
import { INotebookService } from 'vs/workbench/contrib/notebook/common/notebookService';
1515

1616
export class ResourceNotebookCellEdit extends ResourceEdit {
1717

1818
constructor(
1919
readonly resource: URI,
20-
readonly cellEdit: ICellEditOperation,
20+
readonly cellEdit?: ICellEditOperation,
21+
readonly notebookMetadata?: NotebookDocumentMetadata,
2122
readonly versionId?: number,
2223
readonly metadata?: WorkspaceEditMetadata
2324
) {
@@ -48,10 +49,22 @@ export class BulkCellEdits {
4849
// throw new Error(`Notebook '${first.resource}' has changed in the meantime`);
4950
// }
5051

52+
const edits: ICellEditOperation[] = [];
53+
let newMetadata: NotebookDocumentMetadata | undefined;
54+
for (let edit of group) {
55+
if (edit.cellEdit) {
56+
edits.push(edit.cellEdit);
57+
}
58+
newMetadata = edit.notebookMetadata ?? newMetadata;
59+
}
60+
61+
// set metadata
62+
if (newMetadata) {
63+
ref.object.notebook.updateNotebookMetadata(newMetadata);
64+
}
5165
// apply edits
52-
const cellEdits = group.map(edit => edit.cellEdit);
53-
this._notebookService.transformEditsOutputs(ref.object.notebook, cellEdits);
54-
ref.object.notebook.applyEdit(ref.object.notebook.versionId, cellEdits, true);
66+
this._notebookService.transformEditsOutputs(ref.object.notebook, edits);
67+
ref.object.notebook.applyEdit(ref.object.notebook.versionId, edits, true);
5568
ref.dispose();
5669

5770
this._progress.report(undefined);

0 commit comments

Comments
 (0)