Merge pull request #116443 from microsoft/joh/kernelLanguages
Add support for kernel#supportedLanguages
This commit is contained in:
commit
215cd17276
22 changed files with 130 additions and 190 deletions
|
@ -1468,7 +1468,13 @@ suite('regression', () => {
|
|||
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor !== undefined, true, 'notebook first');
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor!.selection?.document.getText(), 'var abc = 0;');
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor!.selection?.language, 'typescript');
|
||||
|
||||
// todo@jrieken enforce a kernel (how) and test that its language is picked
|
||||
// assert.strictEqual(vscode.window.activeNotebookEditor!.selection?.language, 'typescript');
|
||||
|
||||
// no kernel -> no default language
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor!.kernel, undefined);
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor!.selection?.language, 'plaintext');
|
||||
|
||||
await vscode.commands.executeCommand('vscode.openWith', resource, 'default');
|
||||
assert.strictEqual(vscode.window.activeTextEditor?.document.uri.path, resource.path);
|
||||
|
|
|
@ -23,7 +23,6 @@ export function smokeTestActivate(context: vscode.ExtensionContext): any {
|
|||
context.subscriptions.push(vscode.notebook.registerNotebookContentProvider('notebookSmokeTest', {
|
||||
openNotebook: async (_resource: vscode.Uri) => {
|
||||
const dto: vscode.NotebookData = {
|
||||
languages: ['typescript'],
|
||||
metadata: {},
|
||||
cells: [
|
||||
{
|
||||
|
|
|
@ -10,17 +10,15 @@ export function activate(context: vscode.ExtensionContext): any {
|
|||
smokeTestActivate(context);
|
||||
|
||||
context.subscriptions.push(vscode.notebook.registerNotebookContentProvider('notebookCoreTest', {
|
||||
openNotebook: async (_resource: vscode.Uri) => {
|
||||
openNotebook: async (_resource: vscode.Uri): Promise<vscode.NotebookData> => {
|
||||
if (/.*empty\-.*\.vsctestnb$/.test(_resource.path)) {
|
||||
return {
|
||||
languages: ['typescript'],
|
||||
metadata: {},
|
||||
cells: []
|
||||
};
|
||||
}
|
||||
|
||||
const dto: vscode.NotebookData = {
|
||||
languages: ['typescript'],
|
||||
metadata: {
|
||||
custom: { testMetadata: false }
|
||||
},
|
||||
|
@ -36,7 +34,6 @@ export function activate(context: vscode.ExtensionContext): any {
|
|||
}
|
||||
]
|
||||
};
|
||||
|
||||
return dto;
|
||||
},
|
||||
resolveNotebook: async (_document: vscode.NotebookDocument) => {
|
||||
|
@ -60,6 +57,7 @@ export function activate(context: vscode.ExtensionContext): any {
|
|||
id: 'mainKernel',
|
||||
label: 'Notebook Test Kernel',
|
||||
isPreferred: true,
|
||||
supportedLanguages: ['typescript'],
|
||||
executeAllCells: async (_document: vscode.NotebookDocument) => {
|
||||
const edit = new vscode.WorkspaceEdit();
|
||||
|
||||
|
@ -98,6 +96,7 @@ export function activate(context: vscode.ExtensionContext): any {
|
|||
id: 'secondaryKernel',
|
||||
label: 'Notebook Secondary Test Kernel',
|
||||
isPreferred: false,
|
||||
supportedLanguages: ['typescript'],
|
||||
executeAllCells: async (_document: vscode.NotebookDocument) => {
|
||||
const edit = new vscode.WorkspaceEdit();
|
||||
edit.replaceNotebookCellOutput(_document.uri, 0, [new vscode.NotebookCellOutput([
|
||||
|
|
21
src/vs/vscode.proposed.d.ts
vendored
21
src/vs/vscode.proposed.d.ts
vendored
|
@ -1089,11 +1089,6 @@ declare module 'vscode' {
|
|||
* When false, insecure outputs like HTML, JavaScript, SVG will not be rendered.
|
||||
*/
|
||||
trusted?: boolean;
|
||||
|
||||
/**
|
||||
* Languages the document supports
|
||||
*/
|
||||
languages?: string[];
|
||||
}
|
||||
|
||||
export interface NotebookDocumentContentOptions {
|
||||
|
@ -1119,10 +1114,6 @@ declare module 'vscode' {
|
|||
readonly isUntitled: boolean;
|
||||
readonly cells: ReadonlyArray<NotebookCell>;
|
||||
readonly contentOptions: NotebookDocumentContentOptions;
|
||||
// todo@API
|
||||
// - move to kernel -> control runnable state of a cell
|
||||
// - remove from this type
|
||||
languages: string[];
|
||||
readonly metadata: NotebookDocumentMetadata;
|
||||
}
|
||||
|
||||
|
@ -1267,7 +1258,6 @@ declare module 'vscode' {
|
|||
|
||||
export interface NotebookData {
|
||||
readonly cells: NotebookCellData[];
|
||||
readonly languages: string[];
|
||||
readonly metadata: NotebookDocumentMetadata;
|
||||
}
|
||||
|
||||
|
@ -1592,10 +1582,13 @@ declare module 'vscode' {
|
|||
isPreferred?: boolean;
|
||||
preloads?: Uri[];
|
||||
|
||||
// todo@API
|
||||
// languages supported by kernel
|
||||
// first is preferred
|
||||
// languages: string[];
|
||||
// TODO@API control runnable state of cell
|
||||
/**
|
||||
* languages supported by kernel
|
||||
* - first is preferred
|
||||
* - `undefined` means all languages available in the editor
|
||||
*/
|
||||
supportedLanguages?: string[];
|
||||
|
||||
// @roblourens
|
||||
// todo@API change to `executeCells(document: NotebookDocument, cells: NotebookCellRange[], context:{isWholeNotebooke: boolean}, token: CancelationToken): void;`
|
||||
|
|
|
@ -23,7 +23,7 @@ import { INotebookEditor } from 'vs/workbench/contrib/notebook/browser/notebookB
|
|||
import { NotebookCellTextModel } from 'vs/workbench/contrib/notebook/common/model/notebookCellTextModel';
|
||||
import { NotebookTextModel } from 'vs/workbench/contrib/notebook/common/model/notebookTextModel';
|
||||
import { INotebookCellStatusBarService } from 'vs/workbench/contrib/notebook/common/notebookCellStatusBarService';
|
||||
import { ACCESSIBLE_NOTEBOOK_DISPLAY_ORDER, CellEditType, DisplayOrderKey, ICellEditOperation, ICellRange, IEditor, IMainCellDto, INotebookDecorationRenderOptions, INotebookDocumentFilter, INotebookEditorModel, INotebookExclusiveDocumentFilter, NotebookCellsChangeType, NOTEBOOK_DISPLAY_ORDER, TransientMetadata } from 'vs/workbench/contrib/notebook/common/notebookCommon';
|
||||
import { ACCESSIBLE_NOTEBOOK_DISPLAY_ORDER, CellEditType, DisplayOrderKey, ICellEditOperation, ICellRange, IEditor, IMainCellDto, INotebookDecorationRenderOptions, INotebookDocumentFilter, INotebookEditorModel, INotebookExclusiveDocumentFilter, INotebookKernel, NotebookCellsChangeType, NOTEBOOK_DISPLAY_ORDER, TransientMetadata } from 'vs/workbench/contrib/notebook/common/notebookCommon';
|
||||
import { INotebookEditorModelResolverService } from 'vs/workbench/contrib/notebook/common/notebookEditorModelResolverService';
|
||||
import { IMainNotebookController, INotebookService } from 'vs/workbench/contrib/notebook/common/notebookService';
|
||||
import { IEditorGroup, IEditorGroupsService, preferredSideBySideGroupDirection } from 'vs/workbench/services/editor/common/editorGroupsService';
|
||||
|
@ -140,6 +140,21 @@ export class MainThreadNotebooks extends Disposable implements MainThreadNoteboo
|
|||
this.registerListeners();
|
||||
}
|
||||
|
||||
dispose(): void {
|
||||
super.dispose();
|
||||
|
||||
// remove all notebook providers
|
||||
for (let item of this._notebookProviders.values()) {
|
||||
item.disposable.dispose();
|
||||
}
|
||||
|
||||
// remove all kernel providers
|
||||
for (let item of this._notebookKernelProviders.values()) {
|
||||
item.emitter.dispose();
|
||||
item.provider.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
async $tryApplyEdits(_viewType: string, resource: UriComponents, modelVersionId: number, cellEdits: ICellEditOperation[]): Promise<boolean> {
|
||||
const textModel = this._notebookService.getNotebookTextModel(URI.from(resource));
|
||||
if (!textModel) {
|
||||
|
@ -445,7 +460,6 @@ export class MainThreadNotebooks extends Disposable implements MainThreadNoteboo
|
|||
viewOptions: options.viewOptions,
|
||||
reloadNotebook: async (mainthreadTextModel: NotebookTextModel) => {
|
||||
const data = await this._proxy.$resolveNotebookData(viewType, mainthreadTextModel.uri);
|
||||
mainthreadTextModel.updateLanguages(data.languages);
|
||||
mainthreadTextModel.metadata = data.metadata;
|
||||
mainthreadTextModel.transientOptions = contentOptions;
|
||||
|
||||
|
@ -512,38 +526,47 @@ export class MainThreadNotebooks extends Disposable implements MainThreadNoteboo
|
|||
async $registerNotebookKernelProvider(extension: NotebookExtensionDescription, handle: number, documentFilter: INotebookDocumentFilter): Promise<void> {
|
||||
const emitter = new Emitter<URI | undefined>();
|
||||
const that = this;
|
||||
|
||||
const provider = this._notebookService.registerNotebookKernelProvider({
|
||||
providerExtensionId: extension.id.value,
|
||||
providerDescription: extension.description,
|
||||
onDidChangeKernels: emitter.event,
|
||||
selector: documentFilter,
|
||||
provideKernels: async (uri: URI, token: CancellationToken) => {
|
||||
const kernels = await that._proxy.$provideNotebookKernels(handle, uri, token);
|
||||
return kernels.map(kernel => {
|
||||
return {
|
||||
...kernel,
|
||||
providerHandle: handle
|
||||
};
|
||||
});
|
||||
},
|
||||
resolveKernel: (editorId: string, uri: URI, kernelId: string, token: CancellationToken) => {
|
||||
return that._proxy.$resolveNotebookKernel(handle, editorId, uri, kernelId, token);
|
||||
},
|
||||
executeNotebook: (uri: URI, kernelId: string, cellHandle: number | undefined) => {
|
||||
this.logService.debug('MainthreadNotebooks.registerNotebookKernelProvider#executeNotebook', uri.path, kernelId, cellHandle);
|
||||
return that._proxy.$executeNotebookKernelFromProvider(handle, uri, kernelId, cellHandle);
|
||||
},
|
||||
cancelNotebook: (uri: URI, kernelId: string, cellHandle: number | undefined) => {
|
||||
this.logService.debug('MainthreadNotebooks.registerNotebookKernelProvider#cancelNotebook', uri.path, kernelId, cellHandle);
|
||||
return that._proxy.$cancelNotebookKernelFromProvider(handle, uri, kernelId, cellHandle);
|
||||
},
|
||||
});
|
||||
this._notebookKernelProviders.set(handle, {
|
||||
extension,
|
||||
emitter,
|
||||
provider
|
||||
});
|
||||
provideKernels: async (uri: URI, token: CancellationToken): Promise<INotebookKernel[]> => {
|
||||
const result: INotebookKernel[] = [];
|
||||
const kernelsDto = await that._proxy.$provideNotebookKernels(handle, uri, token);
|
||||
for (const dto of kernelsDto) {
|
||||
|
||||
result.push({
|
||||
id: dto.id,
|
||||
friendlyId: dto.friendlyId,
|
||||
label: dto.label,
|
||||
extension: dto.extension,
|
||||
extensionLocation: URI.revive(dto.extensionLocation),
|
||||
providerHandle: dto.providerHandle,
|
||||
description: dto.description,
|
||||
detail: dto.detail,
|
||||
isPreferred: dto.isPreferred,
|
||||
preloads: dto.preloads?.map(u => URI.revive(u)),
|
||||
supportedLanguages: dto.supportedLanguages,
|
||||
resolve: (uri: URI, editorId: string, token: CancellationToken): Promise<void> => {
|
||||
this.logService.debug('MainthreadNotebooks.resolveNotebookKernel', uri.path, dto.friendlyId);
|
||||
return this._proxy.$resolveNotebookKernel(handle, editorId, uri, dto.friendlyId, token);
|
||||
},
|
||||
executeNotebookCell: (uri: URI, cellHandle: number | undefined): Promise<void> => {
|
||||
this.logService.debug('MainthreadNotebooks.executeNotebookCell', uri.path, dto.friendlyId, cellHandle);
|
||||
return this._proxy.$executeNotebookKernelFromProvider(handle, uri, dto.friendlyId, cellHandle);
|
||||
},
|
||||
cancelNotebookCell: (uri: URI, cellHandle: number | undefined): Promise<void> => {
|
||||
this.logService.debug('MainthreadNotebooks.cancelNotebookCell', uri.path, dto.friendlyId, cellHandle);
|
||||
return this._proxy.$cancelNotebookKernelFromProvider(handle, uri, dto.friendlyId, cellHandle);
|
||||
}
|
||||
});
|
||||
}
|
||||
return result;
|
||||
}
|
||||
});
|
||||
this._notebookKernelProviders.set(handle, { extension, emitter, provider });
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -563,12 +586,6 @@ export class MainThreadNotebooks extends Disposable implements MainThreadNoteboo
|
|||
entry?.emitter.fire(uriComponents ? URI.revive(uriComponents) : undefined);
|
||||
}
|
||||
|
||||
async $updateNotebookLanguages(viewType: string, resource: UriComponents, languages: string[]): Promise<void> {
|
||||
this.logService.debug('MainThreadNotebooks#updateNotebookLanguages', resource.path, languages);
|
||||
const textModel = this._notebookService.getNotebookTextModel(URI.from(resource));
|
||||
textModel?.updateLanguages(languages);
|
||||
}
|
||||
|
||||
async $postMessage(editorId: string, forRendererId: string | undefined, value: any): Promise<boolean> {
|
||||
const editor = this._notebookService.getNotebookEditor(editorId) as INotebookEditor | undefined;
|
||||
if (editor?.isNotebookEditor) {
|
||||
|
|
|
@ -51,7 +51,7 @@ import { TunnelDto } from 'vs/workbench/api/common/extHostTunnelService';
|
|||
import { TunnelCreationOptions, TunnelProviderFeatures, TunnelOptions } from 'vs/platform/remote/common/tunnel';
|
||||
import { Timeline, TimelineChangeEvent, TimelineOptions, TimelineProviderDescriptor, InternalTimelineOptions } from 'vs/workbench/contrib/timeline/common/timeline';
|
||||
import { revive } from 'vs/base/common/marshalling';
|
||||
import { INotebookDisplayOrder, NotebookCellMetadata, NotebookDocumentMetadata, ICellEditOperation, NotebookCellsChangedEventDto, NotebookDataDto, IMainCellDto, INotebookDocumentFilter, INotebookKernelInfoDto2, TransientMetadata, INotebookCellStatusBarEntry, ICellRange, INotebookDecorationRenderOptions, INotebookExclusiveDocumentFilter, IOutputDto } from 'vs/workbench/contrib/notebook/common/notebookCommon';
|
||||
import { INotebookDisplayOrder, NotebookCellMetadata, NotebookDocumentMetadata, ICellEditOperation, NotebookCellsChangedEventDto, NotebookDataDto, IMainCellDto, INotebookDocumentFilter, TransientMetadata, INotebookCellStatusBarEntry, ICellRange, INotebookDecorationRenderOptions, INotebookExclusiveDocumentFilter, IOutputDto } from 'vs/workbench/contrib/notebook/common/notebookCommon';
|
||||
import { CallHierarchyItem } from 'vs/workbench/contrib/callHierarchy/common/callHierarchy';
|
||||
import { Dto } from 'vs/base/common/types';
|
||||
import { ISerializableEnvironmentVariableCollection } from 'vs/workbench/contrib/terminal/common/environmentVariable';
|
||||
|
@ -789,7 +789,6 @@ export interface MainThreadNotebookShape extends IDisposable {
|
|||
$unregisterNotebookKernelProvider(handle: number): Promise<void>;
|
||||
$onNotebookKernelChange(handle: number, uri: UriComponents | undefined): void;
|
||||
$tryApplyEdits(viewType: string, resource: UriComponents, modelVersionId: number, edits: ICellEditOperation[]): Promise<boolean>;
|
||||
$updateNotebookLanguages(viewType: string, resource: UriComponents, languages: string[]): Promise<void>;
|
||||
$postMessage(editorId: string, forRendererId: string | undefined, value: any): Promise<boolean>;
|
||||
$setStatusBarEntry(id: number, statusBarEntry: INotebookCellStatusBarEntryDto): Promise<void>;
|
||||
$tryOpenDocument(uriComponents: UriComponents, viewType?: string): Promise<URI>;
|
||||
|
@ -1777,6 +1776,20 @@ export interface INotebookDocumentsAndEditorsDelta {
|
|||
visibleEditors?: string[];
|
||||
}
|
||||
|
||||
export interface INotebookKernelInfoDto2 {
|
||||
id?: string;
|
||||
friendlyId: string;
|
||||
label: string;
|
||||
extension: ExtensionIdentifier;
|
||||
extensionLocation: UriComponents;
|
||||
providerHandle?: number;
|
||||
description?: string;
|
||||
detail?: string;
|
||||
isPreferred?: boolean;
|
||||
preloads?: UriComponents[];
|
||||
supportedLanguages?: string[]
|
||||
}
|
||||
|
||||
export interface ExtHostNotebookShape {
|
||||
$resolveNotebookData(viewType: string, uri: UriComponents, backupId?: string): Promise<NotebookDataDto>;
|
||||
$resolveNotebookEditor(viewType: string, uri: UriComponents, editorId: string): Promise<void>;
|
||||
|
|
|
@ -9,7 +9,7 @@ import { Disposable, DisposableStore } from 'vs/base/common/lifecycle';
|
|||
import { URI, UriComponents } from 'vs/base/common/uri';
|
||||
import * as UUID from 'vs/base/common/uuid';
|
||||
import { IExtensionDescription } from 'vs/platform/extensions/common/extensions';
|
||||
import { ExtHostNotebookShape, ICommandDto, IMainContext, IModelAddedData, INotebookDocumentPropertiesChangeData, INotebookDocumentsAndEditorsDelta, INotebookDocumentShowOptions, INotebookEditorPropertiesChangeData, MainContext, MainThreadNotebookShape } from 'vs/workbench/api/common/extHost.protocol';
|
||||
import { ExtHostNotebookShape, ICommandDto, IMainContext, IModelAddedData, INotebookDocumentPropertiesChangeData, INotebookDocumentsAndEditorsDelta, INotebookDocumentShowOptions, INotebookEditorPropertiesChangeData, INotebookKernelInfoDto2, MainContext, MainThreadNotebookShape } from 'vs/workbench/api/common/extHost.protocol';
|
||||
import { ILogService } from 'vs/platform/log/common/log';
|
||||
import { CommandsConverter, ExtHostCommands } from 'vs/workbench/api/common/extHostCommands';
|
||||
import { ExtHostDocumentsAndEditors } from 'vs/workbench/api/common/extHostDocumentsAndEditors';
|
||||
|
@ -17,7 +17,7 @@ import { IExtensionStoragePaths } from 'vs/workbench/api/common/extHostStoragePa
|
|||
import * as typeConverters from 'vs/workbench/api/common/extHostTypeConverters';
|
||||
import * as extHostTypes from 'vs/workbench/api/common/extHostTypes';
|
||||
import { asWebviewUri, WebviewInitData } from 'vs/workbench/api/common/shared/webview';
|
||||
import { CellStatusbarAlignment, CellUri, INotebookCellStatusBarEntry, INotebookDisplayOrder, INotebookExclusiveDocumentFilter, INotebookKernelInfoDto2, NotebookCellMetadata, NotebookCellsChangedEventDto, NotebookCellsChangeType, NotebookDataDto, notebookDocumentMetadataDefaults } from 'vs/workbench/contrib/notebook/common/notebookCommon';
|
||||
import { CellStatusbarAlignment, CellUri, INotebookCellStatusBarEntry, INotebookDisplayOrder, INotebookExclusiveDocumentFilter, NotebookCellMetadata, NotebookCellsChangedEventDto, NotebookCellsChangeType, NotebookDataDto, notebookDocumentMetadataDefaults } from 'vs/workbench/contrib/notebook/common/notebookCommon';
|
||||
import * as vscode from 'vscode';
|
||||
import { ResourceMap } from 'vs/base/common/map';
|
||||
import { ExtHostCell, ExtHostNotebookDocument } from './extHostNotebookDocument';
|
||||
|
@ -126,7 +126,8 @@ export class ExtHostNotebookKernelProviderAdapter extends Disposable {
|
|||
description: kernel.description,
|
||||
detail: kernel.detail,
|
||||
isPreferred: kernel.isPreferred,
|
||||
preloads: kernel.preloads
|
||||
preloads: kernel.preloads,
|
||||
supportedLanguages: kernel.supportedLanguages
|
||||
};
|
||||
});
|
||||
|
||||
|
@ -453,7 +454,6 @@ export class ExtHostNotebookController implements ExtHostNotebookShape, ExtHostN
|
|||
...notebookDocumentMetadataDefaults,
|
||||
...data.metadata
|
||||
},
|
||||
languages: data.languages,
|
||||
cells: data.cells.map(typeConverters.NotebookCellData.from),
|
||||
};
|
||||
}
|
||||
|
@ -706,7 +706,7 @@ export class ExtHostNotebookController implements ExtHostNotebookShape, ExtHostN
|
|||
}
|
||||
const that = this;
|
||||
|
||||
const document = new ExtHostNotebookDocument(this._proxy, this._documentsAndEditors, {
|
||||
const document = new ExtHostNotebookDocument(this._documentsAndEditors, {
|
||||
emitModelChange(event: vscode.NotebookCellsChangeEvent): void {
|
||||
that._onDidChangeNotebookCells.fire(event);
|
||||
},
|
||||
|
|
|
@ -10,7 +10,7 @@ import { Schemas } from 'vs/base/common/network';
|
|||
import { joinPath } from 'vs/base/common/resources';
|
||||
import { ISplice } from 'vs/base/common/sequence';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { CellKind, INotebookDocumentPropertiesChangeData, MainThreadNotebookShape } from 'vs/workbench/api/common/extHost.protocol';
|
||||
import { CellKind, INotebookDocumentPropertiesChangeData } from 'vs/workbench/api/common/extHost.protocol';
|
||||
import { ExtHostDocumentsAndEditors, IExtHostModelAddedData } from 'vs/workbench/api/common/extHostDocumentsAndEditors';
|
||||
import * as extHostTypeConverters from 'vs/workbench/api/common/extHostTypeConverters';
|
||||
import { IMainCellDto, IOutputDto, NotebookCellMetadata, NotebookCellsChangedEventDto, NotebookCellsChangeType, NotebookCellsSplice2, notebookDocumentMetadataDefaults } from 'vs/workbench/contrib/notebook/common/notebookCommon';
|
||||
|
@ -144,10 +144,8 @@ export class ExtHostNotebookDocument extends Disposable {
|
|||
private _backupCounter = 1;
|
||||
private _backup?: vscode.NotebookDocumentBackup;
|
||||
private _disposed = false;
|
||||
private _languages: string[] = [];
|
||||
|
||||
constructor(
|
||||
private readonly _proxy: MainThreadNotebookShape,
|
||||
private readonly _documentsAndEditors: ExtHostDocumentsAndEditors,
|
||||
private readonly _emitter: INotebookEventEmitter,
|
||||
private readonly _viewType: string,
|
||||
|
@ -177,8 +175,6 @@ export class ExtHostNotebookDocument extends Disposable {
|
|||
get isDirty() { return that._isDirty; },
|
||||
get isUntitled() { return that.uri.scheme === Schemas.untitled; },
|
||||
get cells(): ReadonlyArray<vscode.NotebookCell> { return that._cells.map(cell => cell.cell); },
|
||||
get languages() { return that._languages; },
|
||||
set languages(value: string[]) { that._trySetLanguages(value); },
|
||||
get metadata() { return that._metadata; },
|
||||
set metadata(_value: Required<vscode.NotebookDocumentMetadata>) { throw new Error('Use WorkspaceEdit to update metadata.'); },
|
||||
get contentOptions() { return that._contentOptions; }
|
||||
|
@ -187,11 +183,6 @@ export class ExtHostNotebookDocument extends Disposable {
|
|||
return this._notebook;
|
||||
}
|
||||
|
||||
private _trySetLanguages(newLanguages: string[]) {
|
||||
this._languages = newLanguages;
|
||||
this._proxy.$updateNotebookLanguages(this._viewType, this.uri, this._languages);
|
||||
}
|
||||
|
||||
getNewBackupUri(): URI {
|
||||
if (!this._storagePath) {
|
||||
throw new Error('Backup requires a valid storage path');
|
||||
|
|
|
@ -2896,7 +2896,6 @@ export class NotebookDocumentMetadata {
|
|||
readonly custom: { [key: string]: any; } = {},
|
||||
readonly runState: NotebookRunState = NotebookRunState.Idle,
|
||||
readonly trusted: boolean = true,
|
||||
readonly languages: string[] = [],
|
||||
) { }
|
||||
|
||||
with(change: Partial<Omit<NotebookDocumentMetadata, 'with'>>) {
|
||||
|
@ -2909,8 +2908,7 @@ export class NotebookDocumentMetadata {
|
|||
change.displayOrder ?? this.displayOrder,
|
||||
change.custom ?? this.custom,
|
||||
change.runState ?? this.runState,
|
||||
change.trusted ?? this.trusted,
|
||||
change.languages ?? this.languages,
|
||||
change.trusted ?? this.trusted
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1625,7 +1625,7 @@ export class ChangeCellLanguageAction extends NotebookCellAction {
|
|||
const quickInputService = accessor.get(IQuickInputService);
|
||||
|
||||
const providerLanguages = [
|
||||
...(context.notebookEditor.activeKernel?.supportedLanguages ?? context.notebookEditor.viewModel.notebookDocument.resolvedLanguages),
|
||||
...(context.notebookEditor.activeKernel?.supportedLanguages ?? modeService.getRegisteredModes()),
|
||||
'markdown'
|
||||
];
|
||||
providerLanguages.forEach(languageId => {
|
||||
|
@ -2108,7 +2108,7 @@ CommandsRegistry.registerCommand('_resolveNotebookKernels', async (accessor, arg
|
|||
const notebookService = accessor.get<INotebookService>(INotebookService);
|
||||
const uri = URI.revive(args.uri as UriComponents);
|
||||
const source = new CancellationTokenSource();
|
||||
const kernels = await notebookService.getContributedNotebookKernels(args.viewType, uri, source.token);
|
||||
const kernels = await notebookService.getNotebookKernels(args.viewType, uri, source.token);
|
||||
source.dispose();
|
||||
|
||||
return kernels.map(provider => ({
|
||||
|
|
|
@ -14,7 +14,7 @@ import { INotebookEditor, NOTEBOOK_IS_ACTIVE_EDITOR } from 'vs/workbench/contrib
|
|||
import { INotebookService } from 'vs/workbench/contrib/notebook/common/notebookService';
|
||||
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
|
||||
import { CancellationTokenSource } from 'vs/base/common/cancellation';
|
||||
import { INotebookKernelInfo2 } from 'vs/workbench/contrib/notebook/common/notebookCommon';
|
||||
import { INotebookKernel } from 'vs/workbench/contrib/notebook/common/notebookCommon';
|
||||
import { Extensions as WorkbenchExtensions, IWorkbenchContributionsRegistry, IWorkbenchContribution } from 'vs/workbench/common/contributions';
|
||||
import { LifecyclePhase } from 'vs/workbench/services/lifecycle/common/lifecycle';
|
||||
import { Disposable, DisposableStore, MutableDisposable } from 'vs/base/common/lifecycle';
|
||||
|
@ -213,7 +213,7 @@ export class KernelStatus extends Disposable implements IWorkbenchContribution {
|
|||
}
|
||||
}
|
||||
|
||||
showKernelStatus(kernel: INotebookKernelInfo2 | undefined) {
|
||||
showKernelStatus(kernel: INotebookKernel | undefined) {
|
||||
this.kernelInfoElement.value = this._statusbarService.addEntry({
|
||||
text: kernel ? kernel.label : 'Choose Kernel',
|
||||
ariaLabel: kernel ? kernel.label : 'Choose Kernel',
|
||||
|
|
|
@ -22,7 +22,7 @@ import { OutputRenderer } from 'vs/workbench/contrib/notebook/browser/view/outpu
|
|||
import { RunStateRenderer, TimerRenderer } from 'vs/workbench/contrib/notebook/browser/view/renderers/cellRenderer';
|
||||
import { CellViewModel, IModelDecorationsChangeAccessor, NotebookViewModel } from 'vs/workbench/contrib/notebook/browser/viewModel/notebookViewModel';
|
||||
import { NotebookCellTextModel } from 'vs/workbench/contrib/notebook/common/model/notebookCellTextModel';
|
||||
import { CellKind, NotebookCellMetadata, NotebookDocumentMetadata, IEditor, INotebookKernelInfo2, ICellRange, IOrderedMimeType, INotebookRendererInfo, ICellOutput, IOutputItemDto } from 'vs/workbench/contrib/notebook/common/notebookCommon';
|
||||
import { CellKind, NotebookCellMetadata, NotebookDocumentMetadata, IEditor, INotebookKernel, ICellRange, IOrderedMimeType, INotebookRendererInfo, ICellOutput, IOutputItemDto } from 'vs/workbench/contrib/notebook/common/notebookCommon';
|
||||
import { Webview } from 'vs/workbench/contrib/webview/browser/webview';
|
||||
import { NotebookTextModel } from 'vs/workbench/contrib/notebook/common/model/notebookTextModel';
|
||||
import { IMenu } from 'vs/platform/actions/common/actions';
|
||||
|
@ -338,7 +338,7 @@ export interface INotebookEditor extends IEditor, ICommonNotebookEditor {
|
|||
readonly onDidChangeModel: Event<NotebookTextModel | undefined>;
|
||||
readonly onDidFocusEditorWidget: Event<void>;
|
||||
readonly isNotebookEditor: boolean;
|
||||
activeKernel: INotebookKernelInfo2 | undefined;
|
||||
activeKernel: INotebookKernel | undefined;
|
||||
multipleKernelsAvailable: boolean;
|
||||
readonly onDidChangeAvailableKernels: Event<void>;
|
||||
readonly onDidChangeKernel: Event<void>;
|
||||
|
@ -384,7 +384,7 @@ export interface INotebookEditor extends IEditor, ICommonNotebookEditor {
|
|||
/**
|
||||
* Fetch the contributed kernels for this notebook
|
||||
*/
|
||||
beginComputeContributedKernels(): Promise<INotebookKernelInfo2[]>;
|
||||
beginComputeContributedKernels(): Promise<INotebookKernel[]>;
|
||||
|
||||
/**
|
||||
* Insert a new cell around `cell`
|
||||
|
|
|
@ -54,7 +54,7 @@ import { CodeCellViewModel } from 'vs/workbench/contrib/notebook/browser/viewMod
|
|||
import { NotebookEventDispatcher, NotebookLayoutChangedEvent } from 'vs/workbench/contrib/notebook/browser/viewModel/eventDispatcher';
|
||||
import { CellViewModel, IModelDecorationsChangeAccessor, INotebookEditorViewState, NotebookViewModel } from 'vs/workbench/contrib/notebook/browser/viewModel/notebookViewModel';
|
||||
import { NotebookTextModel } from 'vs/workbench/contrib/notebook/common/model/notebookTextModel';
|
||||
import { CellKind, CellToolbarLocKey, ICellRange, INotebookDecorationRenderOptions, INotebookKernelInfo2, NotebookCellRunState, NotebookRunState, ShowCellStatusBarKey } from 'vs/workbench/contrib/notebook/common/notebookCommon';
|
||||
import { CellKind, CellToolbarLocKey, ICellRange, INotebookDecorationRenderOptions, INotebookKernel, NotebookCellRunState, NotebookRunState, ShowCellStatusBarKey } from 'vs/workbench/contrib/notebook/common/notebookCommon';
|
||||
import { NotebookProviderInfo } from 'vs/workbench/contrib/notebook/common/notebookProvider';
|
||||
import { INotebookService } from 'vs/workbench/contrib/notebook/common/notebookService';
|
||||
import { editorGutterModifiedBackground } from 'vs/workbench/contrib/scm/browser/dirtydiffDecorator';
|
||||
|
@ -64,6 +64,7 @@ import { configureKernelIcon, errorStateIcon, successStateIcon } from 'vs/workbe
|
|||
import { debugIconStartForeground } from 'vs/workbench/contrib/debug/browser/debugColors';
|
||||
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
|
||||
import { extname } from 'vs/base/common/resources';
|
||||
import { IModeService } from 'vs/editor/common/services/modeService';
|
||||
import { MarkdownCellViewModel } from 'vs/workbench/contrib/notebook/browser/viewModel/markdownCellViewModel';
|
||||
|
||||
const $ = DOM.$;
|
||||
|
@ -150,20 +151,20 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor
|
|||
}
|
||||
|
||||
private _activeKernelExecuted: boolean = false;
|
||||
private _activeKernel: INotebookKernelInfo2 | undefined = undefined;
|
||||
private _activeKernel: INotebookKernel | undefined = undefined;
|
||||
private readonly _onDidChangeKernel = this._register(new Emitter<void>());
|
||||
readonly onDidChangeKernel: Event<void> = this._onDidChangeKernel.event;
|
||||
private readonly _onDidChangeAvailableKernels = this._register(new Emitter<void>());
|
||||
readonly onDidChangeAvailableKernels: Event<void> = this._onDidChangeAvailableKernels.event;
|
||||
|
||||
private _contributedKernelsComputePromise: CancelablePromise<INotebookKernelInfo2[]> | null = null;
|
||||
private _contributedKernelsComputePromise: CancelablePromise<INotebookKernel[]> | null = null;
|
||||
private _initialKernelComputationDone: boolean = false;
|
||||
|
||||
get activeKernel() {
|
||||
return this._activeKernel;
|
||||
}
|
||||
|
||||
set activeKernel(kernel: INotebookKernelInfo2 | undefined) {
|
||||
set activeKernel(kernel: INotebookKernel | undefined) {
|
||||
if (this._isDisposed) {
|
||||
return;
|
||||
}
|
||||
|
@ -257,7 +258,8 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor
|
|||
@IMenuService private readonly menuService: IMenuService,
|
||||
@IQuickInputService private readonly quickInputService: IQuickInputService,
|
||||
@IThemeService private readonly themeService: IThemeService,
|
||||
@ITelemetryService private readonly telemetryService: ITelemetryService
|
||||
@ITelemetryService private readonly telemetryService: ITelemetryService,
|
||||
@IModeService private readonly modeService: IModeService,
|
||||
) {
|
||||
super();
|
||||
this.isEmbedded = creationOptions.isEmbedded || false;
|
||||
|
@ -775,7 +777,7 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor
|
|||
}
|
||||
|
||||
this._contributedKernelsComputePromise = createCancelablePromise(token => {
|
||||
return this.notebookService.getContributedNotebookKernels(this.viewModel!.viewType, this.viewModel!.uri, token);
|
||||
return this.notebookService.getNotebookKernels(this.viewModel!.viewType, this.viewModel!.uri, token);
|
||||
});
|
||||
|
||||
const result = await this._contributedKernelsComputePromise;
|
||||
|
@ -830,7 +832,7 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor
|
|||
tokenSource.dispose();
|
||||
}
|
||||
|
||||
private async _setKernelsFromProviders(provider: NotebookProviderInfo, kernels: INotebookKernelInfo2[], tokenSource: CancellationTokenSource) {
|
||||
private async _setKernelsFromProviders(provider: NotebookProviderInfo, kernels: INotebookKernel[], tokenSource: CancellationTokenSource) {
|
||||
const rawAssociations = this.configurationService.getValue<NotebookKernelProviderAssociations>(notebookKernelProviderAssociationsSettingId) || [];
|
||||
const userSetKernelProvider = rawAssociations.filter(e => e.viewType === this.viewModel?.viewType)[0]?.kernelProvider;
|
||||
const memento = this._activeKernelMemento.getMemento(StorageScope.GLOBAL, StorageTarget.MACHINE);
|
||||
|
@ -916,7 +918,7 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor
|
|||
tokenSource.dispose();
|
||||
}
|
||||
|
||||
private async _loadKernelPreloads(extensionLocation: URI, kernel: INotebookKernelInfo2) {
|
||||
private async _loadKernelPreloads(extensionLocation: URI, kernel: INotebookKernel) {
|
||||
if (kernel.preloads && kernel.preloads.length) {
|
||||
await this._resolveWebview();
|
||||
this._webview?.updateKernelPreloads([extensionLocation], kernel.preloads.map(preload => URI.revive(preload)));
|
||||
|
@ -1496,7 +1498,7 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor
|
|||
const nextIndex = ui ? this.viewModel.getNextVisibleCellIndex(index) : index + 1;
|
||||
let language;
|
||||
if (type === CellKind.Code) {
|
||||
const supportedLanguages = this._activeKernel?.supportedLanguages ?? this.viewModel.notebookDocument.resolvedLanguages;
|
||||
const supportedLanguages = this._activeKernel?.supportedLanguages ?? this.modeService.getRegisteredModes();
|
||||
const defaultLanguage = supportedLanguages[0] || 'plaintext';
|
||||
if (cell?.cellKind === CellKind.Code) {
|
||||
language = cell.language;
|
||||
|
|
|
@ -32,7 +32,7 @@ import { NotebookKernelProviderAssociationRegistry, NotebookViewTypesExtensionRe
|
|||
import { CellViewModel } from 'vs/workbench/contrib/notebook/browser/viewModel/notebookViewModel';
|
||||
import { NotebookCellTextModel } from 'vs/workbench/contrib/notebook/common/model/notebookCellTextModel';
|
||||
import { NotebookTextModel } from 'vs/workbench/contrib/notebook/common/model/notebookTextModel';
|
||||
import { ACCESSIBLE_NOTEBOOK_DISPLAY_ORDER, BUILTIN_RENDERER_ID, CellEditType, CellKind, DisplayOrderKey, ICellEditOperation, INotebookDecorationRenderOptions, INotebookKernelInfo2, INotebookKernelProvider, INotebookMarkdownRendererInfo, INotebookRendererInfo, INotebookTextModel, IOrderedMimeType, IOutputDto, mimeTypeIsAlwaysSecure, mimeTypeSupportedByCore, notebookDocumentFilterMatch, NotebookEditorPriority, NOTEBOOK_DISPLAY_ORDER, RENDERER_NOT_AVAILABLE, sortMimeTypes } from 'vs/workbench/contrib/notebook/common/notebookCommon';
|
||||
import { ACCESSIBLE_NOTEBOOK_DISPLAY_ORDER, BUILTIN_RENDERER_ID, CellEditType, CellKind, DisplayOrderKey, ICellEditOperation, INotebookDecorationRenderOptions, INotebookKernel, INotebookKernelProvider, INotebookMarkdownRendererInfo, INotebookRendererInfo, INotebookTextModel, IOrderedMimeType, IOutputDto, mimeTypeIsAlwaysSecure, mimeTypeSupportedByCore, notebookDocumentFilterMatch, NotebookEditorPriority, NOTEBOOK_DISPLAY_ORDER, RENDERER_NOT_AVAILABLE, sortMimeTypes } from 'vs/workbench/contrib/notebook/common/notebookCommon';
|
||||
import { NotebookMarkdownRendererInfo } from 'vs/workbench/contrib/notebook/common/notebookMarkdownRenderer';
|
||||
import { NotebookOutputRendererInfo } from 'vs/workbench/contrib/notebook/common/notebookOutputRenderer';
|
||||
import { NotebookEditorDescriptor, NotebookProviderInfo } from 'vs/workbench/contrib/notebook/common/notebookProvider';
|
||||
|
@ -724,39 +724,14 @@ export class NotebookService extends Disposable implements INotebookService, ICu
|
|||
});
|
||||
}
|
||||
|
||||
async getContributedNotebookKernels(viewType: string, resource: URI, token: CancellationToken): Promise<INotebookKernelInfo2[]> {
|
||||
async getNotebookKernels(viewType: string, resource: URI, token: CancellationToken): Promise<INotebookKernel[]> {
|
||||
const filteredProvider = this.notebookKernelProviderInfoStore.get(viewType, resource);
|
||||
const result = new Array<INotebookKernelInfo2[]>(filteredProvider.length);
|
||||
|
||||
const result = new Array<INotebookKernel[]>(filteredProvider.length);
|
||||
const promises = filteredProvider.map(async (provider, index) => {
|
||||
const data = await provider.provideKernels(resource, token);
|
||||
result[index] = data.map(dto => {
|
||||
return {
|
||||
id: dto.id,
|
||||
extension: dto.extension,
|
||||
extensionLocation: URI.revive(dto.extensionLocation),
|
||||
friendlyId: dto.friendlyId,
|
||||
label: dto.label,
|
||||
description: dto.description,
|
||||
detail: dto.detail,
|
||||
isPreferred: dto.isPreferred,
|
||||
preloads: dto.preloads,
|
||||
providerHandle: dto.providerHandle,
|
||||
resolve: async (uri: URI, editorId: string, token: CancellationToken) => {
|
||||
return provider.resolveKernel(editorId, uri, dto.friendlyId, token);
|
||||
},
|
||||
executeNotebookCell: async (uri: URI, handle: number | undefined) => {
|
||||
return provider.executeNotebook(uri, dto.friendlyId, handle);
|
||||
},
|
||||
cancelNotebookCell: (uri: URI, handle: number | undefined): Promise<void> => {
|
||||
return provider.cancelNotebook(uri, dto.friendlyId, handle);
|
||||
}
|
||||
};
|
||||
});
|
||||
result[index] = data;
|
||||
});
|
||||
|
||||
await Promise.all(promises);
|
||||
|
||||
return flatten(result);
|
||||
}
|
||||
|
||||
|
@ -793,13 +768,13 @@ export class NotebookService extends Disposable implements INotebookService, ICu
|
|||
const dataDto = await provider.controller.resolveNotebookDocument(viewType, uri, backupId);
|
||||
let cells = dataDto.data.cells.length ? dataDto.data.cells : (uri.scheme === Schemas.untitled ? [{
|
||||
cellKind: CellKind.Code,
|
||||
language: dataDto.data.languages.length ? dataDto.data.languages[0] : '',
|
||||
language: 'plaintext', //TODO@jrieken unsure what this is
|
||||
outputs: [],
|
||||
metadata: undefined,
|
||||
source: ''
|
||||
}] : []);
|
||||
|
||||
notebookModel = this._instantiationService.createInstance(NotebookTextModel, viewType, provider.controller.supportBackup, uri, cells, dataDto.data.languages, dataDto.data.metadata, dataDto.transientOptions);
|
||||
notebookModel = this._instantiationService.createInstance(NotebookTextModel, viewType, provider.controller.supportBackup, uri, cells, dataDto.data.metadata, dataDto.transientOptions);
|
||||
}
|
||||
|
||||
// new notebook model created
|
||||
|
|
|
@ -12,7 +12,6 @@ import { ITextSnapshot } from 'vs/editor/common/model';
|
|||
import { IUndoRedoService, UndoRedoElementType, IUndoRedoElement, IResourceUndoRedoElement, UndoRedoGroup, IWorkspaceUndoRedoElement } from 'vs/platform/undoRedo/common/undoRedo';
|
||||
import { MoveCellEdit, SpliceCellsEdit, CellMetadataEdit } from 'vs/workbench/contrib/notebook/common/model/cellEdit';
|
||||
import { ITextModelService } from 'vs/editor/common/services/resolverService';
|
||||
import { IModeService } from 'vs/editor/common/services/modeService';
|
||||
import { ISequence, LcsDiff } from 'vs/base/common/diff/diff';
|
||||
import { hash } from 'vs/base/common/hash';
|
||||
import { NotebookCellOutputTextModel } from 'vs/workbench/contrib/notebook/common/model/notebookCellOutputTextModel';
|
||||
|
@ -27,7 +26,7 @@ export class NotebookTextModelSnapshot implements ITextSnapshot {
|
|||
|
||||
if (this._index === -1) {
|
||||
this._index++;
|
||||
return `{ "metadata": ${JSON.stringify(this._model.metadata)}, "languages": ${JSON.stringify(this._model.languages)}, "cells": [`;
|
||||
return `{ "metadata": ${JSON.stringify(this._model.metadata)}, "cells": [`;
|
||||
}
|
||||
|
||||
if (this._index < this._model.cells.length) {
|
||||
|
@ -213,20 +212,6 @@ export class NotebookTextModel extends Disposable implements INotebookTextModel
|
|||
private _mapping: Map<number, NotebookCellTextModel> = new Map();
|
||||
private _cellListeners: Map<number, IDisposable> = new Map();
|
||||
private _cells: NotebookCellTextModel[] = [];
|
||||
private _languages: string[] = [];
|
||||
private _allLanguages: boolean = false;
|
||||
|
||||
get languages() {
|
||||
return this._languages;
|
||||
}
|
||||
|
||||
get resolvedLanguages() {
|
||||
if (this._allLanguages) {
|
||||
return this._modeService.getRegisteredModes();
|
||||
}
|
||||
|
||||
return this._languages;
|
||||
}
|
||||
|
||||
metadata: NotebookDocumentMetadata = notebookDocumentMetadataDefaults;
|
||||
transientOptions: TransientOptions = { transientMetadata: {}, transientOutputs: false };
|
||||
|
@ -247,17 +232,14 @@ export class NotebookTextModel extends Disposable implements INotebookTextModel
|
|||
readonly supportBackup: boolean,
|
||||
readonly uri: URI,
|
||||
cells: ICellDto2[],
|
||||
languages: string[],
|
||||
metadata: NotebookDocumentMetadata,
|
||||
options: TransientOptions,
|
||||
@IUndoRedoService private _undoService: IUndoRedoService,
|
||||
@ITextModelService private _modelService: ITextModelService,
|
||||
@IModeService private readonly _modeService: IModeService,
|
||||
) {
|
||||
super();
|
||||
this.transientOptions = options;
|
||||
this.metadata = metadata;
|
||||
this.updateLanguages(metadata.languages && metadata.languages.length ? metadata.languages : languages);
|
||||
this._initialize(cells);
|
||||
|
||||
this._eventEmitter = new DelayedEmitter(
|
||||
|
@ -451,17 +433,6 @@ export class NotebookTextModel extends Disposable implements INotebookTextModel
|
|||
this._versionId = this._versionId + 1;
|
||||
}
|
||||
|
||||
updateLanguages(languages: string[]) {
|
||||
const allLanguages = languages.find(lan => lan === '*');
|
||||
this._allLanguages = allLanguages !== undefined;
|
||||
this._languages = languages;
|
||||
|
||||
const resolvedLanguages = this.resolvedLanguages;
|
||||
if (resolvedLanguages.length && this._cells.length) {
|
||||
this._cells[0].language = resolvedLanguages[0];
|
||||
}
|
||||
}
|
||||
|
||||
private _isDocumentMetadataChangeTransient(a: NotebookDocumentMetadata, b: NotebookDocumentMetadata) {
|
||||
const keys = new Set([...Object.keys(a || {}), ...Object.keys(b || {})]);
|
||||
for (let key of keys) {
|
||||
|
@ -477,10 +448,6 @@ export class NotebookTextModel extends Disposable implements INotebookTextModel
|
|||
const oldMetadata = this.metadata;
|
||||
this.metadata = metadata;
|
||||
|
||||
if (this.metadata.languages && this.metadata.languages.length) {
|
||||
this.updateLanguages(this.metadata.languages);
|
||||
}
|
||||
|
||||
if (computeUndoRedo) {
|
||||
const that = this;
|
||||
this._operationManager.pushEditOperation(new class implements IResourceUndoRedoElement {
|
||||
|
|
|
@ -67,7 +67,6 @@ export const notebookDocumentMetadataDefaults: Required<NotebookDocumentMetadata
|
|||
displayOrder: NOTEBOOK_DISPLAY_ORDER,
|
||||
custom: {},
|
||||
runState: NotebookRunState.Idle,
|
||||
languages: [],
|
||||
trusted: true
|
||||
};
|
||||
|
||||
|
@ -80,7 +79,6 @@ export interface NotebookDocumentMetadata {
|
|||
displayOrder?: (string | glob.IRelativePattern)[];
|
||||
custom?: { [key: string]: unknown };
|
||||
runState?: NotebookRunState;
|
||||
languages: string[];
|
||||
trusted: boolean;
|
||||
}
|
||||
|
||||
|
@ -197,8 +195,6 @@ export interface INotebookTextModel {
|
|||
readonly uri: URI;
|
||||
readonly versionId: number;
|
||||
|
||||
/** @deprecated */
|
||||
languages: string[];
|
||||
readonly cells: readonly ICell[];
|
||||
onWillDispose(listener: () => void): IDisposable;
|
||||
}
|
||||
|
@ -382,7 +378,6 @@ export type ICellEditOperation = ICellReplaceEdit | ICellOutputEdit | ICellMetad
|
|||
|
||||
export interface NotebookDataDto {
|
||||
readonly cells: ICellDto2[];
|
||||
readonly languages: string[];
|
||||
readonly metadata: NotebookDocumentMetadata;
|
||||
}
|
||||
|
||||
|
@ -720,7 +715,7 @@ export function notebookDocumentFilterMatch(filter: INotebookDocumentFilter, vie
|
|||
return false;
|
||||
}
|
||||
|
||||
export interface INotebookKernelInfoDto2 {
|
||||
export interface INotebookKernel {
|
||||
id?: string;
|
||||
friendlyId: string;
|
||||
label: string;
|
||||
|
@ -730,11 +725,9 @@ export interface INotebookKernelInfoDto2 {
|
|||
description?: string;
|
||||
detail?: string;
|
||||
isPreferred?: boolean;
|
||||
preloads?: UriComponents[];
|
||||
preloads?: URI[];
|
||||
supportedLanguages?: string[]
|
||||
}
|
||||
|
||||
export interface INotebookKernelInfo2 extends INotebookKernelInfoDto2 {
|
||||
resolve(uri: URI, editorId: string, token: CancellationToken): Promise<void>;
|
||||
executeNotebookCell(uri: URI, handle: number | undefined): Promise<void>;
|
||||
cancelNotebookCell(uri: URI, handle: number | undefined): Promise<void>;
|
||||
|
@ -745,10 +738,7 @@ export interface INotebookKernelProvider {
|
|||
providerDescription?: string;
|
||||
selector: INotebookDocumentFilter;
|
||||
onDidChangeKernels: Event<URI | undefined>;
|
||||
provideKernels(uri: URI, token: CancellationToken): Promise<INotebookKernelInfoDto2[]>;
|
||||
resolveKernel(editorId: string, uri: UriComponents, kernelId: string, token: CancellationToken): Promise<void>;
|
||||
executeNotebook(uri: URI, kernelId: string, handle: number | undefined): Promise<void>;
|
||||
cancelNotebook(uri: URI, kernelId: string, handle: number | undefined): Promise<void>;
|
||||
provideKernels(uri: URI, token: CancellationToken): Promise<INotebookKernel[]>;
|
||||
}
|
||||
|
||||
export class CellSequence implements ISequence {
|
||||
|
|
|
@ -8,10 +8,7 @@ import { URI } from 'vs/base/common/uri';
|
|||
import { NotebookProviderInfo } from 'vs/workbench/contrib/notebook/common/notebookProvider';
|
||||
import { NotebookExtensionDescription } from 'vs/workbench/api/common/extHost.protocol';
|
||||
import { Event } from 'vs/base/common/event';
|
||||
import {
|
||||
INotebookTextModel, INotebookRendererInfo,
|
||||
IEditor, INotebookKernelProvider, INotebookKernelInfo2, TransientMetadata, NotebookDataDto, TransientOptions, INotebookDecorationRenderOptions, INotebookExclusiveDocumentFilter, IOrderedMimeType, IOutputDto, INotebookMarkdownRendererInfo
|
||||
} from 'vs/workbench/contrib/notebook/common/notebookCommon';
|
||||
import { INotebookTextModel, INotebookRendererInfo, IEditor, INotebookKernelProvider, INotebookKernel, TransientMetadata, NotebookDataDto, TransientOptions, INotebookDecorationRenderOptions, INotebookExclusiveDocumentFilter, IOrderedMimeType, IOutputDto, INotebookMarkdownRendererInfo } from 'vs/workbench/contrib/notebook/common/notebookCommon';
|
||||
import { NotebookTextModel } from 'vs/workbench/contrib/notebook/common/model/notebookTextModel';
|
||||
import { CancellationToken } from 'vs/base/common/cancellation';
|
||||
import { NotebookCellTextModel } from 'vs/workbench/contrib/notebook/common/model/notebookCellTextModel';
|
||||
|
@ -52,7 +49,7 @@ export interface INotebookService {
|
|||
getMimeTypeInfo(textModel: NotebookTextModel, output: IOutputDto): readonly IOrderedMimeType[];
|
||||
|
||||
registerNotebookKernelProvider(provider: INotebookKernelProvider): IDisposable;
|
||||
getContributedNotebookKernels(viewType: string, resource: URI, token: CancellationToken): Promise<INotebookKernelInfo2[]>;
|
||||
getNotebookKernels(viewType: string, resource: URI, token: CancellationToken): Promise<INotebookKernel[]>;
|
||||
getContributedNotebookKernelProviders(): Promise<INotebookKernelProvider[]>;
|
||||
getContributedNotebookOutputRenderers(id: string): NotebookOutputRendererInfo | undefined;
|
||||
getRendererInfo(id: string): INotebookRendererInfo | undefined;
|
||||
|
|
|
@ -88,7 +88,6 @@ class MirrorNotebookDocument {
|
|||
constructor(
|
||||
readonly uri: URI,
|
||||
public cells: MirrorCell[],
|
||||
public languages: string[],
|
||||
public metadata: NotebookDocumentMetadata,
|
||||
) {
|
||||
}
|
||||
|
@ -175,7 +174,7 @@ export class NotebookEditorSimpleWorker implements IRequestHandler, IDisposable
|
|||
dto.cellKind,
|
||||
dto.outputs,
|
||||
dto.metadata
|
||||
)), data.languages, data.metadata);
|
||||
)), data.metadata);
|
||||
}
|
||||
|
||||
public acceptModelChanged(strURL: string, event: NotebookCellsChangedEventDto) {
|
||||
|
@ -266,4 +265,3 @@ export class NotebookEditorSimpleWorker implements IRequestHandler, IDisposable
|
|||
export function create(host: EditorWorkerHost): IRequestHandler {
|
||||
return new NotebookEditorSimpleWorker();
|
||||
}
|
||||
|
||||
|
|
|
@ -107,7 +107,6 @@ export class NotebookEditorModelManager extends Disposable {
|
|||
outputs: cell.outputs.map(op => ({ outputId: op.outputId, outputs: op.outputs })),
|
||||
metadata: cell.metadata
|
||||
})),
|
||||
languages: model.languages,
|
||||
metadata: model.metadata
|
||||
}
|
||||
);
|
||||
|
|
|
@ -15,17 +15,15 @@ import { NotebookEventDispatcher } from 'vs/workbench/contrib/notebook/browser/v
|
|||
import { TrackedRangeStickiness } from 'vs/editor/common/model';
|
||||
import { reduceCellRanges } from 'vs/workbench/contrib/notebook/browser/notebookBrowser';
|
||||
import { ITextModelService } from 'vs/editor/common/services/resolverService';
|
||||
import { IModeService } from 'vs/editor/common/services/modeService';
|
||||
|
||||
suite('NotebookViewModel', () => {
|
||||
const instantiationService = setupInstantiationService();
|
||||
const textModelService = instantiationService.get(ITextModelService);
|
||||
const blukEditService = instantiationService.get(IBulkEditService);
|
||||
const undoRedoService = instantiationService.get(IUndoRedoService);
|
||||
const modeService = instantiationService.get(IModeService);
|
||||
|
||||
test('ctor', function () {
|
||||
const notebook = new NotebookTextModel('notebook', false, URI.parse('test'), [], [], notebookDocumentMetadataDefaults, { transientMetadata: {}, transientOutputs: false }, undoRedoService, textModelService, modeService);
|
||||
const notebook = new NotebookTextModel('notebook', false, URI.parse('test'), [], notebookDocumentMetadataDefaults, { transientMetadata: {}, transientOutputs: false }, undoRedoService, textModelService);
|
||||
const model = new NotebookEditorTestModel(notebook);
|
||||
const eventDispatcher = new NotebookEventDispatcher();
|
||||
const viewModel = new NotebookViewModel('notebook', model.notebook, eventDispatcher, null, instantiationService, blukEditService, undoRedoService);
|
||||
|
@ -156,7 +154,7 @@ suite('NotebookViewModel', () => {
|
|||
['var e = 5;', 'javascript', CellKind.Code, [], { editable: false, runnable: false }],
|
||||
],
|
||||
(editor, viewModel) => {
|
||||
viewModel.notebookDocument.metadata = { editable: true, runnable: true, cellRunnable: true, cellEditable: true, cellHasExecutionOrder: true, trusted: true, languages: [] };
|
||||
viewModel.notebookDocument.metadata = { editable: true, runnable: true, cellRunnable: true, cellEditable: true, cellHasExecutionOrder: true, trusted: true };
|
||||
|
||||
const defaults = { hasExecutionOrder: true };
|
||||
|
||||
|
@ -190,7 +188,7 @@ suite('NotebookViewModel', () => {
|
|||
...defaults
|
||||
});
|
||||
|
||||
viewModel.notebookDocument.metadata = { editable: true, runnable: true, cellRunnable: false, cellEditable: true, cellHasExecutionOrder: true, trusted: true, languages: [] };
|
||||
viewModel.notebookDocument.metadata = { editable: true, runnable: true, cellRunnable: false, cellEditable: true, cellHasExecutionOrder: true, trusted: true };
|
||||
|
||||
assert.deepEqual(viewModel.viewCells[0].getEvaluatedMetadata(viewModel.metadata), <NotebookCellMetadata>{
|
||||
editable: true,
|
||||
|
@ -222,7 +220,7 @@ suite('NotebookViewModel', () => {
|
|||
...defaults
|
||||
});
|
||||
|
||||
viewModel.notebookDocument.metadata = { editable: true, runnable: true, cellRunnable: false, cellEditable: false, cellHasExecutionOrder: true, trusted: true, languages: [] };
|
||||
viewModel.notebookDocument.metadata = { editable: true, runnable: true, cellRunnable: false, cellEditable: false, cellHasExecutionOrder: true, trusted: true };
|
||||
|
||||
assert.deepEqual(viewModel.viewCells[0].getEvaluatedMetadata(viewModel.metadata), <NotebookCellMetadata>{
|
||||
editable: false,
|
||||
|
|
|
@ -18,7 +18,7 @@ import { NotebookEventDispatcher } from 'vs/workbench/contrib/notebook/browser/v
|
|||
import { CellViewModel, IModelDecorationsChangeAccessor, NotebookViewModel } from 'vs/workbench/contrib/notebook/browser/viewModel/notebookViewModel';
|
||||
import { NotebookCellTextModel } from 'vs/workbench/contrib/notebook/common/model/notebookCellTextModel';
|
||||
import { NotebookTextModel } from 'vs/workbench/contrib/notebook/common/model/notebookTextModel';
|
||||
import { CellKind, CellUri, INotebookEditorModel, NotebookCellMetadata, ICellRange, INotebookKernelInfo2, notebookDocumentMetadataDefaults, IOutputDto } from 'vs/workbench/contrib/notebook/common/notebookCommon';
|
||||
import { CellKind, CellUri, INotebookEditorModel, NotebookCellMetadata, ICellRange, INotebookKernel, notebookDocumentMetadataDefaults, IOutputDto } from 'vs/workbench/contrib/notebook/common/notebookCommon';
|
||||
import { Webview } from 'vs/workbench/contrib/webview/browser/webview';
|
||||
import { ICompositeCodeEditor, IEditor } from 'vs/editor/common/editorCommon';
|
||||
import { NotImplementedError } from 'vs/base/common/errors';
|
||||
|
@ -34,7 +34,6 @@ import { TestConfigurationService } from 'vs/platform/configuration/test/common/
|
|||
import { IThemeService } from 'vs/platform/theme/common/themeService';
|
||||
import { TestThemeService } from 'vs/platform/theme/test/common/testThemeService';
|
||||
import { ScrollEvent } from 'vs/base/common/scrollable';
|
||||
import { IModeService } from 'vs/editor/common/services/modeService';
|
||||
import { IFileStatWithMetadata } from 'vs/platform/files/common/files';
|
||||
|
||||
export class TestCell extends NotebookCellTextModel {
|
||||
|
@ -87,6 +86,7 @@ export class TestNotebookEditor implements INotebookEditor {
|
|||
updateOutputHeight(cellInfo: ICommonCellInfo, output: ICellOutputViewModel, height: number, isInit: boolean): void {
|
||||
throw new Error('Method not implemented.');
|
||||
}
|
||||
|
||||
setMarkdownCellEditState(cellId: string, editState: CellEditState): void {
|
||||
throw new Error('Method not implemented.');
|
||||
}
|
||||
|
@ -99,7 +99,7 @@ export class TestNotebookEditor implements INotebookEditor {
|
|||
markdownCellDragEnd(cellId: string, position: { clientY: number }): void {
|
||||
throw new Error('Method not implemented.');
|
||||
}
|
||||
async beginComputeContributedKernels(): Promise<INotebookKernelInfo2[]> {
|
||||
async beginComputeContributedKernels(): Promise<INotebookKernel[]> {
|
||||
return [];
|
||||
}
|
||||
setEditorDecorations(key: string, range: ICellRange): void {
|
||||
|
@ -154,7 +154,7 @@ export class TestNotebookEditor implements INotebookEditor {
|
|||
}
|
||||
|
||||
cursorNavigationMode = false;
|
||||
activeKernel: INotebookKernelInfo2 | undefined;
|
||||
activeKernel: INotebookKernel | undefined;
|
||||
onDidChangeKernel: Event<void> = new Emitter<void>().event;
|
||||
onDidChangeActiveEditor: Event<ICompositeCodeEditor> = new Emitter<ICompositeCodeEditor>().event;
|
||||
activeCodeEditor: IEditor | undefined;
|
||||
|
@ -447,7 +447,6 @@ export function setupInstantiationService() {
|
|||
|
||||
export function withTestNotebook(instantiationService: TestInstantiationService, blukEditService: IBulkEditService, undoRedoService: IUndoRedoService, cells: [string, string, CellKind, IOutputDto[], NotebookCellMetadata][], callback: (editor: TestNotebookEditor, viewModel: NotebookViewModel, textModel: NotebookTextModel) => void) {
|
||||
const textModelService = instantiationService.get(ITextModelService);
|
||||
const modeService = instantiationService.get(IModeService);
|
||||
|
||||
const viewType = 'notebook';
|
||||
const editor = new TestNotebookEditor();
|
||||
|
@ -459,7 +458,7 @@ export function withTestNotebook(instantiationService: TestInstantiationService,
|
|||
outputs: cell[3],
|
||||
metadata: cell[4]
|
||||
};
|
||||
}), [], notebookDocumentMetadataDefaults, { transientMetadata: {}, transientOutputs: false }, undoRedoService, textModelService, modeService);
|
||||
}), notebookDocumentMetadataDefaults, { transientMetadata: {}, transientOutputs: false }, undoRedoService, textModelService);
|
||||
const model = new NotebookEditorTestModel(notebook);
|
||||
const eventDispatcher = new NotebookEventDispatcher();
|
||||
const viewModel = new NotebookViewModel(viewType, model.notebook, eventDispatcher, null, instantiationService, blukEditService, undoRedoService);
|
||||
|
|
|
@ -657,7 +657,6 @@ suite('ExtHostTypes', function () {
|
|||
assert.deepStrictEqual(obj.custom, notebookDocumentMetadataDefaults.custom);
|
||||
assert.deepStrictEqual(obj.displayOrder, notebookDocumentMetadataDefaults.displayOrder);
|
||||
assert.strictEqual(obj.editable, notebookDocumentMetadataDefaults.editable);
|
||||
assert.deepStrictEqual(obj.languages, notebookDocumentMetadataDefaults.languages);
|
||||
assert.strictEqual(obj.runState, notebookDocumentMetadataDefaults.runState);
|
||||
assert.strictEqual(obj.runnable, notebookDocumentMetadataDefaults.runnable);
|
||||
assert.strictEqual(obj.trusted, notebookDocumentMetadataDefaults.trusted);
|
||||
|
|
Loading…
Reference in a new issue