Skip to content

Commit 96dcb39

Browse files
committed
No more textModel-reference in OutlineModel, microsoft#95234
1 parent aca2668 commit 96dcb39

5 files changed

Lines changed: 18 additions & 16 deletions

File tree

src/vs/editor/contrib/documentSymbols/outlineModel.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import { DocumentSymbol, DocumentSymbolProvider, DocumentSymbolProviderRegistry
1515
import { MarkerSeverity } from 'vs/platform/markers/common/markers';
1616
import { Iterable } from 'vs/base/common/iterator';
1717
import { MovingAverage } from 'vs/base/common/numbers';
18+
import { URI } from 'vs/base/common/uri';
1819

1920
export abstract class TreeElement {
2021

@@ -302,14 +303,14 @@ export class OutlineModel extends TreeElement {
302303
private static _create(textModel: ITextModel, token: CancellationToken): Promise<OutlineModel> {
303304

304305
const cts = new CancellationTokenSource(token);
305-
const result = new OutlineModel(textModel);
306+
const result = new OutlineModel(textModel.uri);
306307
const provider = DocumentSymbolProviderRegistry.ordered(textModel);
307308
const promises = provider.map((provider, index) => {
308309

309310
let id = TreeElement.findId(`provider_${index}`, result);
310311
let group = new OutlineGroup(id, result, provider.displayName ?? 'Unknown Outline Provider', index);
311312

312-
return Promise.resolve(provider.provideDocumentSymbols(result.textModel, cts.token)).then(result => {
313+
return Promise.resolve(provider.provideDocumentSymbols(textModel, cts.token)).then(result => {
313314
for (const info of result || []) {
314315
OutlineModel._makeOutlineElement(info, group);
315316
}
@@ -371,15 +372,15 @@ export class OutlineModel extends TreeElement {
371372
protected _groups = new Map<string, OutlineGroup>();
372373
children = new Map<string, OutlineGroup | OutlineElement>();
373374

374-
protected constructor(readonly textModel: ITextModel) {
375+
protected constructor(readonly uri: URI) {
375376
super();
376377

377378
this.id = 'root';
378379
this.parent = undefined;
379380
}
380381

381382
adopt(): OutlineModel {
382-
let res = new OutlineModel(this.textModel);
383+
let res = new OutlineModel(this.uri);
383384
for (const [key, value] of this._groups) {
384385
res._groups.set(key, value.adopt(res));
385386
}
@@ -410,7 +411,7 @@ export class OutlineModel extends TreeElement {
410411
}
411412

412413
merge(other: OutlineModel): boolean {
413-
if (this.textModel.uri.toString() !== other.textModel.uri.toString()) {
414+
if (this.uri.toString() !== other.uri.toString()) {
414415
return false;
415416
}
416417
if (this._groups.size !== other._groups.size) {

src/vs/editor/contrib/documentSymbols/outlineTree.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,7 @@ export class OutlineFilter implements ITreeFilter<OutlineItem> {
301301
let uri: URI | undefined;
302302

303303
if (outline) {
304-
uri = outline.textModel.uri;
304+
uri = outline.uri;
305305
}
306306

307307
if (!(element instanceof OutlineElement)) {

src/vs/workbench/browser/parts/editor/breadcrumbsControl.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -504,7 +504,7 @@ export class BreadcrumbsControl {
504504
const model = OutlineModel.get(element);
505505
if (model) {
506506
this._codeEditorService.openCodeEditor({
507-
resource: model.textModel.uri,
507+
resource: model.uri,
508508
options: {
509509
selection: Range.collapseToStart(element.symbol.selectionRange),
510510
selectionRevealType: TextEditorSelectionRevealType.CenterIfOutsideViewport
@@ -751,7 +751,7 @@ KeybindingsRegistry.registerCommandAndKeybindingRule({
751751

752752
// open symbol in editor
753753
return editors.openEditor({
754-
resource: outlineElement.textModel.uri,
754+
resource: outlineElement.uri,
755755
options: { selection: Range.collapseToStart(element.symbol.selectionRange) }
756756
}, SIDE_GROUP);
757757

src/vs/workbench/browser/parts/editor/breadcrumbsPicker.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import { OutlineVirtualDelegate, OutlineGroupRenderer, OutlineElementRenderer, O
3030
import { IIdentityProvider, IListVirtualDelegate, IKeyboardNavigationLabelProvider } from 'vs/base/browser/ui/list/list';
3131
import { IFileIconTheme, IThemeService } from 'vs/platform/theme/common/themeService';
3232
import { IListAccessibilityProvider } from 'vs/base/browser/ui/list/listWidget';
33+
import { IModeService } from 'vs/editor/common/services/modeService';
3334

3435
export function createBreadcrumbsPicker(instantiationService: IInstantiationService, parent: HTMLElement, element: BreadcrumbElement): BreadcrumbsPicker {
3536
return element instanceof FileElement
@@ -452,6 +453,7 @@ export class BreadcrumbsOutlinePicker extends BreadcrumbsPicker {
452453
@IInstantiationService instantiationService: IInstantiationService,
453454
@IThemeService themeService: IThemeService,
454455
@IConfigurationService configurationService: IConfigurationService,
456+
@IModeService private readonly _modeService: IModeService,
455457
) {
456458
super(parent, instantiationService, themeService, configurationService);
457459
this._symbolSortOrder = BreadcrumbsConfig.SymbolSortOrder.bindTo(this._configurationService);
@@ -489,10 +491,9 @@ export class BreadcrumbsOutlinePicker extends BreadcrumbsPicker {
489491
const model = OutlineModel.get(element)!;
490492
const tree = this._tree as WorkbenchDataTree<OutlineModel, any, FuzzyScore>;
491493

492-
const textModel = model.textModel;
493494
const overrideConfiguration = {
494-
resource: textModel.uri,
495-
overrideIdentifier: textModel.getLanguageIdentifier().language
495+
resource: model.uri,
496+
overrideIdentifier: this._modeService.getModeIdByFilepathOrFirstLine(model.uri)
496497
};
497498
this._outlineComparator.type = this._getOutlineItemCompareType(overrideConfiguration);
498499

src/vs/workbench/contrib/outline/browser/outlinePane.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -477,7 +477,7 @@ export class OutlinePane extends ViewPane {
477477

478478
// persist state
479479
if (oldModel) {
480-
this._treeStates.set(oldModel.textModel.uri.toString(), this._tree.getViewState());
480+
this._treeStates.set(oldModel.uri.toString(), this._tree.getViewState());
481481
}
482482

483483
if (!editor || !editor.hasModel() || !DocumentSymbolProviderRegistry.has(editor.getModel())) {
@@ -546,7 +546,7 @@ export class OutlinePane extends ViewPane {
546546
this._tree.updateChildren();
547547
newModel = oldModel;
548548
} else {
549-
let state = this._treeStates.get(newModel.textModel.uri.toString());
549+
let state = this._treeStates.get(newModel.uri.toString());
550550
this._tree.setInput(newModel, state);
551551
}
552552

@@ -584,12 +584,12 @@ export class OutlinePane extends ViewPane {
584584

585585
// feature: reveal editor selection in outline
586586
this._revealEditorSelection(newModel, editor.getSelection());
587-
const versionIdThen = newModel.textModel.getVersionId();
587+
const versionIdThen = textModel.getVersionId();
588588
this._editorDisposables.add(editor.onDidChangeCursorSelection(e => {
589589
// first check if the document has changed and stop revealing the
590590
// cursor position iff it has -> we will update/recompute the
591591
// outline view then anyways
592-
if (!newModel.textModel.isDisposed() && newModel.textModel.getVersionId() === versionIdThen) {
592+
if (!textModel.isDisposed() && textModel.getVersionId() === versionIdThen) {
593593
this._revealEditorSelection(newModel, e.selection);
594594
}
595595
}));
@@ -636,7 +636,7 @@ export class OutlinePane extends ViewPane {
636636
private async _revealTreeSelection(model: OutlineModel, element: OutlineElement, focus: boolean, aside: boolean): Promise<void> {
637637
await this._editorService.openCodeEditor(
638638
{
639-
resource: model.textModel.uri,
639+
resource: model.uri,
640640
options: {
641641
preserveFocus: !focus,
642642
selection: Range.collapseToStart(element.symbol.selectionRange),

0 commit comments

Comments
 (0)