@@ -2,56 +2,42 @@ import * as vscode from 'vscode';
22import * as _ from 'lodash' ;
33
44export class Contributors {
5- private static readonly apiMap = new Map < string , any > ( ) ;
6-
7- public static getSnippet ( uiOptions : any ) {
8- let snippet = undefined ;
9- const contributorId = _ . get ( uiOptions , "contributorId" ) ;
10- const snippetName = _ . get ( uiOptions , "snippetName" ) ;
11- const snippetContext = _ . get ( uiOptions , "context" ) ;
12- if ( contributorId && snippetName ) {
13- const api = Contributors . apiMap . get ( contributorId ) ;
14- const snippets = api . getCodeSnippets ( snippetContext ) ;
15- snippet = snippets . get ( snippetName ) ;
16- }
17- return snippet ;
18- }
19-
20- public static add ( extensionId : string , api : any ) {
21- Contributors . apiMap . set ( extensionId , api ) ;
22- }
23-
24- private static async getApi ( extension : vscode . Extension < any > , extensionId : string ) {
25- let api : any ;
26- if ( ! extension . isActive ) {
5+ public static async getSnippet ( contributerInfo : any ) {
6+ const contributorId = _ . get ( contributerInfo , "contributorId" ) ;
7+ const extension = Contributors . getContributorExtension ( contributorId ) ;
8+ if ( extension ) {
279 try {
28- api = await extension . activate ( ) ;
10+ const api = await this . getApiPromise ( extension as vscode . Extension < any > ) ;
11+ const snippetContext = _ . get ( contributerInfo , "context" ) ;
12+ const snippets = api . getCodeSnippets ( snippetContext ) ;
13+ const snippetName = _ . get ( contributerInfo , "snippetName" ) ;
14+ return snippets . get ( snippetName ) ;
2915 } catch ( error ) {
30- console . error ( error ) ;
31- // TODO: Add Logger.error here ("Failed to activate extension", {extensionId: extensionId})
16+ const errorMessage = _ . get ( error , "stack" , _ . get ( error , "message" , error ) ) ;
17+ console . error ( errorMessage ) ;
18+ // TODO: Add Logger.error
3219 }
33- } else {
34- api = extension . exports ;
3520 }
36- return api ;
37- }
21+ }
3822
39- public static async init ( ) {
40- const allExtensions : readonly vscode . Extension < any > [ ] = vscode . extensions . all ;
41- for ( const extension of allExtensions ) {
42- const currentPackageJSON : any = _ . get ( extension , "packageJSON" ) ;
43- const extensionDependencies : string [ ] = _ . get ( currentPackageJSON , "extensionDependencies" ) ;
44- if ( ! _ . isEmpty ( extensionDependencies ) ) {
45- const codeSnippetDependancy : boolean = _ . includes ( extensionDependencies , "saposs.code-snippet" ) ;
46- if ( codeSnippetDependancy ) {
47- const extensionName : string = _ . get ( currentPackageJSON , "name" ) ;
48- const extensionPublisher : string = _ . get ( currentPackageJSON , "publisher" ) ;
49- const extensionId : string = extensionPublisher + "." + extensionName ;
50- const api = await Contributors . getApi ( extension , extensionId ) ;
51- Contributors . add ( extensionId , api ) ;
23+ private static getApiPromise ( extension : vscode . Extension < any > ) {
24+ return ( extension . isActive ? extension . exports : extension . activate ( ) ) ;
25+ }
26+
27+ private static getContributorExtension ( contributorId : string ) {
28+ return _ . find ( vscode . extensions . all , ( extension : vscode . Extension < any > ) => {
29+ const extensionDependencies : string [ ] = _ . get ( extension , "packageJSON.extensionDependencies" ) ;
30+ if ( _ . includes ( extensionDependencies , "saposs.code-snippet" ) ) {
31+ if ( contributorId === Contributors . getExtensionId ( extension ) ) {
32+ return extension ;
5233 }
5334 }
54- }
35+ } ) ;
5536 }
5637
57- }
38+ private static getExtensionId ( extension : vscode . Extension < any > ) {
39+ const extensionName : string = _ . get ( extension , "packageJSON.name" ) ;
40+ const extensionPublisher : string = _ . get ( extension , "packageJSON.publisher" ) ;
41+ return `${ extensionPublisher } .${ extensionName } ` ;
42+ }
43+ }
0 commit comments