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

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

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