@@ -1282,7 +1282,7 @@ namespace ts {
1282
1282
}
1283
1283
1284
1284
function processRootFile ( fileName : string , isDefaultLib : boolean ) {
1285
- processSourceFile ( normalizePath ( fileName ) , isDefaultLib ) ;
1285
+ processSourceFile ( normalizePath ( fileName ) , isDefaultLib , /*isReference*/ true ) ;
1286
1286
}
1287
1287
1288
1288
function fileReferenceIsEqualTo ( a : FileReference , b : FileReference ) : boolean {
@@ -1376,15 +1376,18 @@ namespace ts {
1376
1376
}
1377
1377
}
1378
1378
1379
- function processSourceFile ( fileName : string , isDefaultLib : boolean , refFile ?: SourceFile , refPos ?: number , refEnd ?: number ) {
1379
+ /**
1380
+ * 'isReference' indicates whether the file was brought in via a reference directive (rather than an import declaration)
1381
+ */
1382
+ function processSourceFile ( fileName : string , isDefaultLib : boolean , isReference : boolean , refFile ?: SourceFile , refPos ?: number , refEnd ?: number ) {
1380
1383
let diagnosticArgument : string [ ] ;
1381
1384
let diagnostic : DiagnosticMessage ;
1382
1385
if ( hasExtension ( fileName ) ) {
1383
1386
if ( ! options . allowNonTsExtensions && ! forEach ( supportedExtensions , extension => fileExtensionIs ( host . getCanonicalFileName ( fileName ) , extension ) ) ) {
1384
1387
diagnostic = Diagnostics . File_0_has_unsupported_extension_The_only_supported_extensions_are_1 ;
1385
1388
diagnosticArgument = [ fileName , "'" + supportedExtensions . join ( "', '" ) + "'" ] ;
1386
1389
}
1387
- else if ( ! findSourceFile ( fileName , toPath ( fileName , currentDirectory , getCanonicalFileName ) , isDefaultLib , refFile , refPos , refEnd ) ) {
1390
+ else if ( ! findSourceFile ( fileName , toPath ( fileName , currentDirectory , getCanonicalFileName ) , isDefaultLib , isReference , refFile , refPos , refEnd ) ) {
1388
1391
diagnostic = Diagnostics . File_0_not_found ;
1389
1392
diagnosticArgument = [ fileName ] ;
1390
1393
}
@@ -1394,13 +1397,13 @@ namespace ts {
1394
1397
}
1395
1398
}
1396
1399
else {
1397
- const nonTsFile : SourceFile = options . allowNonTsExtensions && findSourceFile ( fileName , toPath ( fileName , currentDirectory , getCanonicalFileName ) , isDefaultLib , refFile , refPos , refEnd ) ;
1400
+ const nonTsFile : SourceFile = options . allowNonTsExtensions && findSourceFile ( fileName , toPath ( fileName , currentDirectory , getCanonicalFileName ) , isDefaultLib , isReference , refFile , refPos , refEnd ) ;
1398
1401
if ( ! nonTsFile ) {
1399
1402
if ( options . allowNonTsExtensions ) {
1400
1403
diagnostic = Diagnostics . File_0_not_found ;
1401
1404
diagnosticArgument = [ fileName ] ;
1402
1405
}
1403
- else if ( ! forEach ( supportedExtensions , extension => findSourceFile ( fileName + extension , toPath ( fileName + extension , currentDirectory , getCanonicalFileName ) , isDefaultLib , refFile , refPos , refEnd ) ) ) {
1406
+ else if ( ! forEach ( supportedExtensions , extension => findSourceFile ( fileName + extension , toPath ( fileName + extension , currentDirectory , getCanonicalFileName ) , isDefaultLib , isReference , refFile , refPos , refEnd ) ) ) {
1404
1407
diagnostic = Diagnostics . File_0_not_found ;
1405
1408
fileName += ".ts" ;
1406
1409
diagnosticArgument = [ fileName ] ;
@@ -1429,7 +1432,7 @@ namespace ts {
1429
1432
}
1430
1433
1431
1434
// Get source file from normalized fileName
1432
- function findSourceFile ( fileName : string , path : Path , isDefaultLib : boolean , refFile ?: SourceFile , refPos ?: number , refEnd ?: number ) : SourceFile {
1435
+ function findSourceFile ( fileName : string , path : Path , isDefaultLib : boolean , isReference : boolean , refFile ?: SourceFile , refPos ?: number , refEnd ?: number ) : SourceFile {
1433
1436
if ( filesByName . contains ( path ) ) {
1434
1437
const file = filesByName . get ( path ) ;
1435
1438
// try to check if we've already seen this file but with a different casing in path
@@ -1438,6 +1441,10 @@ namespace ts {
1438
1441
reportFileNamesDifferOnlyInCasingError ( fileName , file . fileName , refFile , refPos , refEnd ) ;
1439
1442
}
1440
1443
1444
+ if ( file ) {
1445
+ file . wasReferenced = file . wasReferenced || isReference ;
1446
+ }
1447
+
1441
1448
return file ;
1442
1449
}
1443
1450
@@ -1454,6 +1461,7 @@ namespace ts {
1454
1461
1455
1462
filesByName . set ( path , file ) ;
1456
1463
if ( file ) {
1464
+ file . wasReferenced = file . wasReferenced || isReference ;
1457
1465
file . path = path ;
1458
1466
1459
1467
if ( host . useCaseSensitiveFileNames ( ) ) {
@@ -1491,7 +1499,7 @@ namespace ts {
1491
1499
function processReferencedFiles ( file : SourceFile , basePath : string ) {
1492
1500
forEach ( file . referencedFiles , ref => {
1493
1501
const referencedFileName = resolveTripleslashReference ( ref . fileName , file . fileName ) ;
1494
- processSourceFile ( referencedFileName , /*isDefaultLib*/ false , file , ref . pos , ref . end ) ;
1502
+ processSourceFile ( referencedFileName , /*isDefaultLib*/ false , /*isReference*/ true , file , ref . pos , ref . end ) ;
1495
1503
} ) ;
1496
1504
}
1497
1505
@@ -1517,7 +1525,7 @@ namespace ts {
1517
1525
i < file . imports . length ;
1518
1526
1519
1527
if ( shouldAddFile ) {
1520
- const importedFile = findSourceFile ( resolution . resolvedFileName , toPath ( resolution . resolvedFileName , currentDirectory , getCanonicalFileName ) , /*isDefaultLib*/ false , file , skipTrivia ( file . text , file . imports [ i ] . pos ) , file . imports [ i ] . end ) ;
1528
+ 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 ) ;
1521
1529
1522
1530
if ( importedFile && resolution . isExternalLibraryImport ) {
1523
1531
// Since currently irrespective of allowJs, we only look for supportedTypeScript extension external module files,
0 commit comments