@@ -1286,7 +1286,7 @@ namespace ts {
1286
1286
}
1287
1287
1288
1288
function processRootFile ( fileName : string , isDefaultLib : boolean ) {
1289
- processSourceFile ( normalizePath ( fileName ) , isDefaultLib ) ;
1289
+ processSourceFile ( normalizePath ( fileName ) , isDefaultLib , /*isReference*/ true ) ;
1290
1290
}
1291
1291
1292
1292
function fileReferenceIsEqualTo ( a : FileReference , b : FileReference ) : boolean {
@@ -1380,15 +1380,18 @@ namespace ts {
1380
1380
}
1381
1381
}
1382
1382
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 ) {
1384
1387
let diagnosticArgument : string [ ] ;
1385
1388
let diagnostic : DiagnosticMessage ;
1386
1389
if ( hasExtension ( fileName ) ) {
1387
1390
if ( ! options . allowNonTsExtensions && ! forEach ( supportedExtensions , extension => fileExtensionIs ( host . getCanonicalFileName ( fileName ) , extension ) ) ) {
1388
1391
diagnostic = Diagnostics . File_0_has_unsupported_extension_The_only_supported_extensions_are_1 ;
1389
1392
diagnosticArgument = [ fileName , "'" + supportedExtensions . join ( "', '" ) + "'" ] ;
1390
1393
}
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 ) ) {
1392
1395
diagnostic = Diagnostics . File_0_not_found ;
1393
1396
diagnosticArgument = [ fileName ] ;
1394
1397
}
@@ -1398,13 +1401,13 @@ namespace ts {
1398
1401
}
1399
1402
}
1400
1403
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 ) ;
1402
1405
if ( ! nonTsFile ) {
1403
1406
if ( options . allowNonTsExtensions ) {
1404
1407
diagnostic = Diagnostics . File_0_not_found ;
1405
1408
diagnosticArgument = [ fileName ] ;
1406
1409
}
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 ) ) ) {
1408
1411
diagnostic = Diagnostics . File_0_not_found ;
1409
1412
fileName += ".ts" ;
1410
1413
diagnosticArgument = [ fileName ] ;
@@ -1433,7 +1436,7 @@ namespace ts {
1433
1436
}
1434
1437
1435
1438
// 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 {
1437
1440
if ( filesByName . contains ( path ) ) {
1438
1441
const file = filesByName . get ( path ) ;
1439
1442
// try to check if we've already seen this file but with a different casing in path
@@ -1442,6 +1445,10 @@ namespace ts {
1442
1445
reportFileNamesDifferOnlyInCasingError ( fileName , file . fileName , refFile , refPos , refEnd ) ;
1443
1446
}
1444
1447
1448
+ if ( file ) {
1449
+ file . wasReferenced = file . wasReferenced || isReference ;
1450
+ }
1451
+
1445
1452
return file ;
1446
1453
}
1447
1454
@@ -1458,6 +1465,7 @@ namespace ts {
1458
1465
1459
1466
filesByName . set ( path , file ) ;
1460
1467
if ( file ) {
1468
+ file . wasReferenced = file . wasReferenced || isReference ;
1461
1469
file . path = path ;
1462
1470
1463
1471
if ( host . useCaseSensitiveFileNames ( ) ) {
@@ -1495,7 +1503,7 @@ namespace ts {
1495
1503
function processReferencedFiles ( file : SourceFile , basePath : string ) {
1496
1504
forEach ( file . referencedFiles , ref => {
1497
1505
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 ) ;
1499
1507
} ) ;
1500
1508
}
1501
1509
@@ -1521,7 +1529,7 @@ namespace ts {
1521
1529
i < file . imports . length ;
1522
1530
1523
1531
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 ) ;
1525
1533
1526
1534
if ( importedFile && resolution . isExternalLibraryImport ) {
1527
1535
// Since currently irrespective of allowJs, we only look for supportedTypeScript extension external module files,
0 commit comments