Skip to content

Commit 4595e8f

Browse files
author
aiday-mar
committed
work in progress
1 parent c416626 commit 4595e8f

File tree

3 files changed

+61
-2
lines changed

3 files changed

+61
-2
lines changed

src/vs/editor/contrib/folding/browser/foldingModel.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,10 @@ export class FoldingModel {
236236
this._decorationProvider.removeDecorations(this._editorDecorationIds);
237237
}
238238

239+
getRegions() {
240+
return this._regions;
241+
}
242+
239243
getAllRegionsAtLine(lineNumber: number, filter?: (r: FoldingRegion, level: number) => boolean): FoldingRegion[] {
240244
const result: FoldingRegion[] = [];
241245
if (this._regions) {

src/vs/editor/contrib/folding/browser/foldingRanges.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,14 @@ export class FoldingRegions {
100100
}
101101
}
102102

103+
public getStartIndexes(): Uint32Array {
104+
return this._startIndexes;
105+
}
106+
107+
public getEndIndexes(): Uint32Array {
108+
return this._endIndexes;
109+
}
110+
103111
public get length(): number {
104112
return this._startIndexes.length;
105113
}

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

Lines changed: 49 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ import { RunOnceScheduler } from 'vs/base/common/async';
1313
import { Range } from 'vs/editor/common/core/range';
1414
import { Emitter } from 'vs/base/common/event';
1515
import { binarySearch } from 'vs/base/common/arrays';
16+
import { FoldingController } from 'vs/editor/contrib/folding/browser/folding';
17+
import { FoldingModel } from 'vs/editor/contrib/folding/browser/foldingModel';
1618

1719
export class StickyRange {
1820
constructor(
@@ -88,11 +90,29 @@ export class StickyLineCandidateProvider extends Disposable {
8890
if (this._editor.hasModel()) {
8991
const model = this._editor.getModel();
9092
const modelVersionId = model.getVersionId();
93+
console.log('this._languageFeaturesService.documentSymbolProvider : ', this._languageFeaturesService.documentSymbolProvider);
94+
// TODO: Actually I should probably check what method to choose in the constructor
9195
const outlineModel = await OutlineModel.create(this._languageFeaturesService.documentSymbolProvider, model, token) as OutlineModel;
9296
if (token.isCancellationRequested) {
9397
return;
9498
}
95-
this._outlineModel = StickyOutlineElement.fromOutlineModel(outlineModel);
99+
console.log('outline model : ', outlineModel);
100+
if (outlineModel.children.size !== 0) {
101+
this._outlineModel = StickyOutlineElement.fromOutlineModel(outlineModel);
102+
} else {
103+
const foldingController = FoldingController.get(this._editor);
104+
const foldingModel = await foldingController?.getFoldingModel();
105+
if (foldingModel) {
106+
this._outlineModel = StickyOutlineElement.fromFoldingModel(foldingModel);
107+
} else {
108+
this._outlineModel = new StickyOutlineElement(
109+
new StickyRange(-1, -1),
110+
[],
111+
undefined
112+
);
113+
}
114+
}
115+
console.log('this._outlineModel : ', this._outlineModel);
96116
this._modelVersionId = modelVersionId;
97117
}
98118
}
@@ -183,9 +203,32 @@ class StickyOutlineElement {
183203
}
184204
return new StickyOutlineElement(
185205
range,
186-
children
206+
children,
207+
undefined
208+
);
209+
}
210+
211+
public static fromFoldingModel(foldingModel: FoldingModel): StickyOutlineElement {
212+
const regions = foldingModel.getRegions();
213+
const startIndexes = regions.getStartIndexes();
214+
const endIndexes = regions.getEndIndexes();
215+
console.log('startIndexes : ', startIndexes);
216+
console.log('endIndexes : ', endIndexes);
217+
let range = undefined;
218+
const children = [];
219+
const stack = [];
220+
for (let i = 1; i < startIndexes.length; i++) {
221+
range = new StickyRange(startIndexes[i], endIndexes[i]);
222+
}
223+
224+
//
225+
return new StickyOutlineElement(
226+
new StickyRange(-1, -1),
227+
[],
228+
undefined
187229
);
188230
}
231+
189232
constructor(
190233
/**
191234
* Range of line numbers spanned by the current scope
@@ -195,6 +238,10 @@ class StickyOutlineElement {
195238
* Must be sorted by start line number
196239
*/
197240
public readonly children: readonly StickyOutlineElement[],
241+
/**
242+
* Parent sticky outline element
243+
*/
244+
public readonly parent: StickyOutlineElement | undefined
198245
) {
199246
}
200247
}

0 commit comments

Comments
 (0)