@@ -663,12 +663,15 @@ namespace ts.projectSystem {
663
663
options : { }
664
664
} ) ;
665
665
service . checkNumberOfProjects ( { configuredProjects : 1 } ) ;
666
- checkProjectActualFiles ( configuredProjectAt ( service , 0 ) , [ upperCaseConfigFilePath ] ) ;
666
+ const project = service . configuredProjects . get ( config . path ) ! ;
667
+ assert . equal ( project . pendingReload , ConfigFileProgramReloadLevel . Full ) ; // External project referenced configured project pending to be reloaded
668
+ checkProjectActualFiles ( project , emptyArray ) ;
667
669
668
670
service . openClientFile ( f1 . path ) ;
669
671
service . checkNumberOfProjects ( { configuredProjects : 1 , inferredProjects : 1 } ) ;
670
672
671
- checkProjectActualFiles ( configuredProjectAt ( service , 0 ) , [ upperCaseConfigFilePath ] ) ;
673
+ assert . equal ( project . pendingReload , ConfigFileProgramReloadLevel . None ) ; // External project referenced configured project is updated
674
+ checkProjectActualFiles ( project , [ upperCaseConfigFilePath ] ) ;
672
675
checkProjectActualFiles ( service . inferredProjects [ 0 ] , [ f1 . path ] ) ;
673
676
} ) ;
674
677
@@ -778,7 +781,7 @@ namespace ts.projectSystem {
778
781
779
782
// Add a tsconfig file
780
783
host . reloadFS ( filesWithConfig ) ;
781
- host . checkTimeoutQueueLengthAndRun ( 1 ) ;
784
+ host . checkTimeoutQueueLengthAndRun ( 2 ) ; // load configured project from disk + ensureProjectsForOpenFiles
782
785
783
786
projectService . checkNumberOfProjects ( { inferredProjects : 2 , configuredProjects : 1 } ) ;
784
787
assert . isTrue ( projectService . inferredProjects [ 0 ] . isOrphan ( ) ) ;
@@ -1229,7 +1232,7 @@ namespace ts.projectSystem {
1229
1232
1230
1233
1231
1234
host . reloadFS ( [ file1 , configFile , file2 , file3 , libFile ] ) ;
1232
- host . checkTimeoutQueueLengthAndRun ( 1 ) ;
1235
+ host . checkTimeoutQueueLengthAndRun ( 2 ) ; // load configured project from disk + ensureProjectsForOpenFiles
1233
1236
checkNumberOfConfiguredProjects ( projectService , 1 ) ;
1234
1237
checkNumberOfInferredProjects ( projectService , 1 ) ;
1235
1238
checkProjectActualFiles ( projectService . inferredProjects [ 0 ] , [ file2 . path , file3 . path , libFile . path ] ) ;
@@ -1773,8 +1776,11 @@ namespace ts.projectSystem {
1773
1776
try {
1774
1777
projectService . openExternalProject ( { projectFileName : "project" , options : { } , rootFiles : toExternalFiles ( [ file1 . path , office . path ] ) } ) ;
1775
1778
const proj = projectService . externalProjects [ 0 ] ;
1776
- assert . deepEqual ( proj . getFileNames ( /*excludeFilesFromExternalLibraries*/ true ) , [ file1 . path ] ) ;
1779
+ // Since the file is not yet open, the project wont have program yet
1780
+ assert . deepEqual ( proj . getFileNames ( /*excludeFilesFromExternalLibraries*/ true ) , emptyArray ) ;
1777
1781
assert . deepEqual ( proj . getTypeAcquisition ( ) . include , [ "duck-types" ] ) ;
1782
+ projectService . openClientFile ( file1 . path ) ;
1783
+ assert . deepEqual ( proj . getFileNames ( /*excludeFilesFromExternalLibraries*/ true ) , [ file1 . path ] ) ;
1778
1784
} finally {
1779
1785
projectService . resetSafeList ( ) ;
1780
1786
}
@@ -1815,8 +1821,11 @@ namespace ts.projectSystem {
1815
1821
try {
1816
1822
projectService . openExternalProject ( { projectFileName : "project" , options : { } , rootFiles : toExternalFiles ( files . map ( f => f . path ) ) } ) ;
1817
1823
const proj = projectService . externalProjects [ 0 ] ;
1818
- assert . deepEqual ( proj . getFileNames ( /*excludeFilesFromExternalLibraries*/ true ) , [ file1 . path ] ) ;
1824
+ // Since the file is not yet open, the project wont have program yet
1825
+ assert . deepEqual ( proj . getFileNames ( /*excludeFilesFromExternalLibraries*/ true ) , emptyArray ) ;
1819
1826
assert . deepEqual ( proj . getTypeAcquisition ( ) . include , [ "kendo-ui" , "office" ] ) ;
1827
+ projectService . openClientFile ( file1 . path ) ;
1828
+ assert . deepEqual ( proj . getFileNames ( /*excludeFilesFromExternalLibraries*/ true ) , [ file1 . path ] ) ;
1820
1829
} finally {
1821
1830
projectService . resetSafeList ( ) ;
1822
1831
}
@@ -1856,6 +1865,9 @@ namespace ts.projectSystem {
1856
1865
try {
1857
1866
projectService . openExternalProject ( { projectFileName : "project" , options : { } , rootFiles : toExternalFiles ( [ file1 . path , file2 . path ] ) , typeAcquisition : { enable : true } } ) ;
1858
1867
const proj = projectService . externalProjects [ 0 ] ;
1868
+ // Since the file is not yet open, the project wont have program yet
1869
+ assert . deepEqual ( proj . getFileNames ( ) , emptyArray ) ;
1870
+ projectService . openClientFile ( file2 . path ) ;
1859
1871
assert . deepEqual ( proj . getFileNames ( ) , [ file2 . path ] ) ;
1860
1872
} finally {
1861
1873
projectService . resetSafeList ( ) ;
@@ -1893,7 +1905,7 @@ namespace ts.projectSystem {
1893
1905
checkProjectActualFiles ( projectService . inferredProjects [ 1 ] , [ file3 . path ] ) ;
1894
1906
1895
1907
host . reloadFS ( [ file1 , file2 , file3 , configFile ] ) ;
1896
- host . checkTimeoutQueueLengthAndRun ( 1 ) ;
1908
+ host . checkTimeoutQueueLengthAndRun ( 2 ) ; // load configured project from disk + ensureProjectsForOpenFiles
1897
1909
checkNumberOfProjects ( projectService , { configuredProjects : 1 , inferredProjects : 2 } ) ;
1898
1910
checkProjectActualFiles ( configuredProjectAt ( projectService , 0 ) , [ file1 . path , file2 . path , file3 . path , configFile . path ] ) ;
1899
1911
assert . isTrue ( projectService . inferredProjects [ 0 ] . isOrphan ( ) ) ;
@@ -2071,6 +2083,9 @@ namespace ts.projectSystem {
2071
2083
2072
2084
projectService . openExternalProject ( { projectFileName : "project" , options : { } , rootFiles : toExternalFiles ( [ file1 . path ] ) } ) ;
2073
2085
checkNumberOfProjects ( projectService , { externalProjects : 1 } ) ;
2086
+ // Since the file is not yet open, the project wont have program yet
2087
+ assert . deepEqual ( projectService . externalProjects [ 0 ] . getFileNames ( ) , emptyArray ) ;
2088
+ projectService . openClientFile ( file1 . path ) ;
2074
2089
checkProjectActualFiles ( projectService . externalProjects [ 0 ] , [ file1 . path ] ) ;
2075
2090
2076
2091
projectService . openExternalProject ( { projectFileName : "project" , options : { } , rootFiles : toExternalFiles ( [ file1 . path , file2 . path ] ) } ) ;
@@ -2098,11 +2113,17 @@ namespace ts.projectSystem {
2098
2113
projectService . openExternalProject ( { projectFileName : "project" , options : { moduleResolution : ModuleResolutionKind . NodeJs } , rootFiles : toExternalFiles ( [ file1 . path , file2 . path ] ) } ) ;
2099
2114
checkNumberOfProjects ( projectService , { externalProjects : 1 } ) ;
2100
2115
checkProjectRootFiles ( projectService . externalProjects [ 0 ] , [ file1 . path , file2 . path ] ) ;
2116
+ // Since the file is not yet open, the project wont have program yet
2117
+ checkProjectActualFiles ( projectService . externalProjects [ 0 ] , emptyArray ) ;
2118
+ projectService . openClientFile ( file1 . path ) ;
2101
2119
checkProjectActualFiles ( projectService . externalProjects [ 0 ] , [ file1 . path , file2 . path ] ) ;
2102
2120
2103
2121
projectService . openExternalProject ( { projectFileName : "project" , options : { moduleResolution : ModuleResolutionKind . Classic } , rootFiles : toExternalFiles ( [ file1 . path , file2 . path ] ) } ) ;
2104
2122
checkNumberOfProjects ( projectService , { externalProjects : 1 } ) ;
2105
2123
checkProjectRootFiles ( projectService . externalProjects [ 0 ] , [ file1 . path , file2 . path ] ) ;
2124
+ // The update doesnt happen right away until needed, so either open a file or ensure projects uptodate
2125
+ checkProjectActualFiles ( projectService . externalProjects [ 0 ] , [ file1 . path , file2 . path ] ) ;
2126
+ projectService . ensureInferredProjectsUpToDate_TestOnly ( ) ;
2106
2127
checkProjectActualFiles ( projectService . externalProjects [ 0 ] , [ file1 . path , file2 . path , file3 . path ] ) ;
2107
2128
} ) ;
2108
2129
@@ -2404,6 +2425,10 @@ namespace ts.projectSystem {
2404
2425
projectService . openExternalProject ( { projectFileName, options : { } , rootFiles : [ { fileName : file1 . path , scriptKind : ScriptKind . JS , hasMixedContent : true } ] } ) ;
2405
2426
2406
2427
checkNumberOfProjects ( projectService , { externalProjects : 1 } ) ;
2428
+ // Since the external project is not updated till needed (eg opening client file/ensuringProjectStructureUptodate)
2429
+ // watched files will be empty at first
2430
+ checkWatchedFiles ( host , emptyArray ) ;
2431
+ projectService . ensureInferredProjectsUpToDate_TestOnly ( ) ;
2407
2432
checkWatchedFiles ( host , [ libFile . path ] ) ; // watching the "missing" lib file
2408
2433
2409
2434
const project = projectService . externalProjects [ 0 ] ;
@@ -2988,6 +3013,9 @@ namespace ts.projectSystem {
2988
3013
projectService . openExternalProjects ( [ externalProject ] ) ;
2989
3014
2990
3015
checkNumberOfProjects ( projectService , { configuredProjects : 0 , externalProjects : 1 , inferredProjects : 0 } ) ;
3016
+ // Since the external project is not updated till needed (eg opening client file/ensuringProjectStructureUptodate)
3017
+ checkProjectActualFiles ( projectService . externalProjects [ 0 ] , emptyArray ) ;
3018
+ projectService . ensureInferredProjectsUpToDate_TestOnly ( ) ;
2991
3019
checkProjectActualFiles ( projectService . externalProjects [ 0 ] , [ site . path , libFile . path ] ) ;
2992
3020
} ) ;
2993
3021
@@ -3334,6 +3362,9 @@ namespace ts.projectSystem {
3334
3362
checkNumberOfProjects ( projectService , { configuredProjects : 1 } ) ;
3335
3363
3336
3364
const configuredProject = configuredProjectAt ( projectService , 0 ) ;
3365
+ // configured project is just created and not yet loaded
3366
+ checkProjectActualFiles ( configuredProject , emptyArray ) ;
3367
+ projectService . ensureInferredProjectsUpToDate_TestOnly ( ) ;
3337
3368
checkProjectActualFiles ( configuredProject , [ file1 . path , tsconfig . path ] ) ;
3338
3369
3339
3370
// Allow allowNonTsExtensions will be set to true for deferred extensions.
@@ -3975,6 +4006,8 @@ namespace ts.projectSystem {
3975
4006
options : { }
3976
4007
} ) ;
3977
4008
projectService . checkNumberOfProjects ( { configuredProjects : 1 } ) ;
4009
+ checkProjectActualFiles ( configuredProjectAt ( projectService , 0 ) , emptyArray ) ; // Configured project created but not loaded till actually needed
4010
+ projectService . ensureInferredProjectsUpToDate_TestOnly ( ) ;
3978
4011
checkProjectActualFiles ( configuredProjectAt ( projectService , 0 ) , [ f1 . path , tsconfig . path ] ) ;
3979
4012
3980
4013
// rename tsconfig.json back to lib.ts
@@ -3986,6 +4019,8 @@ namespace ts.projectSystem {
3986
4019
} ) ;
3987
4020
3988
4021
projectService . checkNumberOfProjects ( { externalProjects : 1 } ) ;
4022
+ checkProjectActualFiles ( projectService . externalProjects [ 0 ] , emptyArray ) ; // external project created but not updated till actually needed
4023
+ projectService . ensureInferredProjectsUpToDate_TestOnly ( ) ;
3989
4024
checkProjectActualFiles ( projectService . externalProjects [ 0 ] , [ f1 . path , f2 . path ] ) ;
3990
4025
} ) ;
3991
4026
@@ -4023,6 +4058,8 @@ namespace ts.projectSystem {
4023
4058
} ) ;
4024
4059
4025
4060
projectService . checkNumberOfProjects ( { externalProjects : 1 } ) ;
4061
+ checkProjectActualFiles ( projectService . externalProjects [ 0 ] , emptyArray ) ; // external project created but program is not created till its needed
4062
+ projectService . ensureInferredProjectsUpToDate_TestOnly ( ) ;
4026
4063
checkProjectActualFiles ( projectService . externalProjects [ 0 ] , [ f1 . path ] ) ;
4027
4064
4028
4065
// add two config file as root files
@@ -4032,6 +4069,9 @@ namespace ts.projectSystem {
4032
4069
options : { }
4033
4070
} ) ;
4034
4071
projectService . checkNumberOfProjects ( { configuredProjects : 2 } ) ;
4072
+ checkProjectActualFiles ( configuredProjectAt ( projectService , 0 ) , emptyArray ) ; // Configured project created but not loaded till actually needed
4073
+ checkProjectActualFiles ( configuredProjectAt ( projectService , 1 ) , emptyArray ) ; // Configured project created but not loaded till actually needed
4074
+ projectService . ensureInferredProjectsUpToDate_TestOnly ( ) ;
4035
4075
checkProjectActualFiles ( configuredProjectAt ( projectService , 0 ) , [ cLib . path , cTsconfig . path ] ) ;
4036
4076
checkProjectActualFiles ( configuredProjectAt ( projectService , 1 ) , [ dLib . path , dTsconfig . path ] ) ;
4037
4077
@@ -4053,6 +4093,8 @@ namespace ts.projectSystem {
4053
4093
} ) ;
4054
4094
4055
4095
projectService . checkNumberOfProjects ( { externalProjects : 1 } ) ;
4096
+ checkProjectActualFiles ( projectService . externalProjects [ 0 ] , emptyArray ) ; // external project created but program is not created till its needed
4097
+ projectService . ensureInferredProjectsUpToDate_TestOnly ( ) ;
4056
4098
checkProjectActualFiles ( projectService . externalProjects [ 0 ] , [ f1 . path ] ) ;
4057
4099
4058
4100
// open two config files
@@ -4063,6 +4105,9 @@ namespace ts.projectSystem {
4063
4105
options : { }
4064
4106
} ) ;
4065
4107
projectService . checkNumberOfProjects ( { configuredProjects : 2 } ) ;
4108
+ checkProjectActualFiles ( configuredProjectAt ( projectService , 0 ) , emptyArray ) ; // Configured project created but not loaded till actually needed
4109
+ checkProjectActualFiles ( configuredProjectAt ( projectService , 1 ) , emptyArray ) ; // Configured project created but not loaded till actually needed
4110
+ projectService . ensureInferredProjectsUpToDate_TestOnly ( ) ;
4066
4111
checkProjectActualFiles ( configuredProjectAt ( projectService , 0 ) , [ cLib . path , cTsconfig . path ] ) ;
4067
4112
checkProjectActualFiles ( configuredProjectAt ( projectService , 1 ) , [ dLib . path , dTsconfig . path ] ) ;
4068
4113
0 commit comments