Skip to content

Commit c24eed1

Browse files
committed
Replace the listInstances method with utility functions
1 parent dbff586 commit c24eed1

File tree

5 files changed

+445
-29
lines changed

5 files changed

+445
-29
lines changed

src/vs/workbench/contrib/inlineChat/browser/inlineChatNotebook.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import { NotebookTextDiffEditor } from '../../notebook/browser/diff/notebookDiff
1717
import { NotebookMultiTextDiffEditor } from '../../notebook/browser/diff/notebookMultiDiffEditor.js';
1818
// --- Start Positron ---
1919
// Imports to support inline chat in Positron notebooks.
20-
import { IPositronNotebookService } from '../../positronNotebook/browser/positronNotebookService.js';
20+
import { getAllPositronNotebookInstances } from '../../positronNotebook/browser/notebookUtils.js';
2121
// --- End Positron ---
2222

2323
export class InlineChatNotebookContribution {
@@ -28,10 +28,6 @@ export class InlineChatNotebookContribution {
2828
@IInlineChatSessionService sessionService: IInlineChatSessionService,
2929
@IEditorService editorService: IEditorService,
3030
@INotebookEditorService notebookEditorService: INotebookEditorService,
31-
// --- Start Positron ---
32-
// Imports to support inline chat in Positron notebooks.
33-
@IPositronNotebookService positronNotebookService: IPositronNotebookService,
34-
// --- End Positron ---
3531
) {
3632

3733
this._store.add(sessionService.registerSessionKeyComputer(Schemas.vscodeNotebookCell, {
@@ -68,7 +64,7 @@ export class InlineChatNotebookContribution {
6864
// --- Start Positron ---
6965
// To support inline chat in Positron notebooks:
7066
// construct a session comparison key from the corresponding notebook
71-
for (const positronInstance of positronNotebookService.listInstances(data.notebook)) {
67+
for (const positronInstance of getAllPositronNotebookInstances(editorService, data.notebook)) {
7268
const candidate = `<positron-notebook>${positronInstance.id}#${uri}`;
7369
if (!fallback) {
7470
fallback = candidate;
@@ -120,7 +116,7 @@ export class InlineChatNotebookContribution {
120116
// --- Start Positron ---
121117
// To support inline chat in Positron notebooks:
122118
// cancel existing chat sessions when a new one is started.
123-
for (const positronInstance of positronNotebookService.listInstances(candidate.notebook)) {
119+
for (const positronInstance of getAllPositronNotebookInstances(editorService, candidate.notebook)) {
124120
if (positronInstance.hasCodeEditor(newSessionEditor)) {
125121
for (const { editor } of positronInstance.cells.get()) {
126122
if (editor && editor !== newSessionEditor) {

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

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ import { getFormattedNotebookMetadataJSON } from '../common/model/notebookMetada
142142
import { NotebookOutputEditor } from './outputEditor/notebookOutputEditor.js';
143143
import { NotebookOutputEditorInput } from './outputEditor/notebookOutputEditorInput.js';
144144
// --- Start Positron ---
145-
import { IPositronNotebookService } from '../../positronNotebook/browser/positronNotebookService.js';
145+
import { hasConnectedNotebookForUri } from '../../positronNotebook/browser/notebookUtils.js';
146146
// --- End Positron ---
147147

148148
/*--------------------------------------------------------------------------------------------- */
@@ -774,9 +774,6 @@ class NotebookEditorManager implements IWorkbenchContribution {
774774
constructor(
775775
@IEditorService private readonly _editorService: IEditorService,
776776
@INotebookEditorModelResolverService private readonly _notebookEditorModelService: INotebookEditorModelResolverService,
777-
// --- Start Positron ---
778-
@IPositronNotebookService private readonly _positronNotebookService: IPositronNotebookService,
779-
// --- End Positron ---
780777
@IEditorGroupsService editorGroups: IEditorGroupsService
781778
) {
782779
// OPEN notebook editor for models that have turned dirty without being visible in an editor
@@ -808,8 +805,7 @@ class NotebookEditorManager implements IWorkbenchContribution {
808805
// --- Start Positron ---
809806
// Make sure that we dont try and open the same editor twice if we're using positron
810807
// notebooks.
811-
const positronInstances = this._positronNotebookService.listInstances(model.resource);
812-
if (positronInstances.some(instance => instance.connectedToEditor)) {
808+
if (hasConnectedNotebookForUri(this._editorService, model.resource)) {
813809
continue;
814810
}
815811
// --- End Positron ---

src/vs/workbench/contrib/positronNotebook/browser/notebookUtils.ts

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
* Licensed under the Elastic License 2.0. See LICENSE.txt for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6+
import { URI } from '../../../../base/common/uri.js';
7+
import { isEqual } from '../../../../base/common/resources.js';
68
import { IEditorService } from '../../../services/editor/common/editorService.js';
79
import { IPositronNotebookInstance } from './IPositronNotebookInstance.js';
810
import { PositronNotebookEditor } from './PositronNotebookEditor.js';
@@ -26,3 +28,56 @@ export function getActiveNotebook(editorService: IEditorService): IPositronNoteb
2628
const activeNotebook = (activeEditorPane as PositronNotebookEditor).notebookInstance;
2729
return activeNotebook;
2830
}
31+
32+
/**
33+
* Checks if any notebook instance for a given URI is connected to an editor.
34+
*
35+
* @param editorService The editor service
36+
* @param uri The notebook URI to check
37+
* @returns True if any notebook instance for this URI is connected to an editor, false otherwise
38+
*/
39+
export function hasConnectedNotebookForUri(
40+
editorService: IEditorService,
41+
uri: URI
42+
): boolean {
43+
for (const editorPane of editorService.visibleEditorPanes) {
44+
if (editorPane.getId() === POSITRON_NOTEBOOK_EDITOR_ID) {
45+
const notebookEditor = editorPane as PositronNotebookEditor;
46+
const instance = notebookEditor.notebookInstance;
47+
48+
if (instance && isEqual(instance.uri, uri) && instance.connectedToEditor) {
49+
return true;
50+
}
51+
}
52+
}
53+
return false;
54+
}
55+
56+
/**
57+
* Retrieves all Positron notebook instances from visible editor panes.
58+
*
59+
* @param editorService The editor service
60+
* @param uri Optional URI to filter instances by
61+
* @returns Array of all notebook instances, optionally filtered by URI
62+
*/
63+
export function getAllPositronNotebookInstances(
64+
editorService: IEditorService,
65+
uri?: URI
66+
): IPositronNotebookInstance[] {
67+
const instances: IPositronNotebookInstance[] = [];
68+
69+
for (const editorPane of editorService.visibleEditorPanes) {
70+
if (editorPane.getId() === POSITRON_NOTEBOOK_EDITOR_ID) {
71+
const notebookEditor = editorPane as PositronNotebookEditor;
72+
const instance = notebookEditor.notebookInstance;
73+
74+
if (instance) {
75+
if (!uri || isEqual(instance.uri, uri)) {
76+
instances.push(instance);
77+
}
78+
}
79+
}
80+
}
81+
82+
return instances;
83+
}

src/vs/workbench/contrib/positronNotebook/browser/positronNotebookService.ts

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,11 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import { Disposable } from '../../../../base/common/lifecycle.js';
7-
import { URI } from '../../../../base/common/uri.js';
87
import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js';
98
import { InstantiationType, registerSingleton } from '../../../../platform/instantiation/common/extensions.js';
109
import { createDecorator } from '../../../../platform/instantiation/common/instantiation.js';
1110
import { IPositronNotebookInstance } from './IPositronNotebookInstance.js';
1211
import { usingPositronNotebooks as utilUsingPositronNotebooks } from '../common/positronNotebookCommon.js';
13-
import { isEqual } from '../../../../base/common/resources.js';
1412

1513
export const IPositronNotebookService = createDecorator<IPositronNotebookService>('positronNotebookService');
1614
export interface IPositronNotebookService {
@@ -24,12 +22,6 @@ export interface IPositronNotebookService {
2422
*/
2523
initialize(): void;
2624

27-
/**
28-
* Get all notebook instances currently running.
29-
* @param uri The optional notebook URI to filter instances by.
30-
*/
31-
listInstances(uri?: URI): Array<IPositronNotebookInstance>;
32-
3325
/**
3426
* Register a new notebook instance.
3527
* @param instance The instance to register.
@@ -76,14 +68,6 @@ class PositronNotebookService extends Disposable implements IPositronNotebookSer
7668
// Placeholder.
7769
}
7870

79-
public listInstances(uri?: URI): Array<IPositronNotebookInstance> {
80-
let instances = Array.from(this._instanceById.values());
81-
if (uri) {
82-
instances = instances.filter(instance => isEqual(instance.uri, uri));
83-
}
84-
return instances;
85-
}
86-
8771
public registerInstance(instance: IPositronNotebookInstance): void {
8872
if (!this._instanceById.has(instance.id)) {
8973
this._instanceById.set(instance.id, instance);

0 commit comments

Comments
 (0)