@@ -1286,7 +1286,7 @@ namespace ts {
12861286 }
12871287
12881288 function processRootFile ( fileName : string , isDefaultLib : boolean ) {
1289- processSourceFile ( normalizePath ( fileName ) , isDefaultLib ) ;
1289+ processSourceFile ( normalizePath ( fileName ) , isDefaultLib , /*isReference*/ true ) ;
12901290 }
12911291
12921292 function fileReferenceIsEqualTo ( a : FileReference , b : FileReference ) : boolean {
@@ -1380,15 +1380,18 @@ namespace ts {
13801380 }
13811381 }
13821382
1383- function processSourceFile ( fileName : string , isDefaultLib : boolean , refFile ?: SourceFile , refPos ?: number , refEnd ?: number ) {
1383+ /**
1384+ * 'isReference' indicates whether the file was brought in via a reference directive (rather than an import declaration)
1385+ */
1386+ function processSourceFile ( fileName : string , isDefaultLib : boolean , isReference : boolean , refFile ?: SourceFile , refPos ?: number , refEnd ?: number ) {
13841387 let diagnosticArgument : string [ ] ;
13851388 let diagnostic : DiagnosticMessage ;
13861389 if ( hasExtension ( fileName ) ) {
13871390 if ( ! options . allowNonTsExtensions && ! forEach ( supportedExtensions , extension => fileExtensionIs ( host . getCanonicalFileName ( fileName ) , extension ) ) ) {
13881391 diagnostic = Diagnostics . File_0_has_unsupported_extension_The_only_supported_extensions_are_1 ;
13891392 diagnosticArgument = [ fileName , "'" + supportedExtensions . join ( "', '" ) + "'" ] ;
13901393 }
1391- else if ( ! findSourceFile ( fileName , toPath ( fileName , currentDirectory , getCanonicalFileName ) , isDefaultLib , refFile , refPos , refEnd ) ) {
1394+ else if ( ! findSourceFile ( fileName , toPath ( fileName , currentDirectory , getCanonicalFileName ) , isDefaultLib , isReference , refFile , refPos , refEnd ) ) {
13921395 diagnostic = Diagnostics . File_0_not_found ;
13931396 diagnosticArgument = [ fileName ] ;
13941397 }
@@ -1398,13 +1401,13 @@ namespace ts {
13981401 }
13991402 }
14001403 else {
1401- const nonTsFile : SourceFile = options . allowNonTsExtensions && findSourceFile ( fileName , toPath ( fileName , currentDirectory , getCanonicalFileName ) , isDefaultLib , refFile , refPos , refEnd ) ;
1404+ const nonTsFile : SourceFile = options . allowNonTsExtensions && findSourceFile ( fileName , toPath ( fileName , currentDirectory , getCanonicalFileName ) , isDefaultLib , isReference , refFile , refPos , refEnd ) ;
14021405 if ( ! nonTsFile ) {
14031406 if ( options . allowNonTsExtensions ) {
14041407 diagnostic = Diagnostics . File_0_not_found ;
14051408 diagnosticArgument = [ fileName ] ;
14061409 }
1407- else if ( ! forEach ( supportedExtensions , extension => findSourceFile ( fileName + extension , toPath ( fileName + extension , currentDirectory , getCanonicalFileName ) , isDefaultLib , refFile , refPos , refEnd ) ) ) {
1410+ else if ( ! forEach ( supportedExtensions , extension => findSourceFile ( fileName + extension , toPath ( fileName + extension , currentDirectory , getCanonicalFileName ) , isDefaultLib , isReference , refFile , refPos , refEnd ) ) ) {
14081411 diagnostic = Diagnostics . File_0_not_found ;
14091412 fileName += ".ts" ;
14101413 diagnosticArgument = [ fileName ] ;
@@ -1433,7 +1436,7 @@ namespace ts {
14331436 }
14341437
14351438 // Get source file from normalized fileName
1436- function findSourceFile ( fileName : string , path : Path , isDefaultLib : boolean , refFile ?: SourceFile , refPos ?: number , refEnd ?: number ) : SourceFile {
1439+ function findSourceFile ( fileName : string , path : Path , isDefaultLib : boolean , isReference : boolean , refFile ?: SourceFile , refPos ?: number , refEnd ?: number ) : SourceFile {
14371440 if ( filesByName . contains ( path ) ) {
14381441 const file = filesByName . get ( path ) ;
14391442 // try to check if we've already seen this file but with a different casing in path
@@ -1442,6 +1445,10 @@ namespace ts {
14421445 reportFileNamesDifferOnlyInCasingError ( fileName , file . fileName , refFile , refPos , refEnd ) ;
14431446 }
14441447
1448+ if ( file ) {
1449+ file . wasReferenced = file . wasReferenced || isReference ;
1450+ }
1451+
14451452 return file ;
14461453 }
14471454
@@ -1458,6 +1465,7 @@ namespace ts {
14581465
14591466 filesByName . set ( path , file ) ;
14601467 if ( file ) {
1468+ file . wasReferenced = file . wasReferenced || isReference ;
14611469 file . path = path ;
14621470
14631471 if ( host . useCaseSensitiveFileNames ( ) ) {
@@ -1495,7 +1503,7 @@ namespace ts {
14951503 function processReferencedFiles ( file : SourceFile , basePath : string ) {
14961504 forEach ( file . referencedFiles , ref => {
14971505 const referencedFileName = resolveTripleslashReference ( ref . fileName , file . fileName ) ;
1498- processSourceFile ( referencedFileName , /*isDefaultLib*/ false , file , ref . pos , ref . end ) ;
1506+ processSourceFile ( referencedFileName , /*isDefaultLib*/ false , /*isReference*/ true , file , ref . pos , ref . end ) ;
14991507 } ) ;
15001508 }
15011509
@@ -1521,7 +1529,7 @@ namespace ts {
15211529 i < file . imports . length ;
15221530
15231531 if ( shouldAddFile ) {
1524- const importedFile = findSourceFile ( resolution . resolvedFileName , toPath ( resolution . resolvedFileName , currentDirectory , getCanonicalFileName ) , /*isDefaultLib*/ false , file , skipTrivia ( file . text , file . imports [ i ] . pos ) , file . imports [ i ] . end ) ;
1532+ const importedFile = findSourceFile ( resolution . resolvedFileName , toPath ( resolution . resolvedFileName , currentDirectory , getCanonicalFileName ) , /*isDefaultLib*/ false , /*isReference*/ false , file , skipTrivia ( file . text , file . imports [ i ] . pos ) , file . imports [ i ] . end ) ;
15251533
15261534 if ( importedFile && resolution . isExternalLibraryImport ) {
15271535 // Since currently irrespective of allowJs, we only look for supportedTypeScript extension external module files,
0 commit comments