add showNotebookDocument overload or uri
This commit is contained in:
parent
ae2f3e07e1
commit
997c9f2930
4 changed files with 82 additions and 7 deletions
|
@ -0,0 +1,69 @@
|
||||||
|
/*---------------------------------------------------------------------------------------------
|
||||||
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||||
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
import * as assert from 'assert';
|
||||||
|
import * as vscode from 'vscode';
|
||||||
|
import * as utils from '../utils';
|
||||||
|
|
||||||
|
suite('Notebook Editor', function () {
|
||||||
|
|
||||||
|
const contentProvider = new class implements vscode.NotebookContentProvider {
|
||||||
|
async openNotebook(uri: vscode.Uri, _openContext: vscode.NotebookDocumentOpenContext): Promise<vscode.NotebookData> {
|
||||||
|
return {
|
||||||
|
cells: [{ cellKind: vscode.NotebookCellKind.Code, source: uri.toString(), language: 'javascript', metadata: new vscode.NotebookCellMetadata(), outputs: [] }],
|
||||||
|
metadata: new vscode.NotebookDocumentMetadata()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
async resolveNotebook(_document: vscode.NotebookDocument, _webview: vscode.NotebookCommunication) {
|
||||||
|
//
|
||||||
|
}
|
||||||
|
async saveNotebook(_document: vscode.NotebookDocument, _cancellation: vscode.CancellationToken) {
|
||||||
|
//
|
||||||
|
}
|
||||||
|
async saveNotebookAs(_targetResource: vscode.Uri, _document: vscode.NotebookDocument, _cancellation: vscode.CancellationToken) {
|
||||||
|
//
|
||||||
|
}
|
||||||
|
async backupNotebook(_document: vscode.NotebookDocument, _context: vscode.NotebookDocumentBackupContext, _cancellation: vscode.CancellationToken) {
|
||||||
|
return { id: '', delete() { } };
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const disposables: vscode.Disposable[] = [];
|
||||||
|
|
||||||
|
suiteTeardown(async function () {
|
||||||
|
utils.assertNoRpc();
|
||||||
|
await utils.revertAllDirty();
|
||||||
|
await utils.closeAllEditors();
|
||||||
|
utils.disposeAll(disposables);
|
||||||
|
disposables.length = 0;
|
||||||
|
|
||||||
|
for (let doc of vscode.notebook.notebookDocuments) {
|
||||||
|
assert.strictEqual(doc.isDirty, false, doc.uri.toString());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
suiteSetup(function () {
|
||||||
|
disposables.push(vscode.notebook.registerNotebookContentProvider('notebook.nbdtest', contentProvider));
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
test('showNotebookDocment', async function () {
|
||||||
|
|
||||||
|
const count1 = vscode.notebook.notebookDocuments.length;
|
||||||
|
|
||||||
|
const p = utils.asPromise(vscode.notebook.onDidOpenNotebookDocument);
|
||||||
|
const uri = await utils.createRandomFile(undefined, undefined, '.nbdtest');
|
||||||
|
|
||||||
|
const editor = await vscode.window.showNotebookDocument(uri);
|
||||||
|
assert.strictEqual(uri.toString(), editor.document.uri.toString());
|
||||||
|
|
||||||
|
const event = await p;
|
||||||
|
assert.strictEqual(event.uri.toString(), uri.toString());
|
||||||
|
|
||||||
|
const count2 = vscode.notebook.notebookDocuments.length;
|
||||||
|
assert.strictEqual(count1 + 1, count2);
|
||||||
|
|
||||||
|
});
|
||||||
|
});
|
3
src/vs/vscode.proposed.d.ts
vendored
3
src/vs/vscode.proposed.d.ts
vendored
|
@ -1447,7 +1447,8 @@ declare module 'vscode' {
|
||||||
export const onDidChangeActiveNotebookEditor: Event<NotebookEditor | undefined>;
|
export const onDidChangeActiveNotebookEditor: Event<NotebookEditor | undefined>;
|
||||||
export const onDidChangeNotebookEditorSelection: Event<NotebookEditorSelectionChangeEvent>;
|
export const onDidChangeNotebookEditorSelection: Event<NotebookEditorSelectionChangeEvent>;
|
||||||
export const onDidChangeNotebookEditorVisibleRanges: Event<NotebookEditorVisibleRangesChangeEvent>;
|
export const onDidChangeNotebookEditorVisibleRanges: Event<NotebookEditorVisibleRangesChangeEvent>;
|
||||||
// TODO@API add overload for just a URI
|
|
||||||
|
export function showNotebookDocument(uri: Uri, options?: NotebookDocumentShowOptions): Thenable<NotebookEditor>;
|
||||||
export function showNotebookDocument(document: NotebookDocument, options?: NotebookDocumentShowOptions): Thenable<NotebookEditor>;
|
export function showNotebookDocument(document: NotebookDocument, options?: NotebookDocumentShowOptions): Thenable<NotebookEditor>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -702,9 +702,9 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I
|
||||||
checkProposedApiEnabled(extension);
|
checkProposedApiEnabled(extension);
|
||||||
return extHostNotebook.onDidChangeNotebookEditorVisibleRanges(listener, thisArgs, disposables);
|
return extHostNotebook.onDidChangeNotebookEditorVisibleRanges(listener, thisArgs, disposables);
|
||||||
},
|
},
|
||||||
showNotebookDocument(document, options?) {
|
showNotebookDocument(uriOrDocument, options?) {
|
||||||
checkProposedApiEnabled(extension);
|
checkProposedApiEnabled(extension);
|
||||||
return extHostNotebook.showNotebookDocument(document, options);
|
return extHostNotebook.showNotebookDocument(uriOrDocument, options);
|
||||||
},
|
},
|
||||||
registerExternalUriOpener(id: string, opener: vscode.ExternalUriOpener, metadata: vscode.ExternalUriOpenerMetadata) {
|
registerExternalUriOpener(id: string, opener: vscode.ExternalUriOpener, metadata: vscode.ExternalUriOpenerMetadata) {
|
||||||
checkProposedApiEnabled(extension);
|
checkProposedApiEnabled(extension);
|
||||||
|
|
|
@ -408,7 +408,12 @@ export class ExtHostNotebookController implements ExtHostNotebookShape {
|
||||||
return callback(provider, document);
|
return callback(provider, document);
|
||||||
}
|
}
|
||||||
|
|
||||||
async showNotebookDocument(notebookDocument: vscode.NotebookDocument, options?: vscode.NotebookDocumentShowOptions): Promise<vscode.NotebookEditor> {
|
async showNotebookDocument(notebookOrUri: vscode.NotebookDocument | URI, options?: vscode.NotebookDocumentShowOptions): Promise<vscode.NotebookEditor> {
|
||||||
|
|
||||||
|
if (URI.isUri(notebookOrUri)) {
|
||||||
|
notebookOrUri = await this.openNotebookDocument(notebookOrUri);
|
||||||
|
}
|
||||||
|
|
||||||
let resolvedOptions: INotebookDocumentShowOptions;
|
let resolvedOptions: INotebookDocumentShowOptions;
|
||||||
if (typeof options === 'object') {
|
if (typeof options === 'object') {
|
||||||
resolvedOptions = {
|
resolvedOptions = {
|
||||||
|
@ -423,7 +428,7 @@ export class ExtHostNotebookController implements ExtHostNotebookShape {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
const editorId = await this._proxy.$tryShowNotebookDocument(notebookDocument.uri, notebookDocument.viewType, resolvedOptions);
|
const editorId = await this._proxy.$tryShowNotebookDocument(notebookOrUri.uri, notebookOrUri.viewType, resolvedOptions);
|
||||||
const editor = editorId && this._editors.get(editorId)?.editor;
|
const editor = editorId && this._editors.get(editorId)?.editor;
|
||||||
|
|
||||||
if (editor) {
|
if (editor) {
|
||||||
|
@ -431,9 +436,9 @@ export class ExtHostNotebookController implements ExtHostNotebookShape {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (editorId) {
|
if (editorId) {
|
||||||
throw new Error(`Could NOT open editor for "${notebookDocument.toString()}" because another editor opened in the meantime.`);
|
throw new Error(`Could NOT open editor for "${notebookOrUri.toString()}" because another editor opened in the meantime.`);
|
||||||
} else {
|
} else {
|
||||||
throw new Error(`Could NOT open editor for "${notebookDocument.toString()}".`);
|
throw new Error(`Could NOT open editor for "${notebookOrUri.toString()}".`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue