Skip to content

Commit b28c2de

Browse files
authored
1 parent 0f8cab3 commit b28c2de

File tree

7 files changed

+37
-24
lines changed

7 files changed

+37
-24
lines changed

src/vs/editor/common/languageSelector.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,3 +131,14 @@ export function score(selector: LanguageSelector | undefined, candidateUri: URI,
131131
return 0;
132132
}
133133
}
134+
135+
136+
export function targetsNotebooks(selector: LanguageSelector): boolean {
137+
if (typeof selector === 'string') {
138+
return false;
139+
} else if (Array.isArray(selector)) {
140+
return selector.some(targetsNotebooks);
141+
} else {
142+
return !!(<LanguageFilter>selector).notebookType;
143+
}
144+
}

src/vs/workbench/api/common/extHost.api.impl.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { Schemas, matchesScheme } from 'vs/base/common/network';
1111
import Severity from 'vs/base/common/severity';
1212
import { URI } from 'vs/base/common/uri';
1313
import { TextEditorCursorStyle } from 'vs/editor/common/config/editorOptions';
14-
import { score } from 'vs/editor/common/languageSelector';
14+
import { score, targetsNotebooks } from 'vs/editor/common/languageSelector';
1515
import * as languageConfiguration from 'vs/editor/common/languages/languageConfiguration';
1616
import { OverviewRulerLane } from 'vs/editor/common/model';
1717
import { ExtensionIdentifierSet, IExtensionDescription } from 'vs/platform/extensions/common/extensions';
@@ -533,8 +533,12 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I
533533
return extHostLanguages.changeLanguage(document.uri, languageId);
534534
},
535535
match(selector: vscode.DocumentSelector, document: vscode.TextDocument): number {
536-
const notebook = extHostDocuments.getDocumentData(document.uri)?.notebook;
537-
return score(typeConverters.LanguageSelector.from(selector), document.uri, document.languageId, true, notebook?.uri, notebook?.notebookType);
536+
const interalSelector = typeConverters.LanguageSelector.from(selector);
537+
let notebook: vscode.NotebookDocument | undefined;
538+
if (targetsNotebooks(interalSelector)) {
539+
notebook = extHostNotebook.notebookDocuments.find(value => Boolean(value.getCell(document.uri)))?.apiNotebook;
540+
}
541+
return score(interalSelector, document.uri, document.languageId, true, notebook?.uri, notebook?.notebookType);
538542
},
539543
registerCodeActionsProvider(selector: vscode.DocumentSelector, provider: vscode.CodeActionProvider, metadata?: vscode.CodeActionProviderMetadata): vscode.Disposable {
540544
return extHostLanguageFeatures.registerCodeActionProvider(extension, checkSelector(selector), provider, metadata);

src/vs/workbench/api/common/extHostDocumentData.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ export class ExtHostDocumentData extends MirrorTextModel {
3737
uri: URI, lines: string[], eol: string, versionId: number,
3838
private _languageId: string,
3939
private _isDirty: boolean,
40-
public readonly notebook?: vscode.NotebookDocument | undefined
4140
) {
4241
super(uri, lines, eol, versionId);
4342
}

src/vs/workbench/api/common/extHostDocumentsAndEditors.ts

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { Emitter, Event } from 'vs/base/common/event';
99
import { dispose } from 'vs/base/common/lifecycle';
1010
import { URI } from 'vs/base/common/uri';
1111
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
12-
import { ExtHostDocumentsAndEditorsShape, IDocumentsAndEditorsDelta, IModelAddedData, MainContext } from 'vs/workbench/api/common/extHost.protocol';
12+
import { ExtHostDocumentsAndEditorsShape, IDocumentsAndEditorsDelta, MainContext } from 'vs/workbench/api/common/extHost.protocol';
1313
import { ExtHostDocumentData } from 'vs/workbench/api/common/extHostDocumentData';
1414
import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService';
1515
import { ExtHostTextEditor } from 'vs/workbench/api/common/extHostTextEditor';
@@ -31,14 +31,6 @@ class Reference<T> {
3131
}
3232
}
3333

34-
export interface IExtHostModelAddedData extends IModelAddedData {
35-
notebook?: vscode.NotebookDocument;
36-
}
37-
38-
export interface IExtHostDocumentsAndEditorsDelta extends IDocumentsAndEditorsDelta {
39-
addedDocuments?: IExtHostModelAddedData[];
40-
}
41-
4234
export class ExtHostDocumentsAndEditors implements ExtHostDocumentsAndEditorsShape {
4335

4436
readonly _serviceBrand: undefined;
@@ -67,7 +59,7 @@ export class ExtHostDocumentsAndEditors implements ExtHostDocumentsAndEditorsSha
6759
this.acceptDocumentsAndEditorsDelta(delta);
6860
}
6961

