Merge from vscode fcf3346a8e9f5ee1e00674461d9e2c2292a14ee3 (#12295)

* Merge from vscode fcf3346a8e9f5ee1e00674461d9e2c2292a14ee3

* Fix test build break

* Update distro

* Fix build errors

* Update distro

* Update REH build file

* Update build task names for REL

* Fix product build yaml

* Fix product REH task name

* Fix type in task name

* Update linux build step

* Update windows build tasks

* Turn off server publish

* Disable REH

* Fix typo

* Bump distro

* Update vscode tests

* Bump distro

* Fix type in disto

* Bump distro

* Turn off docker build

* Remove docker step from release

Co-authored-by: ADS Merger <andresse@microsoft.com>
Co-authored-by: Karl Burtram <karlb@microsoft.com>
This commit is contained in:
Christopher Suh
2020-10-03 14:42:05 -04:00
committed by GitHub
parent 58d02b76db
commit 6ff1e3866b
687 changed files with 10507 additions and 9104 deletions

View File

@@ -9,6 +9,7 @@ import { Emitter, Event } from 'vs/base/common/event';
import { Iterable } from 'vs/base/common/iterator';
import { Disposable, DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle';
import { ResourceMap } from 'vs/base/common/map';
import { Schemas } from 'vs/base/common/network';
import { URI } from 'vs/base/common/uri';
import { RedoCommand, UndoCommand } from 'vs/editor/browser/editorExtensions';
import { CopyAction, CutAction, PasteAction } from 'vs/editor/contrib/clipboard/clipboard';
@@ -26,7 +27,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, CellOutputKind, CellUri, DisplayOrderKey, ICellEditOperation, IDisplayOutput, INotebookKernelInfo2, INotebookKernelProvider, INotebookRendererInfo, INotebookTextModel, IOrderedMimeType, ITransformedDisplayOutputDto, mimeTypeSupportedByCore, NotebookCellOutputsSplice, notebookDocumentFilterMatch, NotebookEditorPriority, NOTEBOOK_DISPLAY_ORDER, sortMimeTypes } from 'vs/workbench/contrib/notebook/common/notebookCommon';
import { ACCESSIBLE_NOTEBOOK_DISPLAY_ORDER, BUILTIN_RENDERER_ID, CellEditType, CellKind, CellOutputKind, DisplayOrderKey, ICellEditOperation, IDisplayOutput, INotebookKernelInfo2, INotebookKernelProvider, INotebookRendererInfo, INotebookTextModel, IOrderedMimeType, ITransformedDisplayOutputDto, mimeTypeSupportedByCore, NotebookCellOutputsSplice, notebookDocumentFilterMatch, NotebookEditorPriority, NOTEBOOK_DISPLAY_ORDER, sortMimeTypes } from 'vs/workbench/contrib/notebook/common/notebookCommon';
import { NotebookOutputRendererInfo } from 'vs/workbench/contrib/notebook/common/notebookOutputRenderer';
import { NotebookEditorDescriptor, NotebookProviderInfo } from 'vs/workbench/contrib/notebook/common/notebookProvider';
import { IMainNotebookController, INotebookService } from 'vs/workbench/contrib/notebook/common/notebookService';
@@ -225,7 +226,6 @@ class ModelData implements IDisposable {
}
export class NotebookService extends Disposable implements INotebookService, ICustomEditorViewTypesHandler {
declare readonly _serviceBrand: undefined;
static mainthreadNotebookDocumentHandle: number = 0;
private readonly _notebookProviders = new Map<string, { controller: IMainNotebookController, extensionData: NotebookExtensionDescription }>();
notebookProviderInfoStore: NotebookProviderInfoStore;
notebookRenderersInfoStore: NotebookOutputRendererInfoStore = new NotebookOutputRendererInfoStore();
@@ -240,10 +240,12 @@ export class NotebookService extends Disposable implements INotebookService, ICu
public readonly onNotebookEditorAdd: Event<INotebookEditor> = this._onNotebookEditorAdd.event;
private readonly _onNotebookEditorsRemove: Emitter<INotebookEditor[]> = this._register(new Emitter<INotebookEditor[]>());
public readonly onNotebookEditorsRemove: Event<INotebookEditor[]> = this._onNotebookEditorsRemove.event;
private readonly _onNotebookDocumentAdd: Emitter<URI[]> = this._register(new Emitter<URI[]>());
public readonly onNotebookDocumentAdd: Event<URI[]> = this._onNotebookDocumentAdd.event;
private readonly _onNotebookDocumentRemove: Emitter<URI[]> = this._register(new Emitter<URI[]>());
public readonly onNotebookDocumentRemove: Event<URI[]> = this._onNotebookDocumentRemove.event;
private readonly _onDidAddNotebookDocument = this._register(new Emitter<NotebookTextModel>());
private readonly _onDidRemoveNotebookDocument = this._register(new Emitter<URI>());
readonly onDidAddNotebookDocument = this._onDidAddNotebookDocument.event;
readonly onDidRemoveNotebookDocument = this._onDidRemoveNotebookDocument.event;
private readonly _onNotebookDocumentSaved: Emitter<URI> = this._register(new Emitter<URI>());
public readonly onNotebookDocumentSaved: Event<URI> = this._onNotebookDocumentSaved.event;
private readonly _notebookEditors = new Map<string, INotebookEditor>();
@@ -424,30 +426,24 @@ export class NotebookService extends Disposable implements INotebookService, ICu
let topPastedCell: CellViewModel | undefined = undefined;
pasteCells.items.reverse().map(cell => {
const data = CellUri.parse(cell.uri);
if (pasteCells.isCopy || data?.notebook.toString() !== viewModel.uri.toString()) {
return viewModel.notebookDocument.createCellTextModel(
cell.getValue(),
cell.language,
cell.cellKind,
[],
{
editable: cell.metadata?.editable,
runnable: cell.metadata?.runnable,
breakpointMargin: cell.metadata?.breakpointMargin,
hasExecutionOrder: cell.metadata?.hasExecutionOrder,
inputCollapsed: cell.metadata?.inputCollapsed,
outputCollapsed: cell.metadata?.outputCollapsed,
custom: cell.metadata?.custom
}
);
} else {
return cell;
}
return {
source: cell.getValue(),
language: cell.language,
cellKind: cell.cellKind,
outputs: cell.outputs,
metadata: {
editable: cell.metadata?.editable,
runnable: cell.metadata?.runnable,
breakpointMargin: cell.metadata?.breakpointMargin,
hasExecutionOrder: cell.metadata?.hasExecutionOrder,
inputCollapsed: cell.metadata?.inputCollapsed,
outputCollapsed: cell.metadata?.outputCollapsed,
custom: cell.metadata?.custom
}
};
}).forEach(pasteCell => {
const newIdx = typeof currCellIndex === 'number' ? currCellIndex + 1 : 0;
topPastedCell = viewModel.insertCell(newIdx, pasteCell, true);
topPastedCell = viewModel.createCell(newIdx, pasteCell.source, pasteCell.language, pasteCell.cellKind, pasteCell.metadata, pasteCell.outputs, true);
});
if (topPastedCell) {
@@ -460,21 +456,23 @@ export class NotebookService extends Disposable implements INotebookService, ICu
let topPastedCell: CellViewModel | undefined = undefined;
pasteCells.items.reverse().map(cell => {
const data = CellUri.parse(cell.uri);
if (pasteCells.isCopy || data?.notebook.toString() !== viewModel.uri.toString()) {
return viewModel.notebookDocument.createCellTextModel(
cell.getValue(),
cell.language,
cell.cellKind,
[],
cell.metadata
);
} else {
return cell;
}
return {
source: cell.getValue(),
language: cell.language,
cellKind: cell.cellKind,
outputs: cell.outputs,
metadata: {
editable: cell.metadata?.editable,
runnable: cell.metadata?.runnable,
breakpointMargin: cell.metadata?.breakpointMargin,
hasExecutionOrder: cell.metadata?.hasExecutionOrder,
inputCollapsed: cell.metadata?.inputCollapsed,
outputCollapsed: cell.metadata?.outputCollapsed,
custom: cell.metadata?.custom
}
};
}).forEach(pasteCell => {
topPastedCell = viewModel.insertCell(0, pasteCell, true);
topPastedCell = viewModel.createCell(0, pasteCell.source, pasteCell.language, pasteCell.cellKind, pasteCell.metadata, pasteCell.outputs, true);
});
if (topPastedCell) {
@@ -543,14 +541,13 @@ export class NotebookService extends Disposable implements INotebookService, ICu
return this._notebookProviders.has(viewType);
}
registerNotebookController(viewType: string, extensionData: NotebookExtensionDescription, controller: IMainNotebookController) {
registerNotebookController(viewType: string, extensionData: NotebookExtensionDescription, controller: IMainNotebookController): IDisposable {
this._notebookProviders.set(viewType, { extensionData, controller });
this._onDidChangeViewTypes.fire();
}
unregisterNotebookProvider(viewType: string): void {
this._notebookProviders.delete(viewType);
this._onDidChangeViewTypes.fire();
return toDisposable(() => {
this._notebookProviders.delete(viewType);
this._onDidChangeViewTypes.fire();
});
}
registerNotebookKernelProvider(provider: INotebookKernelProvider): IDisposable {
@@ -605,7 +602,7 @@ export class NotebookService extends Disposable implements INotebookService, ICu
return this.notebookRenderersInfoStore.get(id);
}
async resolveNotebook(viewType: string, uri: URI, forceReload: boolean, editorId?: string, backupId?: string): Promise<NotebookTextModel> {
async resolveNotebook(viewType: string, uri: URI, forceReload: boolean, backupId?: string): Promise<NotebookTextModel> {
if (!await this.canResolve(viewType)) {
throw new Error(`CANNOT load notebook, no provider for '${viewType}'`);
@@ -622,8 +619,16 @@ export class NotebookService extends Disposable implements INotebookService, ICu
return notebookModel;
} else {
notebookModel = this._instantiationService.createInstance(NotebookTextModel, NotebookService.mainthreadNotebookDocumentHandle++, viewType, provider.controller.supportBackup, uri);
await provider.controller.createNotebook(notebookModel, backupId);
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] : '',
outputs: [],
metadata: undefined,
source: ''
}] : []);
notebookModel = this._instantiationService.createInstance(NotebookTextModel, viewType, provider.controller.supportBackup, uri, cells, dataDto.data.languages, dataDto.data.metadata, dataDto.transientOptions);
}
// new notebook model created
@@ -633,14 +638,10 @@ export class NotebookService extends Disposable implements INotebookService, ICu
);
this._models.set(uri, modelData);
this._onNotebookDocumentAdd.fire([notebookModel.uri]);
this._onDidAddNotebookDocument.fire(notebookModel);
// after the document is added to the store and sent to ext host, we transform the ouputs
await this.transformTextModelOutputs(notebookModel);
if (editorId) {
await provider.controller.resolveNotebookEditor(viewType, uri, editorId);
}
return modelData.model;
}
@@ -658,7 +659,7 @@ export class NotebookService extends Disposable implements INotebookService, ICu
cell.outputs.forEach((output) => {
if (output.outputKind === CellOutputKind.Rich) {
// TODO no string[] casting
// TODO@rebornix no string[] casting
const ret = this._transformMimeTypes(output, output.outputId, textModel.metadata.displayOrder as string[] || []);
const orderedMimeTypes = ret.orderedMimeTypes!;
const pickedMimeTypeIndex = ret.pickedMimeTypeIndex!;
@@ -786,6 +787,13 @@ export class NotebookService extends Disposable implements INotebookService, ICu
return ret;
}
async resolveNotebookEditor(viewType: string, uri: URI, editorId: string): Promise<void> {
const entry = this._notebookProviders.get(viewType);
if (entry) {
entry.controller.resolveNotebookEditor(viewType, uri, editorId);
}
}
removeNotebookEditor(editor: INotebookEditor) {
const editorCache = this._notebookEditors.get(editor.getId());
@@ -919,19 +927,12 @@ export class NotebookService extends Disposable implements INotebookService, ICu
}
});
modelData.model.dispose();
modelData.dispose();
willRemovedEditors.forEach(e => this._notebookEditors.delete(e.getId()));
const provider = this._notebookProviders.get(modelData!.model.viewType);
if (provider) {
provider.controller.removeNotebookDocument(modelData!.model.uri);
modelData!.model.dispose();
}
this._onNotebookEditorsRemove.fire(willRemovedEditors.map(e => e));
this._onNotebookDocumentRemove.fire([modelData.model.uri]);
modelData?.dispose();
this._onDidRemoveNotebookDocument.fire(modelData.model.uri);
}
}
}