Skip to content

Commit cb7ea6e

Browse files
committed
Remove notebook content provider
1 parent 1b52179 commit cb7ea6e

10 files changed

Lines changed: 42 additions & 220 deletions

File tree

src/vs/vscode.proposed.d.ts

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1737,12 +1737,6 @@ declare module 'vscode' {
17371737
edit(callback: (editBuilder: NotebookEditorCellEdit) => void): Thenable<boolean>;
17381738
}
17391739

1740-
export interface NotebookProvider {
1741-
resolveNotebook(editor: NotebookEditor): Promise<void>;
1742-
executeCell(document: NotebookDocument, cell: NotebookCell | undefined, token: CancellationToken): Promise<void>;
1743-
save(document: NotebookDocument): Promise<boolean>;
1744-
}
1745-
17461740
export interface NotebookOutputSelector {
17471741
type: string;
17481742
subTypes?: string[];
@@ -1805,11 +1799,6 @@ declare module 'vscode' {
18051799
provider: NotebookContentProvider
18061800
): Disposable;
18071801

1808-
export function registerNotebookProvider(
1809-
notebookType: string,
1810-
provider: NotebookProvider
1811-
): Disposable;
1812-
18131802
export function registerNotebookOutputRenderer(
18141803
type: string,
18151804
outputSelector: NotebookOutputSelector,

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

Lines changed: 10 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { MainContext, MainThreadNotebookShape, NotebookExtensionDescription, IEx
88
import { Disposable } from 'vs/base/common/lifecycle';
99
import { URI, UriComponents } from 'vs/base/common/uri';
1010
import { INotebookService, IMainNotebookController } from 'vs/workbench/contrib/notebook/common/notebookService';
11-
import { INotebookTextModel, INotebookMimeTypeSelector, NOTEBOOK_DISPLAY_ORDER, NotebookCellOutputsSplice, CellKind, NotebookDocumentMetadata, NotebookCellMetadata, ICellEditOperation, ACCESSIBLE_NOTEBOOK_DISPLAY_ORDER, CellEditType } from 'vs/workbench/contrib/notebook/common/notebookCommon';
11+
import { INotebookTextModel, INotebookMimeTypeSelector, NOTEBOOK_DISPLAY_ORDER, NotebookCellOutputsSplice, NotebookDocumentMetadata, NotebookCellMetadata, ICellEditOperation, ACCESSIBLE_NOTEBOOK_DISPLAY_ORDER } from 'vs/workbench/contrib/notebook/common/notebookCommon';
1212
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
1313
import { NotebookTextModel } from 'vs/workbench/contrib/notebook/common/model/notebookTextModel';
1414
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
@@ -118,8 +118,8 @@ export class MainThreadNotebooks extends Disposable implements MainThreadNoteboo
118118
this._notebookService.unregisterNotebookRenderer(handle);
119119
}
120120

121-
async $registerNotebookProvider(extension: NotebookExtensionDescription, viewType: string, v2: boolean): Promise<void> {
122-
let controller = new MainThreadNotebookController(this._proxy, this, viewType, v2);
121+
async $registerNotebookProvider(extension: NotebookExtensionDescription, viewType: string): Promise<void> {
122+
let controller = new MainThreadNotebookController(this._proxy, this, viewType);
123123
this._notebookProviders.set(viewType, controller);
124124
this._notebookService.registerNotebookController(viewType, extension, controller);
125125
return;
@@ -131,16 +131,6 @@ export class MainThreadNotebooks extends Disposable implements MainThreadNoteboo
131131
return;
132132
}
133133

134-
async $_deprecated_createNotebookDocument(handle: number, viewType: string, resource: UriComponents): Promise<void> {
135-
let controller = this._notebookProviders.get(viewType);
136-
137-
if (controller) {
138-
controller._deprecated_createNotebookDocument(handle, viewType, resource);
139-
}
140-
141-
return;
142-
}
143-
144134
async $updateNotebookLanguages(viewType: string, resource: UriComponents, languages: string[]): Promise<void> {
145135
let controller = this._notebookProviders.get(viewType);
146136

@@ -165,11 +155,6 @@ export class MainThreadNotebooks extends Disposable implements MainThreadNoteboo
165155
}
166156
}
167157

168-
async _deprecated_resolveNotebook(viewType: string, uri: URI): Promise<number | undefined> {
169-
let handle = await this._proxy.$_deprecated_resolveNotebook(viewType, uri);
170-
return handle;
171-
}
172-
173158
async $spliceNotebookCellOutputs(viewType: string, resource: UriComponents, cellHandle: number, splices: NotebookCellOutputsSplice[], renderers: number[]): Promise<void> {
174159
let controller = this._notebookProviders.get(viewType);
175160
controller?.spliceNotebookCellOutputs(resource, cellHandle, splices, renderers);
@@ -202,8 +187,7 @@ export class MainThreadNotebookController implements IMainNotebookController {
202187
constructor(
203188
private readonly _proxy: ExtHostNotebookShape,
204189
private _mainThreadNotebook: MainThreadNotebooks,
205-
private _viewType: string,
206-
public readonly v2: boolean
190+
private _viewType: string
207191
) {
208192
}
209193

@@ -215,7 +199,7 @@ export class MainThreadNotebookController implements IMainNotebookController {
215199
}
216200

217201
let document = new MainThreadNotebookDocument(this._proxy, MainThreadNotebookController.documentHandle++, viewType, uri);
218-
await this.createNotebookDocument(document.handle, document.viewType, document.uri);
202+
await this.createNotebookDocument(document);
219203

220204
if (forBackup) {
221205
return document.textModel;
@@ -229,39 +213,11 @@ export class MainThreadNotebookController implements IMainNotebookController {
229213

230214
document.textModel.languages = data.languages;
231215
document.textModel.metadata = data.metadata;
232-
document.textModel.applyEdit(document.textModel.versionId, [
233-
{
234-
editType: CellEditType.Insert,
235-
index: 0,
236-
cells: data!.cells
237-
}
238-
]);
216+
document.textModel.initialize(data!.cells);
239217

240218
return document.textModel;
241219
}
242220

243-
async _deprecated_resolveNotebook(viewType: string, uri: URI): Promise<NotebookTextModel | undefined> {
244-
// TODO: resolve notebook should wait for all notebook document destory operations to finish.
245-
let mainthreadNotebook = this._mapping.get(URI.from(uri).toString());
246-
247-
if (mainthreadNotebook) {
248-
return mainthreadNotebook.textModel;
249-
}
250-
251-
let notebookHandle = await this._mainThreadNotebook._deprecated_resolveNotebook(viewType, uri);
252-
if (notebookHandle !== undefined) {
253-
mainthreadNotebook = this._mapping.get(URI.from(uri).toString());
254-
if (mainthreadNotebook && mainthreadNotebook.textModel.cells.length === 0) {
255-
// it's empty, we should create an empty template one
256-
const mainCell = mainthreadNotebook.textModel.createCellTextModel([''], mainthreadNotebook.textModel.languages.length ? mainthreadNotebook.textModel.languages[0] : '', CellKind.Code, [], undefined);
257-
mainthreadNotebook.textModel.insertTemplateCell(mainCell);
258-
}
259-
return mainthreadNotebook?.textModel;
260-
}
261-
262-
return undefined;
263-
}
264-
265221
async tryApplyEdits(resource: UriComponents, modelVersionId: number, edits: ICellEditOperation[], renderers: number[]): Promise<boolean> {
266222
let mainthreadNotebook = this._mapping.get(URI.from(resource).toString());
267223

@@ -287,15 +243,14 @@ export class MainThreadNotebookController implements IMainNotebookController {
287243
this._proxy.$onDidReceiveMessage(uri, message);
288244
}
289245

290-
async createNotebookDocument(handle: number, viewType: string, resource: UriComponents): Promise<void> {
291-
let document = new MainThreadNotebookDocument(this._proxy, handle, viewType, URI.revive(resource));
292-
this._mapping.set(URI.revive(resource).toString(), document);
246+
async createNotebookDocument(document: MainThreadNotebookDocument): Promise<void> {
247+
this._mapping.set(document.uri.toString(), document);
293248

294249
await this._proxy.$acceptDocumentAndEditorsDelta({
295250
addedDocuments: [{
296-
viewType: viewType,
251+
viewType: document.viewType,
297252
handle: document.handle,
298-
uri: resource
253+
uri: document.uri
299254
}]
300255
});
301256
}
@@ -313,10 +268,6 @@ export class MainThreadNotebookController implements IMainNotebookController {
313268
}
314269

315270
// Methods for ExtHost
316-
async _deprecated_createNotebookDocument(handle: number, viewType: string, resource: UriComponents): Promise<void> {
317-
let document = new MainThreadNotebookDocument(this._proxy, handle, viewType, URI.revive(resource));
318-
this._mapping.set(URI.revive(resource).toString(), document);
319-
}
320271

321272
updateLanguages(resource: UriComponents, languages: string[]) {
322273
let document = this._mapping.get(URI.from(resource).toString());

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -910,10 +910,6 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I
910910
checkProposedApiEnabled(extension);
911911
return extHostNotebook.onDidCloseNotebookDocument;
912912
},
913-
registerNotebookProvider: (viewType: string, provider: vscode.NotebookProvider) => {
914-
checkProposedApiEnabled(extension);
915-
return extHostNotebook.registerNotebookProvider(extension, viewType, provider);
916-
},
917913
registerNotebookContentProvider: (viewType: string, provider: vscode.NotebookContentProvider) => {
918914
checkProposedApiEnabled(extension);
919915
return extHostNotebook.registerNotebookContentProvider(extension, viewType, provider);

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -687,11 +687,10 @@ export type NotebookCellOutputsSplice = [
687687
];
688688

689689
export interface MainThreadNotebookShape extends IDisposable {
690-
$registerNotebookProvider(extension: NotebookExtensionDescription, viewType: string, v2: boolean): Promise<void>;
690+
$registerNotebookProvider(extension: NotebookExtensionDescription, viewType: string): Promise<void>;
691691
$unregisterNotebookProvider(viewType: string): Promise<void>;
692692
$registerNotebookRenderer(extension: NotebookExtensionDescription, type: string, selectors: INotebookMimeTypeSelector, handle: number, preloads: UriComponents[]): Promise<void>;
693693
$unregisterNotebookRenderer(handle: number): Promise<void>;
694-
$_deprecated_createNotebookDocument(handle: number, viewType: string, resource: UriComponents): Promise<void>;
695694
$tryApplyEdits(viewType: string, resource: UriComponents, modelVersionId: number, edits: ICellEditOperation[], renderers: number[]): Promise<boolean>;
696695
$updateNotebookLanguages(viewType: string, resource: UriComponents, languages: string[]): Promise<void>;
697696
$updateNotebookMetadata(viewType: string, resource: UriComponents, metadata: NotebookDocumentMetadata): Promise<void>;
@@ -1555,7 +1554,6 @@ export interface INotebookDocumentsAndEditorsDelta {
15551554

15561555
export interface ExtHostNotebookShape {
15571556
$resolveNotebookData(viewType: string, uri: UriComponents): Promise<NotebookDataDto | undefined>;
1558-
$_deprecated_resolveNotebook(viewType: string, uri: UriComponents): Promise<number | undefined>;
15591557
$executeNotebook(viewType: string, uri: UriComponents, cellHandle: number | undefined, token: CancellationToken): Promise<void>;
15601558
$saveNotebook(viewType: string, uri: UriComponents, token: CancellationToken): Promise<boolean>;
15611559
$acceptDisplayOrder(displayOrder: INotebookDisplayOrder): void;

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

Lines changed: 5 additions & 125 deletions
Original file line numberDiff line numberDiff line change
@@ -625,7 +625,6 @@ export class ExtHostNotebookController implements ExtHostNotebookShape, ExtHostN
625625
private static _handlePool: number = 0;
626626

627627
private readonly _proxy: MainThreadNotebookShape;
628-
private readonly _notebookProviders = new Map<string, { readonly provider: vscode.NotebookProvider, readonly extension: IExtensionDescription; }>();
629628
private readonly _notebookContentProviders = new Map<string, { readonly provider: vscode.NotebookContentProvider, readonly extension: IExtensionDescription; }>();
630629
private readonly _documents = new Map<string, ExtHostNotebookDocument>();
631630
private readonly _editors = new Map<string, { editor: ExtHostNotebookEditor, onDidReceiveMessage: Emitter<any>; }>();
@@ -706,93 +705,24 @@ export class ExtHostNotebookController implements ExtHostNotebookShape, ExtHostN
706705
return matches;
707706
}
708707

709-
registerNotebookProvider(
710-
extension: IExtensionDescription,
711-
viewType: string,
712-
provider: vscode.NotebookProvider,
713-
): vscode.Disposable {
714-
715-
if (this._notebookProviders.has(viewType)) {
716-
throw new Error(`Notebook provider for '${viewType}' already registered`);
717-
}
718-
719-
this._notebookProviders.set(viewType, { extension, provider });
720-
this._proxy.$registerNotebookProvider({ id: extension.identifier, location: extension.extensionLocation }, viewType, false);
721-
return new VSCodeDisposable(() => {
722-
this._notebookProviders.delete(viewType);
723-
this._proxy.$unregisterNotebookProvider(viewType);
724-
});
725-
}
726-
727708
registerNotebookContentProvider(
728709
extension: IExtensionDescription,
729710
viewType: string,
730711
provider: vscode.NotebookContentProvider,
731712
): vscode.Disposable {
732713

733-
if (this._notebookProviders.has(viewType)) {
714+
if (this._notebookContentProviders.has(viewType)) {
734715
throw new Error(`Notebook provider for '${viewType}' already registered`);
735716
}
736717

737718
this._notebookContentProviders.set(viewType, { extension, provider });
738-
this._proxy.$registerNotebookProvider({ id: extension.identifier, location: extension.extensionLocation }, viewType, true);
719+
this._proxy.$registerNotebookProvider({ id: extension.identifier, location: extension.extensionLocation }, viewType);
739720
return new VSCodeDisposable(() => {
740721
this._notebookContentProviders.delete(viewType);
741722
this._proxy.$unregisterNotebookProvider(viewType);
742723
});
743724
}
744725

745-
async _resolveNotebookFromContentProvider(viewType: string, uri: UriComponents): Promise<number | undefined> {
746-
let provider = this._notebookContentProviders.get(viewType);
747-
748-
if (provider) {
749-
const revivedUri = URI.revive(uri);
750-
if (!this._documents.has(revivedUri.toString())) {
751-
let document = new ExtHostNotebookDocument(this._proxy, this._documentsAndEditors, viewType, revivedUri, this);
752-
await this._proxy.$_deprecated_createNotebookDocument(
753-
document.handle,
754-
viewType,
755-
uri
756-
);
757-
758-
this._documents.set(revivedUri.toString(), document);
759-
}
760-
761-
const onDidReceiveMessage = new Emitter<any>();
762-
763-
let editor = new ExtHostNotebookEditor(
764-
viewType,
765-
`${ExtHostNotebookController._handlePool++}`,
766-
revivedUri,
767-
this._proxy,
768-
onDidReceiveMessage,
769-
this._documents.get(revivedUri.toString())!,
770-
this._documentsAndEditors
771-
);
772-
773-
this._editors.set(revivedUri.toString(), { editor, onDidReceiveMessage });
774-
775-
const data = await provider.provider.openNotebook(revivedUri);
776-
editor.document.languages = data.languages;
777-
editor.document.metadata = {
778-
...notebookDocumentMetadataDefaults,
779-
...data.metadata
780-
};
781-
782-
await editor.edit(editBuilder => {
783-
for (let i = 0; i < data.cells.length; i++) {
784-
const cell = data.cells[i];
785-
editBuilder.insert(0, cell.source, cell.language, cell.cellKind, cell.outputs, cell.metadata);
786-
}
787-
});
788-
789-
this._onDidOpenNotebookDocument.fire(editor.document);
790-
return editor.document.handle;
791-
} else {
792-
return Promise.resolve(undefined);
793-
}
794-
}
795-
796726
async $resolveNotebookData(viewType: string, uri: UriComponents): Promise<NotebookDataDto | undefined> {
797727
let provider = this._notebookContentProviders.get(viewType);
798728
let document = this._documents.get(URI.revive(uri).toString());
@@ -890,48 +820,6 @@ export class ExtHostNotebookController implements ExtHostNotebookShape, ExtHostN
890820
};
891821
}
892822

893-
async $_deprecated_resolveNotebook(viewType: string, uri: UriComponents): Promise<number | undefined> {
894-
let notebookFromNotebookContentProvider = await this._resolveNotebookFromContentProvider(viewType, uri);
895-
896-
if (notebookFromNotebookContentProvider !== undefined) {
897-
return notebookFromNotebookContentProvider;
898-
}
899-
900-
let provider = this._notebookProviders.get(viewType);
901-
902-
if (provider) {
903-
if (!this._documents.has(URI.revive(uri).toString())) {
904-
let document = new ExtHostNotebookDocument(this._proxy, this._documentsAndEditors, viewType, URI.revive(uri), this);
905-
await this._proxy.$_deprecated_createNotebookDocument(
906-
document.handle,
907-
viewType,
908-
uri
909-
);
910-
911-
this._documents.set(URI.revive(uri).toString(), document);
912-
}
913-
914-
const onDidReceiveMessage = new Emitter<any>();
915-
916-
let editor = new ExtHostNotebookEditor(
917-
viewType,
918-
`${ExtHostNotebookController._handlePool++}`,
919-
URI.revive(uri),
920-
this._proxy,
921-
onDidReceiveMessage,
922-
this._documents.get(URI.revive(uri).toString())!,
923-
this._documentsAndEditors
924-
);
925-
926-
this._editors.set(URI.revive(uri).toString(), { editor, onDidReceiveMessage });
927-
await provider.provider.resolveNotebook(editor);
928-
// await editor.document.$updateCells();
929-
return editor.document.handle;
930-
}
931-
932-
return Promise.resolve(undefined);
933-
}
934-
935823
async $executeNotebook(viewType: string, uri: UriComponents, cellHandle: number | undefined, token: CancellationToken): Promise<void> {
936824
let document = this._documents.get(URI.revive(uri).toString());
937825

@@ -944,15 +832,6 @@ export class ExtHostNotebookController implements ExtHostNotebookShape, ExtHostN
944832

945833
return this._notebookContentProviders.get(viewType)!.provider.executeCell(document, cell, token);
946834
}
947-
948-
let provider = this._notebookProviders.get(viewType);
949-
950-
if (!provider) {
951-
return;
952-
}
953-
954-
let cell = cellHandle !== undefined ? document.getCell(cellHandle) : undefined;
955-
return provider.provider.executeCell(document!, cell, token);
956835
}
957836

958837
async $saveNotebook(viewType: string, uri: UriComponents, token: CancellationToken): Promise<boolean> {
@@ -971,10 +850,11 @@ export class ExtHostNotebookController implements ExtHostNotebookShape, ExtHostN
971850
return true;
972851
}
973852

974-
let provider = this._notebookProviders.get(viewType);
853+
let provider = this._notebookContentProviders.get(viewType);
975854

976855
if (provider && document) {
977-
return await provider.provider.save(document);
856+
await provider.provider.saveNotebook(document, token);
857+
return true;
978858
}
979859

980860
return false;

0 commit comments

Comments
 (0)