70-
acceptDocumentsAndEditorsDelta(delta: IExtHostDocumentsAndEditorsDelta): void {
62+
acceptDocumentsAndEditorsDelta(delta: IDocumentsAndEditorsDelta): void {
7163

7264
const removedDocuments: ExtHostDocumentData[] = [];
7365
const addedDocuments: ExtHostDocumentData[] = [];
@@ -105,7 +97,6 @@ export class ExtHostDocumentsAndEditors implements ExtHostDocumentsAndEditorsSha
10597
data.versionId,
10698
data.languageId,
10799
data.isDirty,
108-
data.notebook
109100
));
110101
this._documents.set(resource, ref);
111102
addedDocuments.push(ref.value);

src/vs/workbench/api/common/extHostInteractive.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ export class ExtHostInteractive implements ExtHostInteractiveShape {
5252
uri: uri,
5353
isDirty: false,
5454
versionId: 1,
55-
notebook: this._extHostNotebooks.getNotebookDocument(URI.revive(notebookUri))?.apiNotebook
5655
}]
5756
});
5857
}

src/vs/workbench/api/common/extHostNotebook.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -625,7 +625,7 @@ export class ExtHostNotebookController implements ExtHostNotebookShape {
625625
);
626626

627627
// add cell document as vscode.TextDocument
628-
addedCellDocuments.push(...modelData.cells.map(cell => ExtHostCell.asModelAddData(document.apiNotebook, cell)));
628+
addedCellDocuments.push(...modelData.cells.map(cell => ExtHostCell.asModelAddData(cell)));
629629

630630
this._documents.get(uri)?.dispose();
631631
this._documents.set(uri, document);

src/vs/workbench/api/common/extHostNotebookDocument.ts

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { Schemas } from 'vs/base/common/network';
77
import { URI } from 'vs/base/common/uri';
88
import * as extHostProtocol from 'vs/workbench/api/common/extHost.protocol';
99
import { ExtHostDocuments } from 'vs/workbench/api/common/extHostDocuments';
10-
import { ExtHostDocumentsAndEditors, IExtHostModelAddedData } from 'vs/workbench/api/common/extHostDocumentsAndEditors';
10+
import { ExtHostDocumentsAndEditors } from 'vs/workbench/api/common/extHostDocumentsAndEditors';
1111
import * as extHostTypeConverters from 'vs/workbench/api/common/extHostTypeConverters';
1212
import { NotebookRange } from 'vs/workbench/api/common/extHostTypes';
1313
import * as notebookCommon from 'vs/workbench/contrib/notebook/common/notebookCommon';
@@ -33,15 +33,14 @@ class RawContentChangeEvent {
3333

3434
export class ExtHostCell {
3535

36-
static asModelAddData(notebook: vscode.NotebookDocument, cell: extHostProtocol.NotebookCellDto): IExtHostModelAddedData {
36+
static asModelAddData(cell: extHostProtocol.NotebookCellDto): extHostProtocol.IModelAddedData {
3737
return {
3838
EOL: cell.eol,
3939
lines: cell.source,
4040
languageId: cell.language,
4141
uri: cell.uri,
4242
isDirty: false,
43-
versionId: 1,
44-
notebook
43+
versionId: 1
4544
};
4645
}
4746

@@ -356,7 +355,7 @@ export class ExtHostNotebookDocument {
356355
}
357356

358357
const contentChangeEvents: RawContentChangeEvent[] = [];
359-
const addedCellDocuments: IExtHostModelAddedData[] = [];
358+
const addedCellDocuments: extHostProtocol.IModelAddedData[] = [];
360359
const removedCellDocuments: URI[] = [];
361360

362361
splices.reverse().forEach(splice => {
@@ -365,7 +364,7 @@ export class ExtHostNotebookDocument {
365364

366365
const extCell = new ExtHostCell(this, this._textDocumentsAndEditors, cell);
367366
if (!initialization) {
368-
addedCellDocuments.push(ExtHostCell.asModelAddData(this.apiNotebook, cell));
367+
addedCellDocuments.push(ExtHostCell.asModelAddData(cell));
369368
}
370369
return extCell;
371370
});
@@ -443,7 +442,17 @@ export class ExtHostNotebookDocument {
443442
return this._cells[index];
444443
}
445444

446-
getCell(cellHandle: number): ExtHostCell | undefined {
445+
getCell(cellHandle: number | URI): ExtHostCell | undefined {
446+
if (URI.isUri(cellHandle)) {
447+
const data = notebookCommon.CellUri.parse(cellHandle);
448+
if (!data) {
449+
return undefined;
450+
}
451+
if (data.notebook.toString() !== this.uri.toString()) {
452+
return undefined;
453+
}
454+
cellHandle = data.handle;
455+
}
447456
return this._cells.find(cell => cell.handle === cellHandle);
448457
}
449458

0 commit comments

Comments
 (0)