@@ -111,6 +111,11 @@ export class ScopeTreeProvider implements TreeDataProvider<MyTreeItem> {
111
111
this . visibleDisposable = disposableFrom (
112
112
this . scopeProvider . onDidChangeScopeSupport ( ( supportLevels ) => {
113
113
this . supportLevels = supportLevels ;
114
+ const editor = ide ( ) . activeTextEditor ;
115
+ this . selection =
116
+ editor != null && editor . selections . length === 1
117
+ ? editor . selections [ 0 ]
118
+ : null ;
114
119
this . _onDidChangeTreeData . fire ( ) ;
115
120
} ) ,
116
121
this . scopeVisualizer . onDidChangeScopeType ( ( ) => {
@@ -190,25 +195,7 @@ export class ScopeTreeProvider implements TreeDataProvider<MyTreeItem> {
190
195
isEqual ( supportLevel . scopeType , this . scopeVisualizer . scopeType ) ,
191
196
) ,
192
197
)
193
- . sort ( ( a , b ) => {
194
- if (
195
- a . scopeTypeInfo . spokenForm . type !== b . scopeTypeInfo . spokenForm . type
196
- ) {
197
- // Scopes with no spoken form are sorted to the bottom
198
- return a . scopeTypeInfo . spokenForm . type === "error" ? 1 : - 1 ;
199
- }
200
-
201
- if (
202
- a . scopeTypeInfo . isLanguageSpecific !==
203
- b . scopeTypeInfo . isLanguageSpecific
204
- ) {
205
- // Then language-specific scopes are sorted to the top
206
- return a . scopeTypeInfo . isLanguageSpecific ? - 1 : 1 ;
207
- }
208
-
209
- // Then alphabetical by label
210
- return a . label . label . localeCompare ( b . label . label ) ;
211
- } ) ;
198
+ . sort ( treeItemComparator ) ;
212
199
}
213
200
214
201
private getSelectedScopeTypes ( ) : ScopeSupportTreeItem [ ] {
@@ -236,14 +223,14 @@ export class ScopeTreeProvider implements TreeDataProvider<MyTreeItem> {
236
223
} ;
237
224
} )
238
225
. filter ( ( { length } ) => length > - 1 )
239
- . sort ( ( a , b ) => a . length - b . length )
240
226
. map ( ( { supportLevel, length } ) => {
241
- console . log ( serializeScopeType ( supportLevel . scopeType ) , length ) ;
242
227
return new ScopeSupportTreeItem (
243
228
supportLevel ,
244
229
isEqual ( supportLevel . scopeType , this . scopeVisualizer . scopeType ) ,
230
+ length ,
245
231
) ;
246
- } ) ;
232
+ } )
233
+ . sort ( treeItemComparator ) ;
247
234
}
248
235
249
236
private getScopeSupportInfo ( scopeSupport : ScopeSupport ) : ScopeSupportInfo [ ] {
@@ -270,10 +257,10 @@ function getSupportCategories(): (
270
257
| SelectedCategoryTreeItem
271
258
) [ ] {
272
259
return [
260
+ new SelectedCategoryTreeItem ( ) ,
273
261
new SupportCategoryTreeItem ( ScopeSupport . supportedAndPresentInEditor ) ,
274
262
new SupportCategoryTreeItem ( ScopeSupport . supportedButNotPresentInEditor ) ,
275
263
new SupportCategoryTreeItem ( ScopeSupport . unsupported ) ,
276
- new SelectedCategoryTreeItem ( ) ,
277
264
] ;
278
265
}
279
266
@@ -289,6 +276,7 @@ class ScopeSupportTreeItem extends TreeItem {
289
276
constructor (
290
277
public readonly scopeTypeInfo : ScopeTypeInfo ,
291
278
isVisualized : boolean ,
279
+ public priority : number = 0 ,
292
280
) {
293
281
let label : string ;
294
282
let tooltip : string ;
@@ -378,7 +366,7 @@ class SupportCategoryTreeItem extends TreeItem {
378
366
case ScopeSupport . supportedButNotPresentInEditor :
379
367
label = "Supported" ;
380
368
description = "but not present in active editor" ;
381
- collapsibleState = TreeItemCollapsibleState . Expanded ;
369
+ collapsibleState = TreeItemCollapsibleState . Collapsed ;
382
370
break ;
383
371
case ScopeSupport . unsupported :
384
372
label = "Unsupported" ;
@@ -394,7 +382,7 @@ class SupportCategoryTreeItem extends TreeItem {
394
382
395
383
class SelectedCategoryTreeItem extends TreeItem {
396
384
constructor ( ) {
397
- super ( "Selected" , TreeItemCollapsibleState . Collapsed ) ;
385
+ super ( "Selected" , TreeItemCollapsibleState . Expanded ) ;
398
386
this . description = "scopes" ;
399
387
}
400
388
}
@@ -455,3 +443,25 @@ function getSmallestTargetLength(
455
443
}
456
444
return length ?? - 1 ;
457
445
}
446
+
447
+ function treeItemComparator ( a : ScopeSupportTreeItem , b : ScopeSupportTreeItem ) {
448
+ // First by priority (lower number is higher priority)
449
+ if ( a . priority !== b . priority ) {
450
+ return a . priority - b . priority ;
451
+ }
452
+
453
+ // Scopes with no spoken form are sorted to the bottom
454
+ if ( a . scopeTypeInfo . spokenForm . type !== b . scopeTypeInfo . spokenForm . type ) {
455
+ return a . scopeTypeInfo . spokenForm . type === "error" ? 1 : - 1 ;
456
+ }
457
+
458
+ // Then language-specific scopes are sorted to the top
459
+ if (
460
+ a . scopeTypeInfo . isLanguageSpecific !== b . scopeTypeInfo . isLanguageSpecific
461
+ ) {
462
+ return a . scopeTypeInfo . isLanguageSpecific ? - 1 : 1 ;
463
+ }
464
+
465
+ // Then alphabetical by label
466
+ return a . label . label . localeCompare ( b . label . label ) ;
467
+ }
0 commit comments