@@ -90,8 +90,16 @@ namespace ts.server {
90
90
}
91
91
}
92
92
93
+ export interface PluginCreateInfo {
94
+ project : Project ;
95
+ languageService : LanguageService ;
96
+ serverHost : ServerHost ;
97
+ config : any ;
98
+ }
99
+
93
100
export interface PluginModule {
94
- create ( proj : Project , languageService : LanguageService , config : any ) : LanguageService ;
101
+ create ( createInfo : PluginCreateInfo ) : LanguageService ;
102
+ getExternalFiles ?( proj : Project ) : string [ ] ;
95
103
}
96
104
97
105
export abstract class Project {
@@ -763,6 +771,8 @@ namespace ts.server {
763
771
private directoriesWatchedForWildcards : Map < FileWatcher > ;
764
772
private typeRootsWatchers : FileWatcher [ ] ;
765
773
774
+ private plugins : PluginModule [ ] = [ ] ;
775
+
766
776
/** Used for configured projects which may have multiple open roots */
767
777
openRefCount = 0 ;
768
778
@@ -806,7 +816,14 @@ namespace ts.server {
806
816
807
817
private enableProxy ( pluginModule : PluginModule , configEntry : PluginImport ) {
808
818
try {
809
- this . languageService = pluginModule . create ( this , this . languageService , configEntry ) ;
819
+ const info : PluginCreateInfo = {
820
+ config : configEntry ,
821
+ project : this ,
822
+ languageService : this . languageService ,
823
+ serverHost : this . projectService . host
824
+ } ;
825
+ this . languageService = pluginModule . create ( info ) ;
826
+ this . plugins . push ( pluginModule ) ;
810
827
}
811
828
catch ( e ) {
812
829
this . projectService . logger . info ( `Plugin activation failed: ${ e } ` ) ;
@@ -834,8 +851,13 @@ namespace ts.server {
834
851
}
835
852
836
853
getExternalFiles ( ) : string [ ] {
837
- // TODO: Ask plugins for this information as well
838
- return [ ] ;
854
+ const items : string [ ] = [ ] ;
855
+ for ( const plugin of this . plugins ) {
856
+ if ( plugin . getExternalFiles ) {
857
+ items . push ( ...plugin . getExternalFiles ( this ) ) ;
858
+ }
859
+ }
860
+ return items ;
839
861
}
840
862
841
863
watchConfigFile ( callback : ( project : ConfiguredProject ) => void ) {
0 commit comments