@@ -25,6 +25,8 @@ import {
25
25
ThemeIcon ,
26
26
TreeItem ,
27
27
TreeItemCollapsibleState ,
28
+ extensions ,
29
+ window ,
28
30
} from "vscode" ;
29
31
import { URI } from "vscode-uri" ;
30
32
import {
@@ -261,7 +263,22 @@ class ScopeSupportTreeItem extends TreeItem {
261
263
} ;
262
264
263
265
if ( scopeTypeInfo . isLanguageSpecific ) {
264
- this . iconPath = new ThemeIcon ( "code" ) ;
266
+ const languageId = window . activeTextEditor ?. document . languageId ;
267
+ if ( languageId != null ) {
268
+ const fileExtension = getLanguageExtensionSampleFromLanguageId (
269
+ window . activeTextEditor ! . document . languageId ,
270
+ ) ;
271
+ if ( fileExtension != null ) {
272
+ this . resourceUri = URI . parse (
273
+ "cursorless-dummy://dummy/dummy" + fileExtension ,
274
+ ) ;
275
+ }
276
+ }
277
+
278
+ if ( this . resourceUri == null ) {
279
+ // Fall back to a generic icon
280
+ this . iconPath = new ThemeIcon ( "code" ) ;
281
+ }
265
282
}
266
283
}
267
284
}
@@ -300,3 +317,29 @@ class SupportCategoryTreeItem extends TreeItem {
300
317
}
301
318
302
319
type MyTreeItem = ScopeSupportTreeItem | SupportCategoryTreeItem ;
320
+
321
+ /**
322
+ * Get file extension example from vscode [Language Id](https://code.visualstudio.com/docs/languages/identifiers)
323
+ * Would've been easier with https://github.com/microsoft/vscode/issues/109919
324
+ * Example:
325
+ * - 'typescript' => '.ts'
326
+ * FIXME: Maybe memoise?
327
+ */
328
+ export function getLanguageExtensionSampleFromLanguageId (
329
+ languageId : string ,
330
+ ) : string | undefined {
331
+ for ( const extension of extensions . all ) {
332
+ const languages : { id : string ; extensions : string [ ] } [ ] | undefined =
333
+ extension . packageJSON ?. contributes ?. languages ;
334
+
335
+ if ( ! languages ) {
336
+ continue ;
337
+ }
338
+
339
+ for ( const contributedLanguage of languages ) {
340
+ if ( contributedLanguage . id === languageId ) {
341
+ return contributedLanguage . extensions [ 0 ] ;
342
+ }
343
+ }
344
+ }
345
+ }
0 commit comments