mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-16 10:58:30 -05:00
Merge vscode source through 1.62 release (#19981)
* Build breaks 1 * Build breaks * Build breaks * Build breaks * More build breaks * Build breaks (#2512) * Runtime breaks * Build breaks * Fix dialog location break * Update typescript * Fix ASAR break issue * Unit test breaks * Update distro * Fix breaks in ADO builds (#2513) * Bump to node 16 * Fix hygiene errors * Bump distro * Remove reference to node type * Delete vscode specific extension * Bump to node 16 in CI yaml * Skip integration tests in CI builds (while fixing) * yarn.lock update * Bump moment dependency in remote yarn * Fix drop-down chevron style * Bump to node 16 * Remove playwrite from ci.yaml * Skip building build scripts in hygine check
This commit is contained in:
@@ -11,13 +11,14 @@ import { Lazy } from 'vs/base/common/lazy';
|
||||
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 { isDefined } from 'vs/base/common/types';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService';
|
||||
import { IEditorOptions } from 'vs/editor/common/config/editorOptions';
|
||||
import { BareFontInfo } from 'vs/editor/common/config/fontInfo';
|
||||
// import { localize } from 'vs/nls'; {{SQL CARBON EDIT}} Notebook registration handled in SQL code
|
||||
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
|
||||
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
||||
import { ConfigurationTarget, IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
||||
import { IResourceEditorInput } from 'vs/platform/editor/common/editor';
|
||||
import { IFileService } from 'vs/platform/files/common/files';
|
||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||
@@ -30,14 +31,14 @@ import { INotebookEditorOptions } from 'vs/workbench/contrib/notebook/browser/no
|
||||
import { NotebookDiffEditorInput } from 'vs/workbench/contrib/notebook/browser/notebookDiffEditorInput';
|
||||
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, CellUri, DisplayOrderKey, INotebookExclusiveDocumentFilter, INotebookContributionData, INotebookRendererInfo, INotebookTextModel, IOrderedMimeType, IOutputDto, mimeTypeIsAlwaysSecure, mimeTypeSupportedByCore, NotebookData, NotebookRendererMatch, NotebookTextDiffEditorPreview, RENDERER_NOT_AVAILABLE, sortMimeTypes, TransientOptions } from 'vs/workbench/contrib/notebook/common/notebookCommon'; // {{SQL CARBON EDIT}} Remove unused
|
||||
import { ACCESSIBLE_NOTEBOOK_DISPLAY_ORDER, BUILTIN_RENDERER_ID, CellUri, DisplayOrderKey, INotebookExclusiveDocumentFilter, INotebookContributionData, INotebookRendererInfo, INotebookTextModel, IOrderedMimeType, IOutputDto, mimeTypeIsAlwaysSecure, mimeTypeSupportedByCore, NotebookData, NotebookRendererMatch, NotebookTextDiffEditorPreview, NOTEBOOK_DISPLAY_ORDER, RENDERER_NOT_AVAILABLE, TransientOptions, MimeTypeDisplayOrder } from 'vs/workbench/contrib/notebook/common/notebookCommon'; // {{SQL CARBON EDIT}} Remove unused
|
||||
import { NotebookEditorInput } from 'vs/workbench/contrib/notebook/common/notebookEditorInput';
|
||||
import { INotebookEditorModelResolverService } from 'vs/workbench/contrib/notebook/common/notebookEditorModelResolverService';
|
||||
import { updateEditorTopPadding } from 'vs/workbench/contrib/notebook/common/notebookOptions';
|
||||
import { NotebookOutputRendererInfo } from 'vs/workbench/contrib/notebook/common/notebookOutputRenderer';
|
||||
import { NotebookEditorDescriptor, NotebookProviderInfo } from 'vs/workbench/contrib/notebook/common/notebookProvider';
|
||||
import { ComplexNotebookProviderInfo, INotebookContentProvider, INotebookSerializer, INotebookService, SimpleNotebookProviderInfo } from 'vs/workbench/contrib/notebook/common/notebookService';
|
||||
import { RegisteredEditorInfo, RegisteredEditorPriority, DiffEditorInputFactoryFunction, EditorInputFactoryFunction, IEditorResolverService, IEditorType, UntitledEditorInputFactoryFunction } from 'vs/workbench/services/editor/common/editorResolverService';
|
||||
import { DiffEditorInputFactoryFunction, EditorInputFactoryFunction, IEditorResolverService, IEditorType, RegisteredEditorInfo, RegisteredEditorPriority, UntitledEditorInputFactoryFunction } from 'vs/workbench/services/editor/common/editorResolverService';
|
||||
import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions';
|
||||
// import { IExtensionPointUser } from 'vs/workbench/services/extensions/common/extensionsRegistry'; {{SQL CARBON EDIT}} Notebook registration handled in SQL code
|
||||
|
||||
@@ -164,7 +165,7 @@ export class NotebookProviderInfoStore extends Disposable {
|
||||
};
|
||||
const notebookEditorOptions = {
|
||||
canHandleDiff: () => !!this._configurationService.getValue(NotebookTextDiffEditorPreview) && !this._accessibilityService.isScreenReaderOptimized(),
|
||||
canSupportResource: (resource: URI) => resource.scheme === Schemas.untitled || resource.scheme === Schemas.vscodeNotebookCell || this._fileService.canHandleResource(resource)
|
||||
canSupportResource: (resource: URI) => resource.scheme === Schemas.untitled || resource.scheme === Schemas.vscodeNotebookCell || this._fileService.hasProvider(resource)
|
||||
};
|
||||
const notebookEditorInputFactory: EditorInputFactoryFunction = ({ resource, options }) => {
|
||||
const data = CellUri.parse(resource);
|
||||
@@ -266,12 +267,16 @@ export class NotebookProviderInfoStore extends Disposable {
|
||||
}
|
||||
|
||||
export class NotebookOutputRendererInfoStore {
|
||||
private readonly contributedRenderers = new Map<string, NotebookOutputRendererInfo>();
|
||||
private readonly contributedRenderers = new Map</* rendererId */ string, NotebookOutputRendererInfo>();
|
||||
private readonly preferredMimetypeMemento: Memento;
|
||||
private readonly preferredMimetype = new Lazy(() => this.preferredMimetypeMemento.getMemento(StorageScope.WORKSPACE, StorageTarget.USER));
|
||||
private readonly preferredMimetype = new Lazy<{ [notebookType: string]: { [mimeType: string]: /* rendererId */ string } }>(
|
||||
() => this.preferredMimetypeMemento.getMemento(StorageScope.WORKSPACE, StorageTarget.USER));
|
||||
|
||||
constructor(@IStorageService storageService: IStorageService) {
|
||||
this.preferredMimetypeMemento = new Memento('workbench.editor.notebook.preferredRenderer', storageService);
|
||||
constructor(
|
||||
@IStorageService storageService: IStorageService,
|
||||
@IWorkspaceTrustManagementService private readonly workspaceTrustManagementService: IWorkspaceTrustManagementService,
|
||||
) {
|
||||
this.preferredMimetypeMemento = new Memento('workbench.editor.notebook.preferredRenderer2', storageService);
|
||||
}
|
||||
|
||||
clear() {
|
||||
@@ -294,25 +299,65 @@ export class NotebookOutputRendererInfoStore {
|
||||
}
|
||||
|
||||
/** Update and remember the preferred renderer for the given mimetype in this workspace */
|
||||
setPreferred(mimeType: string, rendererId: string) {
|
||||
this.preferredMimetype.getValue()[mimeType] = rendererId;
|
||||
setPreferred(notebookProviderInfo: NotebookProviderInfo, mimeType: string, rendererId: string) {
|
||||
const mementoObj = this.preferredMimetype.getValue();
|
||||
const forNotebook = mementoObj[notebookProviderInfo.id];
|
||||
if (forNotebook) {
|
||||
forNotebook[mimeType] = rendererId;
|
||||
} else {
|
||||
mementoObj[notebookProviderInfo.id] = { [mimeType]: rendererId };
|
||||
}
|
||||
|
||||
this.preferredMimetypeMemento.saveMemento();
|
||||
}
|
||||
|
||||
getContributedRenderer(mimeType: string, kernelProvides: readonly string[] | undefined): NotebookOutputRendererInfo[] {
|
||||
const preferred = this.preferredMimetype.getValue()[mimeType];
|
||||
const possible = Array.from(this.contributedRenderers.values())
|
||||
.map(renderer => ({
|
||||
renderer,
|
||||
score: kernelProvides === undefined
|
||||
? renderer.matchesWithoutKernel(mimeType)
|
||||
: renderer.matches(mimeType, kernelProvides),
|
||||
}))
|
||||
.sort((a, b) => a.score - b.score)
|
||||
.filter(r => r.score !== NotebookRendererMatch.Never)
|
||||
.map(r => r.renderer);
|
||||
findBestRenderers(notebookProviderInfo: NotebookProviderInfo | undefined, mimeType: string, kernelProvides: readonly string[] | undefined): IOrderedMimeType[] {
|
||||
|
||||
return preferred ? possible.sort((a, b) => (a.id === preferred ? -1 : 0) + (b.id === preferred ? 1 : 0)) : possible;
|
||||
const enum ReuseOrder {
|
||||
PreviouslySelected = 1 << 8,
|
||||
SameExtensionAsNotebook = 2 << 8,
|
||||
OtherRenderer = 3 << 8,
|
||||
BuiltIn = 4 << 8,
|
||||
}
|
||||
|
||||
const preferred = notebookProviderInfo && this.preferredMimetype.getValue()[notebookProviderInfo.id]?.[mimeType];
|
||||
const renderers: { ordered: IOrderedMimeType, score: number }[] = Array.from(this.contributedRenderers.values())
|
||||
.map(renderer => {
|
||||
const ownScore = kernelProvides === undefined
|
||||
? renderer.matchesWithoutKernel(mimeType)
|
||||
: renderer.matches(mimeType, kernelProvides);
|
||||
|
||||
if (ownScore === NotebookRendererMatch.Never) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
const reuseScore = preferred === renderer.id
|
||||
? ReuseOrder.PreviouslySelected
|
||||
: renderer.extensionId.value === notebookProviderInfo?.extension?.value
|
||||
? ReuseOrder.SameExtensionAsNotebook
|
||||
: renderer.isBuiltin ? ReuseOrder.BuiltIn : ReuseOrder.OtherRenderer;
|
||||
return {
|
||||
ordered: { mimeType, rendererId: renderer.id, isTrusted: true },
|
||||
score: reuseScore | ownScore,
|
||||
};
|
||||
}).filter(isDefined);
|
||||
|
||||
if (mimeTypeSupportedByCore(mimeType)) {
|
||||
renderers.push({
|
||||
score: ReuseOrder.BuiltIn,
|
||||
ordered: {
|
||||
mimeType,
|
||||
rendererId: BUILTIN_RENDERER_ID,
|
||||
isTrusted: mimeTypeIsAlwaysSecure(mimeType) || this.workspaceTrustManagementService.isWorkspaceTrusted()
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (renderers.length === 0) {
|
||||
return [{ mimeType, rendererId: RENDERER_NOT_AVAILABLE, isTrusted: true }];
|
||||
}
|
||||
|
||||
return renderers.sort((a, b) => a.score - b.score).map(r => r.ordered);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -369,7 +414,7 @@ export class NotebookService extends Disposable implements INotebookService {
|
||||
private _cutItems: NotebookCellTextModel[] | undefined;
|
||||
private _lastClipboardIsCopy: boolean = true;
|
||||
|
||||
private _displayOrder: { userOrder: string[], defaultOrder: string[]; } = Object.create(null);
|
||||
private _displayOrder!: MimeTypeDisplayOrder;
|
||||
|
||||
constructor(
|
||||
@IExtensionService private readonly _extensionService: IExtensionService,
|
||||
@@ -378,7 +423,6 @@ export class NotebookService extends Disposable implements INotebookService {
|
||||
@IInstantiationService private readonly _instantiationService: IInstantiationService,
|
||||
@ICodeEditorService private readonly _codeEditorService: ICodeEditorService,
|
||||
@IConfigurationService private readonly configurationService: IConfigurationService,
|
||||
@IWorkspaceTrustManagementService private readonly workspaceTrustManagementService: IWorkspaceTrustManagementService,
|
||||
) {
|
||||
super();
|
||||
|
||||
@@ -413,11 +457,12 @@ export class NotebookService extends Disposable implements INotebookService {
|
||||
});
|
||||
|
||||
const updateOrder = () => {
|
||||
const userOrder = this._configurationService.getValue<string[]>(DisplayOrderKey);
|
||||
this._displayOrder = {
|
||||
defaultOrder: this._accessibilityService.isScreenReaderOptimized() ? ACCESSIBLE_NOTEBOOK_DISPLAY_ORDER : [],
|
||||
userOrder: userOrder
|
||||
};
|
||||
this._displayOrder = new MimeTypeDisplayOrder(
|
||||
this._configurationService.getValue<string[]>(DisplayOrderKey) || [],
|
||||
this._accessibilityService.isScreenReaderOptimized()
|
||||
? ACCESSIBLE_NOTEBOOK_DISPLAY_ORDER
|
||||
: NOTEBOOK_DISPLAY_ORDER,
|
||||
);
|
||||
};
|
||||
|
||||
updateOrder();
|
||||
@@ -571,8 +616,17 @@ export class NotebookService extends Disposable implements INotebookService {
|
||||
return this._notebookRenderersInfoStore.get(rendererId);
|
||||
}
|
||||
|
||||
updateMimePreferredRenderer(mimeType: string, rendererId: string): void {
|
||||
this._notebookRenderersInfoStore.setPreferred(mimeType, rendererId);
|
||||
updateMimePreferredRenderer(viewType: string, mimeType: string, rendererId: string, otherMimetypes: readonly string[]): void {
|
||||
const info = this.notebookProviderInfoStore.get(viewType);
|
||||
if (info) {
|
||||
this._notebookRenderersInfoStore.setPreferred(info, mimeType, rendererId);
|
||||
}
|
||||
|
||||
this._displayOrder.prioritize(mimeType, otherMimetypes);
|
||||
}
|
||||
|
||||
saveMimeDisplayOrder(target: ConfigurationTarget) {
|
||||
this._configurationService.updateValue(DisplayOrderKey, this._displayOrder.toArray(), target);
|
||||
}
|
||||
|
||||
getRenderers(): INotebookRendererInfo[] {
|
||||
@@ -616,64 +670,12 @@ export class NotebookService extends Disposable implements INotebookService {
|
||||
}
|
||||
|
||||
getOutputMimeTypeInfo(textModel: NotebookTextModel, kernelProvides: readonly string[] | undefined, output: IOutputDto): readonly IOrderedMimeType[] {
|
||||
const sorted = this._displayOrder.sort(new Set<string>(output.outputs.map(op => op.mime)));
|
||||
const notebookProviderInfo = this.notebookProviderInfoStore.get(textModel.viewType);
|
||||
|
||||
const mimeTypeSet = new Set<string>(output.outputs.map(op => op.mime));
|
||||
const mimeTypes: string[] = [...mimeTypeSet];
|
||||
|
||||
const coreDisplayOrder = this._displayOrder;
|
||||
const sorted = sortMimeTypes(mimeTypes, coreDisplayOrder?.userOrder ?? [], coreDisplayOrder?.defaultOrder ?? []);
|
||||
|
||||
const orderMimeTypes: IOrderedMimeType[] = [];
|
||||
|
||||
sorted.forEach(mimeType => {
|
||||
const handlers = this._findBestMatchedRenderer(mimeType, kernelProvides);
|
||||
|
||||
if (handlers.length) {
|
||||
const handler = handlers[0];
|
||||
|
||||
orderMimeTypes.push({
|
||||
mimeType: mimeType,
|
||||
rendererId: handler.id,
|
||||
isTrusted: true
|
||||
});
|
||||
|
||||
for (let i = 1; i < handlers.length; i++) {
|
||||
orderMimeTypes.push({
|
||||
mimeType: mimeType,
|
||||
rendererId: handlers[i].id,
|
||||
isTrusted: true
|
||||
});
|
||||
}
|
||||
|
||||
if (mimeTypeSupportedByCore(mimeType)) {
|
||||
orderMimeTypes.push({
|
||||
mimeType: mimeType,
|
||||
rendererId: BUILTIN_RENDERER_ID,
|
||||
isTrusted: mimeTypeIsAlwaysSecure(mimeType) || this.workspaceTrustManagementService.isWorkspaceTrusted()
|
||||
});
|
||||
}
|
||||
} else {
|
||||
if (mimeTypeSupportedByCore(mimeType)) {
|
||||
orderMimeTypes.push({
|
||||
mimeType: mimeType,
|
||||
rendererId: BUILTIN_RENDERER_ID,
|
||||
isTrusted: mimeTypeIsAlwaysSecure(mimeType) || this.workspaceTrustManagementService.isWorkspaceTrusted()
|
||||
});
|
||||
} else {
|
||||
orderMimeTypes.push({
|
||||
mimeType: mimeType,
|
||||
rendererId: RENDERER_NOT_AVAILABLE,
|
||||
isTrusted: true
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return orderMimeTypes;
|
||||
}
|
||||
|
||||
private _findBestMatchedRenderer(mimeType: string, kernelProvides: readonly string[] | undefined): readonly NotebookOutputRendererInfo[] {
|
||||
return this._notebookRenderersInfoStore.getContributedRenderer(mimeType, kernelProvides);
|
||||
return sorted
|
||||
.flatMap(mimeType => this._notebookRenderersInfoStore.findBestRenderers(notebookProviderInfo, mimeType, kernelProvides))
|
||||
.sort((a, b) => (a.rendererId === RENDERER_NOT_AVAILABLE ? 1 : 0) - (b.rendererId === RENDERER_NOT_AVAILABLE ? 1 : 0));
|
||||
}
|
||||
|
||||
getContributedNotebookTypes(resource?: URI): readonly NotebookProviderInfo[] {
|
||||
@@ -715,3 +717,4 @@ export class NotebookService extends Disposable implements INotebookService {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user