Skip to content

Commit 08e4562

Browse files
author
aiday-mar
committed
1 parent 084979a commit 08e4562

File tree

2 files changed

+41
-6
lines changed

2 files changed

+41
-6
lines changed

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,6 @@ export class OutlineModel extends TreeElement {
202202
const id = TreeElement.findId(`provider_${index}`, result);
203203
const group = new OutlineGroup(id, result, provider.displayName ?? 'Unknown Outline Provider', index);
204204

205-
console.log('provider : ', provider);
206205

207206
return Promise.resolve(provider.provideDocumentSymbols(textModel, cts.token)).then(result => {
208207
for (const info of result || []) {

src/vs/editor/contrib/stickyScroll/browser/stickyScrollProvider.ts

Lines changed: 41 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ export class StickyLineCandidateProvider extends Disposable {
4242
private _outlineModel: StickyOutlineElement | undefined;
4343
private readonly _sessionStore: DisposableStore = new DisposableStore();
4444
private _modelVersionId: number = 0;
45+
private _providerString: string = '';
4546

4647
constructor(
4748
editor: ICodeEditor,
@@ -65,10 +66,16 @@ export class StickyLineCandidateProvider extends Disposable {
6566
this._sessionStore.clear();
6667
return;
6768
} else {
68-
this._sessionStore.add(this._editor.onDidChangeModel(() => this.update()));
69+
this._sessionStore.add(this._editor.onDidChangeModel(() => {
70+
this._providerString = '';
71+
this.update();
72+
}));
6973
this._sessionStore.add(this._editor.onDidChangeHiddenAreas(() => this.update()));
7074
this._sessionStore.add(this._editor.onDidChangeModelContent(() => this._updateSoon.schedule()));
71-
this._sessionStore.add(this._languageFeaturesService.documentSymbolProvider.onDidChange(() => this.update()));
75+
this._sessionStore.add(this._languageFeaturesService.documentSymbolProvider.onDidChange(() => {
76+
this._providerString = '';
77+
this.update();
78+
}));
7279
this.update();
7380
}
7481
}
@@ -81,16 +88,45 @@ export class StickyLineCandidateProvider extends Disposable {
8188
this._cts?.dispose(true);
8289
this._cts = new CancellationTokenSource();
8390
await this.updateOutlineModel(this._cts.token);
84-
console.log('this._outlineModel : ', this._outlineModel);
8591
this.onStickyScrollChangeEmitter.fire();
8692
}
8793

94+
private findSumOfRangesOfGroup(outline: OutlineGroup | OutlineElement): number {
95+
let res = 0;
96+
if (outline.children.size !== 0) {
97+
for (const child of outline.children.values()) {
98+
res += this.findSumOfRangesOfGroup(child);
99+
}
100+
}
101+
if (outline instanceof OutlineElement) {
102+
return res + outline.symbol.range.endLineNumber - outline.symbol.selectionRange.startLineNumber;
103+
} else {
104+
return res;
105+
}
106+
}
107+
88108
private async updateOutlineModel(token: CancellationToken) {
89109
if (this._editor.hasModel()) {
90110
const model = this._editor.getModel();
91111
const modelVersionId = model.getVersionId();
92-
console.log('this._languageFeaturesService.documentSymbolProvider : ', this._languageFeaturesService.documentSymbolProvider);
93-
const outlineModel = await OutlineModel.create(this._languageFeaturesService.documentSymbolProvider, model, token) as OutlineModel;
112+
let outlineModel = await OutlineModel.create(this._languageFeaturesService.documentSymbolProvider, model, token) as OutlineModel;
113+
if (outlineModel.children.size !== 0 && outlineModel.children.values().next().value instanceof OutlineGroup) {
114+
if (outlineModel.children.has(this._providerString)) {
115+
outlineModel = outlineModel.children.get(this._providerString) as unknown as OutlineModel;
116+
} else {
117+
let providerString = '';
118+
let maxTotalSumRanges = 0;
119+
for (const [key, outlineGroup] of outlineModel.children.entries()) {
120+
const totalSumRanges = this.findSumOfRangesOfGroup(outlineGroup);
121+
if (totalSumRanges > maxTotalSumRanges) {
122+
maxTotalSumRanges = totalSumRanges;
123+
providerString = key;
124+
}
125+
}
126+
this._providerString = providerString;
127+
outlineModel = outlineModel.children.get(this._providerString) as unknown as OutlineModel;
128+
}
129+
}
94130
if (token.isCancellationRequested) {
95131
return;
96132
}

0 commit comments

Comments
 (0)