@@ -203,9 +203,35 @@ module Harness.LanguageService {
203203 /// Shim adapter
204204 class ShimLanguageServiceHost extends LanguageServiceAdapterHost implements ts . LanguageServiceShimHost , ts . CoreServicesShimHost {
205205 private nativeHost : NativeLanguageServiceHost ;
206- constructor ( cancellationToken ?: ts . HostCancellationToken , options ?: ts . CompilerOptions ) {
206+
207+ public getModuleResolutionsForFile : ( fileName : string ) => string ;
208+
209+ constructor ( preprocessToResolve : boolean , cancellationToken ?: ts . HostCancellationToken , options ?: ts . CompilerOptions ) {
207210 super ( cancellationToken , options ) ;
208211 this . nativeHost = new NativeLanguageServiceHost ( cancellationToken , options ) ;
212+
213+ if ( preprocessToResolve ) {
214+ let compilerOptions = this . nativeHost . getCompilationSettings ( )
215+ let moduleResolutionHost : ts . ModuleResolutionHost = {
216+ fileExists : fileName => this . getScriptInfo ( fileName ) !== undefined ,
217+ readFile : fileName => {
218+ let scriptInfo = this . getScriptInfo ( fileName ) ;
219+ return scriptInfo && scriptInfo . content ;
220+ }
221+ } ;
222+ this . getModuleResolutionsForFile = ( fileName ) => {
223+ let scriptInfo = this . getScriptInfo ( fileName ) ;
224+ let preprocessInfo = ts . preProcessFile ( scriptInfo . content , /*readImportFiles*/ true ) ;
225+ let imports : ts . Map < string > = { } ;
226+ for ( let module of preprocessInfo . importedFiles ) {
227+ let resolutionInfo = ts . resolveModuleName ( module . fileName , fileName , compilerOptions , moduleResolutionHost ) ;
228+ if ( resolutionInfo . resolvedFileName ) {
229+ imports [ module . fileName ] = resolutionInfo . resolvedFileName ;
230+ }
231+ }
232+ return JSON . stringify ( imports ) ;
233+ }
234+ }
209235 }
210236
211237 getFilenames ( ) : string [ ] { return this . nativeHost . getFilenames ( ) ; }
@@ -228,7 +254,7 @@ module Harness.LanguageService {
228254
229255 readDirectory ( rootDir : string , extension : string ) : string {
230256 throw new Error ( "NYI" ) ;
231- }
257+ }
232258 fileExists ( fileName : string ) { return this . getScriptInfo ( fileName ) !== undefined ; }
233259 readFile ( fileName : string ) {
234260 let snapshot = this . nativeHost . getScriptSnapshot ( fileName ) ;
@@ -400,8 +426,8 @@ module Harness.LanguageService {
400426 export class ShimLanugageServiceAdapter implements LanguageServiceAdapter {
401427 private host : ShimLanguageServiceHost ;
402428 private factory : ts . TypeScriptServicesFactory ;
403- constructor ( cancellationToken ?: ts . HostCancellationToken , options ?: ts . CompilerOptions ) {
404- this . host = new ShimLanguageServiceHost ( cancellationToken , options ) ;
429+ constructor ( preprocessToResolve : boolean , cancellationToken ?: ts . HostCancellationToken , options ?: ts . CompilerOptions ) {
430+ this . host = new ShimLanguageServiceHost ( preprocessToResolve , cancellationToken , options ) ;
405431 this . factory = new TypeScript . Services . TypeScriptServicesFactory ( ) ;
406432 }
407433 getHost ( ) { return this . host ; }
0 commit comments