@@ -171,8 +171,16 @@ namespace ts.server {
171
171
} ;
172
172
}
173
173
174
+ export interface PluginCreateInfo {
175
+ project : Project ;
176
+ languageService : LanguageService ;
177
+ serverHost : ServerHost ;
178
+ config : any ;
179
+ }
180
+
174
181
export interface PluginModule {
175
- create ( proj : Project , languageService : LanguageService , config : any ) : LanguageService ;
182
+ create ( createInfo : PluginCreateInfo ) : LanguageService ;
183
+ getExternalFiles ?( proj : Project ) : string [ ] ;
176
184
}
177
185
178
186
export abstract class Project {
@@ -855,6 +863,8 @@ namespace ts.server {
855
863
private directoriesWatchedForWildcards : Map < FileWatcher > ;
856
864
private typeRootsWatchers : FileWatcher [ ] ;
857
865
866
+ private plugins : PluginModule [ ] = [ ] ;
867
+
858
868
/** Used for configured projects which may have multiple open roots */
859
869
openRefCount = 0 ;
860
870
@@ -902,7 +912,14 @@ namespace ts.server {
902
912
903
913
private enableProxy ( pluginModule : PluginModule , configEntry : PluginImport ) {
904
914
try {
905
- this . languageService = pluginModule . create ( this , this . languageService , configEntry ) ;
915
+ const info : PluginCreateInfo = {
916
+ config : configEntry ,
917
+ project : this ,
918
+ languageService : this . languageService ,
919
+ serverHost : this . projectService . host
920
+ } ;
921
+ this . languageService = pluginModule . create ( info ) ;
922
+ this . plugins . push ( pluginModule ) ;
906
923
}
907
924
catch ( e ) {
908
925
this . projectService . logger . info ( `Plugin activation failed: ${ e } ` ) ;
@@ -930,8 +947,13 @@ namespace ts.server {
930
947
}
931
948
932
949
getExternalFiles ( ) : string [ ] {
933
- // TODO: Ask plugins for this information as well
934
- return [ ] ;
950
+ const items : string [ ] = [ ] ;
951
+ for ( const plugin of this . plugins ) {
952
+ if ( plugin . getExternalFiles ) {
953
+ items . push ( ...plugin . getExternalFiles ( this ) ) ;
954
+ }
955
+ }
956
+ return items ;
935
957
}
936
958
937
959
watchConfigFile ( callback : ( project : ConfiguredProject ) => void ) {
0 commit comments