提交 420aa329 编写于 作者: J Johannes Rieken

add `replaceNotebookMetadata`, https://github.com/microsoft/vscode/issues/105283

上级 951dd140
...@@ -1350,6 +1350,7 @@ declare module 'vscode' { ...@@ -1350,6 +1350,7 @@ declare module 'vscode' {
} }
export interface WorkspaceEdit { export interface WorkspaceEdit {
replaceNotebookMetadata(uri: Uri, value: NotebookDocumentMetadata): void;
replaceCells(uri: Uri, start: number, end: number, cells: NotebookCellData[], metadata?: WorkspaceEditEntryMetadata): void; replaceCells(uri: Uri, start: number, end: number, cells: NotebookCellData[], metadata?: WorkspaceEditEntryMetadata): void;
replaceCellOutput(uri: Uri, index: number, outputs: CellOutput[], metadata?: WorkspaceEditEntryMetadata): void; replaceCellOutput(uri: Uri, index: number, outputs: CellOutput[], metadata?: WorkspaceEditEntryMetadata): void;
replaceCellMetadata(uri: Uri, index: number, cellMetadata: NotebookCellMetadata, metadata?: WorkspaceEditEntryMetadata): void; replaceCellMetadata(uri: Uri, index: number, cellMetadata: NotebookCellMetadata, metadata?: WorkspaceEditEntryMetadata): void;
......
...@@ -44,7 +44,7 @@ function reviveWorkspaceEditDto2(data: IWorkspaceEditDto | undefined): ResourceE ...@@ -44,7 +44,7 @@ function reviveWorkspaceEditDto2(data: IWorkspaceEditDto | undefined): ResourceE
} else if (edit._type === WorkspaceEditType.Text) { } else if (edit._type === WorkspaceEditType.Text) {
result.push(new ResourceTextEdit(edit.resource, edit.edit, edit.modelVersionId, edit.metadata)); result.push(new ResourceTextEdit(edit.resource, edit.edit, edit.modelVersionId, edit.metadata));
} else if (edit._type === WorkspaceEditType.Cell) { } else if (edit._type === WorkspaceEditType.Cell) {
result.push(new ResourceNotebookCellEdit(edit.resource, edit.edit, edit.modelVersionId, edit.metadata)); result.push(new ResourceNotebookCellEdit(edit.resource, edit.edit, edit.notebookMetadata, edit.notebookVersionId, edit.metadata));
} }
} }
return result; return result;
......
...@@ -1274,8 +1274,9 @@ export interface IWorkspaceTextEditDto { ...@@ -1274,8 +1274,9 @@ export interface IWorkspaceTextEditDto {
export interface IWorkspaceCellEditDto { export interface IWorkspaceCellEditDto {
_type: WorkspaceEditType.Cell; _type: WorkspaceEditType.Cell;
resource: UriComponents; resource: UriComponents;
edit: ICellEditOperation; edit?: ICellEditOperation;
modelVersionId?: number; notebookMetadata?: NotebookDocumentMetadata;
notebookVersionId?: number;
metadata?: IWorkspaceEditEntryMetadataDto; metadata?: IWorkspaceEditEntryMetadataDto;
} }
......
...@@ -537,10 +537,11 @@ export namespace WorkspaceEdit { ...@@ -537,10 +537,11 @@ export namespace WorkspaceEdit {
} else if (entry._type === types.FileEditType.Cell) { } else if (entry._type === types.FileEditType.Cell) {
result.edits.push(<extHostProtocol.IWorkspaceCellEditDto>{ result.edits.push(<extHostProtocol.IWorkspaceCellEditDto>{
_type: extHostProtocol.WorkspaceEditType.Cell, _type: extHostProtocol.WorkspaceEditType.Cell,
metadata: entry.metadata,
resource: entry.uri, resource: entry.uri,
edit: entry.edit, edit: entry.edit,
metadata: entry.metadata, notebookMetadata: entry.notebookMetadata,
modelVersionId: notebooks?.lookupNotebookDocument(entry.uri)?.notebookDocument.version notebookVersionId: notebooks?.lookupNotebookDocument(entry.uri)?.notebookDocument.version
}); });
} }
} }
......
...@@ -601,7 +601,8 @@ export interface IFileTextEdit { ...@@ -601,7 +601,8 @@ export interface IFileTextEdit {
export interface IFileCellEdit { export interface IFileCellEdit {
_type: FileEditType.Cell; _type: FileEditType.Cell;
uri: URI; uri: URI;
edit: ICellEditOperation; edit?: ICellEditOperation;
notebookMetadata?: vscode.NotebookDocumentMetadata;
metadata?: vscode.WorkspaceEditEntryMetadata; metadata?: vscode.WorkspaceEditEntryMetadata;
} }
...@@ -629,7 +630,11 @@ export class WorkspaceEdit implements vscode.WorkspaceEdit { ...@@ -629,7 +630,11 @@ export class WorkspaceEdit implements vscode.WorkspaceEdit {
this._edits.push({ _type: FileEditType.File, from: uri, to: undefined, options, metadata }); this._edits.push({ _type: FileEditType.File, from: uri, to: undefined, options, metadata });
} }
// --- cell // --- notebook
replaceNotebookMetadata(uri: URI, value: vscode.NotebookDocumentMetadata, metadata?: vscode.WorkspaceEditEntryMetadata): void {
this._edits.push({ _type: FileEditType.Cell, metadata, uri, notebookMetadata: value });
}
replaceCells(uri: URI, start: number, end: number, cells: vscode.NotebookCellData[], metadata?: vscode.WorkspaceEditEntryMetadata): void { replaceCells(uri: URI, start: number, end: number, cells: vscode.NotebookCellData[], metadata?: vscode.WorkspaceEditEntryMetadata): void {
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)) })) } }); 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)) })) } });
......
...@@ -9,7 +9,7 @@ import { URI } from 'vs/base/common/uri'; ...@@ -9,7 +9,7 @@ import { URI } from 'vs/base/common/uri';
import { ResourceEdit } from 'vs/editor/browser/services/bulkEditService'; import { ResourceEdit } from 'vs/editor/browser/services/bulkEditService';
import { WorkspaceEditMetadata } from 'vs/editor/common/modes'; import { WorkspaceEditMetadata } from 'vs/editor/common/modes';
import { IProgress } from 'vs/platform/progress/common/progress'; import { IProgress } from 'vs/platform/progress/common/progress';
import { ICellEditOperation } from 'vs/workbench/contrib/notebook/common/notebookCommon'; import { ICellEditOperation, NotebookDocumentMetadata } from 'vs/workbench/contrib/notebook/common/notebookCommon';
import { INotebookEditorModelResolverService } from 'vs/workbench/contrib/notebook/common/notebookEditorModelResolverService'; import { INotebookEditorModelResolverService } from 'vs/workbench/contrib/notebook/common/notebookEditorModelResolverService';
import { INotebookService } from 'vs/workbench/contrib/notebook/common/notebookService'; import { INotebookService } from 'vs/workbench/contrib/notebook/common/notebookService';
...@@ -17,7 +17,8 @@ export class ResourceNotebookCellEdit extends ResourceEdit { ...@@ -17,7 +17,8 @@ export class ResourceNotebookCellEdit extends ResourceEdit {
constructor( constructor(
readonly resource: URI, readonly resource: URI,
readonly cellEdit: ICellEditOperation, readonly cellEdit?: ICellEditOperation,
readonly notebookMetadata?: NotebookDocumentMetadata,
readonly versionId?: number, readonly versionId?: number,
readonly metadata?: WorkspaceEditMetadata readonly metadata?: WorkspaceEditMetadata
) { ) {
...@@ -48,10 +49,22 @@ export class BulkCellEdits { ...@@ -48,10 +49,22 @@ export class BulkCellEdits {
// throw new Error(`Notebook '${first.resource}' has changed in the meantime`); // throw new Error(`Notebook '${first.resource}' has changed in the meantime`);
// } // }
const edits: ICellEditOperation[] = [];
let newMetadata: NotebookDocumentMetadata | undefined;
for (let edit of group) {
if (edit.cellEdit) {
edits.push(edit.cellEdit);
}
newMetadata = edit.notebookMetadata ?? newMetadata;
}
// set metadata
if (newMetadata) {
ref.object.notebook.updateNotebookMetadata(newMetadata);
}
// apply edits // apply edits
const cellEdits = group.map(edit => edit.cellEdit); this._notebookService.transformEditsOutputs(ref.object.notebook, edits);
this._notebookService.transformEditsOutputs(ref.object.notebook, cellEdits); ref.object.notebook.applyEdit(ref.object.notebook.versionId, edits, true);
ref.object.notebook.applyEdit(ref.object.notebook.versionId, cellEdits, true);
ref.dispose(); ref.dispose();
this._progress.report(undefined); this._progress.report(undefined);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册