@@ -1106,7 +1106,7 @@ namespace ts.server {
1106
1106
return project . getLanguageService ( ) . getRenameInfo ( file , position ) ;
1107
1107
}
1108
1108
1109
- private getProjects ( args : protocol . FileRequestArgs ) : Projects {
1109
+ private getProjects ( args : protocol . FileRequestArgs , getScriptInfoEnsuringProjectsUptoDate ?: boolean , ignoreNoProjectError ?: boolean ) : Projects {
1110
1110
let projects : ReadonlyArray < Project > | undefined ;
1111
1111
let symLinkedProjects : MultiMap < Project > | undefined ;
1112
1112
if ( args . projectFileName ) {
@@ -1116,13 +1116,18 @@ namespace ts.server {
1116
1116
}
1117
1117
}
1118
1118
else {
1119
- const scriptInfo = this . projectService . getScriptInfo ( args . file ) ! ;
1119
+ const scriptInfo = getScriptInfoEnsuringProjectsUptoDate ?
1120
+ this . projectService . getScriptInfoEnsuringProjectsUptoDate ( args . file ) :
1121
+ this . projectService . getScriptInfo ( args . file ) ;
1122
+ if ( ! scriptInfo ) {
1123
+ return ignoreNoProjectError ? emptyArray : Errors . ThrowNoProject ( ) ;
1124
+ }
1120
1125
projects = scriptInfo . containingProjects ;
1121
1126
symLinkedProjects = this . projectService . getSymlinkedProjects ( scriptInfo ) ;
1122
1127
}
1123
1128
// filter handles case when 'projects' is undefined
1124
1129
projects = filter ( projects , p => p . languageServiceEnabled && ! p . isOrphan ( ) ) ;
1125
- if ( ( ! projects || ! projects . length ) && ! symLinkedProjects ) {
1130
+ if ( ! ignoreNoProjectError && ( ! projects || ! projects . length ) && ! symLinkedProjects ) {
1126
1131
return Errors . ThrowNoProject ( ) ;
1127
1132
}
1128
1133
return symLinkedProjects ? { projects : projects ! , symLinkedProjects } : projects ! ; // TODO: GH#18217
@@ -1465,29 +1470,16 @@ namespace ts.server {
1465
1470
}
1466
1471
1467
1472
private getCompileOnSaveAffectedFileList ( args : protocol . FileRequestArgs ) : ReadonlyArray < protocol . CompileOnSaveAffectedFileListSingleProject > {
1468
- let info : ScriptInfo | undefined ;
1469
- let project : Project | undefined ;
1470
- if ( args . projectFileName ) {
1471
- // Do not update all projects if we are looking for specific project to compile on save
1472
- project = this . projectService . findProject ( args . projectFileName ) ! ;
1473
- if ( project . dirty ) project . updateGraph ( ) ;
1474
- info = this . projectService . getScriptInfo ( args . file ) ;
1475
- }
1476
- else {
1477
- info = this . projectService . getScriptInfoEnsuringProjectsUptoDate ( args . file ) ;
1478
- }
1479
-
1473
+ const projects = this . getProjects ( args , /*getScriptInfoEnsuringProjectsUptoDate*/ true , /*ignoreNoProjectError*/ true ) ;
1474
+ const info = this . projectService . getScriptInfo ( args . file ) ;
1480
1475
if ( ! info ) {
1481
1476
return emptyArray ;
1482
1477
}
1483
1478
1484
- // if specified a project, we only return affected file list in this project
1485
- const projects = args . projectFileName ? [ project ! ] : info . containingProjects ;
1486
- const symLinkedProjects = ! args . projectFileName && this . projectService . getSymlinkedProjects ( info ) ;
1487
1479
return combineProjectOutput (
1488
1480
info ,
1489
1481
path => this . projectService . getScriptInfoForPath ( path ) ! ,
1490
- symLinkedProjects ? { projects , symLinkedProjects } : projects ,
1482
+ projects ,
1491
1483
( project , info ) => {
1492
1484
let result : protocol . CompileOnSaveAffectedFileListSingleProject | undefined ;
1493
1485
if ( project . compileOnSaveEnabled && project . languageServiceEnabled && ! project . isOrphan ( ) && ! project . getCompilationSettings ( ) . noEmit ) {
0 commit comments