@@ -555,37 +555,26 @@ async function doValidate(conn: server.IConnection, library: any, document: serv
555
555
function createProgram ( updatedFileName : string , updatedContents : string , oldProgram ?: ts . Program ) : ts . Program {
556
556
const parsed = getParsedTsConfig ( ) ;
557
557
const host = ts . createCompilerHost ( parsed . options , true ) ;
558
+ const realGetSourceFile = host . getSourceFile ;
558
559
updatedFileName = fixSlashes ( updatedFileName ) ;
559
560
560
561
host . getSourceFile = function getSourceFile ( fileName , languageVersion , onError ) {
561
- let sourceText : string | undefined ;
562
-
563
562
if ( updatedFileName && updatedFileName . indexOf ( fixSlashes ( encodePath ( fileName ) ) ) !== - 1 ) {
564
563
// Get contents from file currently being edited in editor.
565
- sourceText = updatedContents ;
564
+ return ts . createSourceFile ( fileName , updatedContents , languageVersion , true ) ;
566
565
} else {
567
- // Get contents from file on file system.
568
- sourceText = ts . sys . readFile ( fileName ) ;
566
+ return realGetSourceFile ( fileName , languageVersion , onError ) ;
569
567
}
570
-
571
- // if (sourceText === undefined) console.log('File not found: ' + fileName);
572
-
573
- return sourceText !== undefined ? ts . createSourceFile ( fileName , sourceText , languageVersion ) : undefined ;
574
568
}
575
569
576
- host . fileExists = function fileExists ( fileName ) {
577
- return ts . sys . fileExists ( fileName ) ;
578
- } ;
579
-
580
- host . readFile = function readFile ( fileName ) {
581
- return ts . sys . readFile ( fileName ) ;
582
- } ;
583
-
584
570
host . resolveModuleNames = function ( moduleNames , containingFile ) {
585
571
const resolvedModules : ts . ResolvedModule [ ] = [ ] ;
586
572
for ( let moduleName of moduleNames ) {
587
573
// Try to use standard resolution.
588
- let result = ts . resolveModuleName ( moduleName , containingFile , parsed . options , { fileExists : host . fileExists , readFile : host . readFile } ) ;
574
+ let result = ts . resolveModuleName ( moduleName , containingFile , parsed . options , {
575
+ fileExists : host . fileExists , readFile : host . readFile
576
+ } ) ;
577
+
589
578
if ( result . resolvedModule ) {
590
579
resolvedModules . push ( result . resolvedModule ) ;
591
580
}
@@ -619,16 +608,13 @@ function encodePath(path: string): string {
619
608
620
609
/**
621
610
* Fixes a non .ts module's name so the file and source text can be properly found later.
622
- * Assumes wildcard "@" is [project root]/src.
611
+ * Assumes wildcard "@" is [workspace root]/src.
623
612
*/
624
613
function resolveNonTsModuleName ( moduleName : string , containingFile : string ) : string {
625
614
if ( moduleName . indexOf ( '@/' ) === 0 ) {
626
- moduleName = ( workspacePath || '' ) + '/src' + moduleName . substr ( 1 ) ;
627
- }
628
- else if ( moduleName . indexOf ( './' ) === 0 ) {
629
- moduleName = path . dirname ( containingFile ) + moduleName . substr ( 1 ) ;
615
+ moduleName = path . resolve ( workspacePath || '' , '/src' + moduleName . substr ( 1 ) ) ;
630
616
}
631
- else if ( moduleName . indexOf ( '../' ) === 0 ) {
617
+ else if ( moduleName . indexOf ( './' ) === 0 || moduleName . indexOf ( '. ./') === 0 ) {
632
618
moduleName = path . resolve ( path . dirname ( containingFile ) , moduleName ) ;
633
619
}
634
620
0 commit comments