some 💄, some API todos

This commit is contained in:
Johannes Rieken 2021-02-12 17:54:26 +01:00
parent c83064b982
commit 52f633d19c
4 changed files with 24 additions and 2 deletions

View file

@ -17,7 +17,7 @@ vscode.workspace.registerFileSystemProvider(testFs.scheme, testFs, { isCaseSensi
export async function createRandomFile(contents = '', dir: vscode.Uri | undefined = undefined, ext = ''): Promise<vscode.Uri> {
let fakeFile: vscode.Uri;
if (dir) {
assert.equal(dir.scheme, testFs.scheme);
assert.strictEqual(dir.scheme, testFs.scheme);
fakeFile = dir.with({ path: dir.path + '/' + rndName() + ext });
} else {
fakeFile = vscode.Uri.parse(`${testFs.scheme}:/${rndName() + ext}`);
@ -117,3 +117,19 @@ export function assertNoRpcFromEntry(entry: [obj: any, name: string]) {
assert.strictEqual(rpcPaths.length, 0, rpcPaths.join('\n'));
assert.strictEqual(proxyPaths.length, 0, proxyPaths.join('\n')); // happens...
}
export async function asPromise<T>(event: vscode.Event<T>, timeout = 1000): Promise<T> {
return new Promise<T>((resolve, reject) => {
const handle = setTimeout(() => {
sub.dispose();
reject(new Error('asPromise TIMEOUT reached'));
}, timeout);
const sub = event(e => {
clearTimeout(handle);
sub.dispose();
resolve(e);
});
});
}

View file

@ -1105,6 +1105,7 @@ declare module 'vscode' {
readonly uri: Uri;
readonly version: number;
readonly fileName: string;
// todo@API should we really expose this?
readonly viewType: string;
readonly isDirty: boolean;
readonly isUntitled: boolean;
@ -1305,6 +1306,8 @@ declare module 'vscode' {
export namespace notebook {
// todo@API should we really support to pass the viewType? We do NOT support
// to open the same file with different viewTypes at the same time
export function openNotebookDocument(uri: Uri, viewType?: string): Thenable<NotebookDocument>;
export const onDidOpenNotebookDocument: Event<NotebookDocument>;
export const onDidCloseNotebookDocument: Event<NotebookDocument>;
@ -1330,6 +1333,7 @@ declare module 'vscode' {
export const onDidChangeActiveNotebookEditor: Event<NotebookEditor | undefined>;
export const onDidChangeNotebookEditorSelection: Event<NotebookEditorSelectionChangeEvent>;
export const onDidChangeNotebookEditorVisibleRanges: Event<NotebookEditorVisibleRangesChangeEvent>;
// TODO@API add overload for just a URI
export function showNotebookDocument(document: NotebookDocument, options?: NotebookDocumentShowOptions): Thenable<NotebookEditor>;
}

View file

@ -501,7 +501,6 @@ export class MainThreadNotebooks extends Disposable implements MainThreadNoteboo
const disposable = this._notebookService.registerNotebookController(viewType, extension, controller);
this._notebookProviders.set(viewType, { controller, disposable });
return;
}
async $updateNotebookProviderOptions(viewType: string, options?: { transientOutputs: boolean; transientMetadata: TransientMetadata; }): Promise<void> {

View file

@ -680,6 +680,9 @@ export class NotebookService extends Disposable implements INotebookService, ICu
}
registerNotebookController(viewType: string, extensionData: NotebookExtensionDescription, controller: IMainNotebookController): IDisposable {
if (this._notebookProviders.has(viewType)) {
throw new Error(`notebook controller for viewtype '${viewType}' already exists`);
}
this._notebookProviders.set(viewType, { extensionData, controller });
if (controller.viewOptions && !this.notebookProviderInfoStore.get(viewType)) {