Skip to content

Commit e8667df

Browse files
committed
notebooks: still prefer built-in renders, but add equivalence for 1st party jupyter ones
Fixes microsoft#136247
1 parent 6dc49ed commit e8667df

File tree

2 files changed

+18
-5
lines changed

2 files changed

+18
-5
lines changed

src/vs/workbench/contrib/notebook/browser/notebookServiceImpl.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import { INotebookEditorOptions } from 'vs/workbench/contrib/notebook/browser/no
3030
import { NotebookDiffEditorInput } from 'vs/workbench/contrib/notebook/browser/notebookDiffEditorInput';
3131
import { NotebookCellTextModel } from 'vs/workbench/contrib/notebook/common/model/notebookCellTextModel';
3232
import { NotebookTextModel } from 'vs/workbench/contrib/notebook/common/model/notebookTextModel';
33-
import { ACCESSIBLE_NOTEBOOK_DISPLAY_ORDER, BUILTIN_RENDERER_ID, CellUri, DisplayOrderKey, INotebookContributionData, INotebookExclusiveDocumentFilter, INotebookRendererInfo, INotebookTextModel, IOrderedMimeType, IOutputDto, MimeTypeDisplayOrder, mimeTypeIsAlwaysSecure, mimeTypeSupportedByCore, NotebookData, NotebookEditorPriority, NotebookRendererMatch, NotebookTextDiffEditorPreview, NOTEBOOK_DISPLAY_ORDER, RENDERER_NOT_AVAILABLE, TransientOptions } from 'vs/workbench/contrib/notebook/common/notebookCommon';
33+
import { ACCESSIBLE_NOTEBOOK_DISPLAY_ORDER, BUILTIN_RENDERER_ID, CellUri, DisplayOrderKey, INotebookContributionData, INotebookExclusiveDocumentFilter, INotebookRendererInfo, INotebookTextModel, IOrderedMimeType, IOutputDto, MimeTypeDisplayOrder, mimeTypeIsAlwaysSecure, mimeTypeSupportedByCore, NotebookData, NotebookEditorPriority, NotebookRendererMatch, NotebookTextDiffEditorPreview, NOTEBOOK_DISPLAY_ORDER, RENDERER_EQUIVALENT_EXTENSIONS, RENDERER_NOT_AVAILABLE, TransientOptions } from 'vs/workbench/contrib/notebook/common/notebookCommon';
3434
import { NotebookEditorInput } from 'vs/workbench/contrib/notebook/common/notebookEditorInput';
3535
import { INotebookEditorModelResolverService } from 'vs/workbench/contrib/notebook/common/notebookEditorModelResolverService';
3636
import { updateEditorTopPadding } from 'vs/workbench/contrib/notebook/common/notebookOptions';
@@ -314,11 +314,12 @@ export class NotebookOutputRendererInfoStore {
314314
const enum ReuseOrder {
315315
PreviouslySelected = 1 << 8,
316316
SameExtensionAsNotebook = 2 << 8,
317-
OtherRenderer = 3 << 8,
318-
BuiltIn = 4 << 8,
317+
BuiltIn = 3 << 8,
318+
OtherRenderer = 4 << 8,
319319
}
320320

321-
const preferred = notebookProviderInfo && this.preferredMimetype.getValue()[notebookProviderInfo.id]?.[mimeType];
321+
const preferred = false && notebookProviderInfo && this.preferredMimetype.getValue()[notebookProviderInfo.id]?.[mimeType];
322+
const notebookExtId = notebookProviderInfo?.extension?.value;
322323
const renderers: { ordered: IOrderedMimeType, score: number }[] = Array.from(this.contributedRenderers.values())
323324
.map(renderer => {
324325
const ownScore = kernelProvides === undefined
@@ -329,9 +330,10 @@ export class NotebookOutputRendererInfoStore {
329330
return undefined;
330331
}
331332

333+
const rendererExtId = renderer.extensionId.value;
332334
const reuseScore = preferred === renderer.id
333335
? ReuseOrder.PreviouslySelected
334-
: renderer.extensionId.value === notebookProviderInfo?.extension?.value
336+
: rendererExtId === notebookExtId || RENDERER_EQUIVALENT_EXTENSIONS.get(rendererExtId)?.has(notebookExtId!)
335337
? ReuseOrder.SameExtensionAsNotebook
336338
: renderer.isBuiltin ? ReuseOrder.BuiltIn : ReuseOrder.OtherRenderer;
337339
return {

src/vs/workbench/contrib/notebook/common/notebookCommon.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,17 @@ export const ACCESSIBLE_NOTEBOOK_DISPLAY_ORDER: readonly string[] = [
5656
'image/jpeg',
5757
];
5858

59+
/**
60+
* A mapping of extension IDs who contain renderers, to extensions who they
61+
* should be treated as the same in the renderer selection logic. This is used
62+
* to prefer the 1st party Jupyter renderers even though they're in a separate
63+
* extension, for instance. See #136247.
64+
*/
65+
export const RENDERER_EQUIVALENT_EXTENSIONS: ReadonlyMap<string, ReadonlySet<string>> = new Map([
66+
['ms-toolsai.jupyter', new Set(['vscode.ipynb'])],
67+
['ms-toolsai.jupyter-renderers', new Set(['vscode.ipynb'])],
68+
]);
69+
5970
export const BUILTIN_RENDERER_ID = '_builtin';
6071
export const RENDERER_NOT_AVAILABLE = '_notAvailable';
6172

0 commit comments

Comments
 (0)