@@ -38,9 +38,7 @@ namespace ts.projectSystem {
38
38
indexTs
39
39
] ) ;
40
40
openFilesForSession ( [ indexTs ] , session ) ;
41
- assert . equal (
42
- projectService . getDefaultProjectForFile ( indexTs . path as server . NormalizedPath , /*ensureProject*/ true ) ! . getLanguageService ( ) . getAutoImportProvider ( ) ,
43
- undefined ) ;
41
+ assert . isUndefined ( projectService . configuredProjects . get ( tsconfig . path ) ! . getLanguageService ( ) . getAutoImportProvider ( ) ) ;
44
42
} ) ;
45
43
46
44
it ( "Auto import provider program is not created if dependencies are already in main program" , ( ) => {
@@ -52,9 +50,7 @@ namespace ts.projectSystem {
52
50
{ path : indexTs . path , content : "import '@angular/forms';" }
53
51
] ) ;
54
52
openFilesForSession ( [ indexTs ] , session ) ;
55
- assert . equal (
56
- projectService . getDefaultProjectForFile ( indexTs . path as server . NormalizedPath , /*ensureProject*/ true ) ! . getLanguageService ( ) . getAutoImportProvider ( ) ,
57
- undefined ) ;
53
+ assert . isUndefined ( projectService . configuredProjects . get ( tsconfig . path ) ! . getLanguageService ( ) . getAutoImportProvider ( ) ) ;
58
54
} ) ;
59
55
60
56
it ( "Auto-import program is not created for projects already inside node_modules" , ( ) => {
@@ -70,9 +66,10 @@ namespace ts.projectSystem {
70
66
openFilesForSession ( [ angularFormsDts ] , session ) ;
71
67
checkNumberOfInferredProjects ( projectService , 1 ) ;
72
68
checkNumberOfConfiguredProjects ( projectService , 0 ) ;
73
- assert . equal (
74
- projectService . getDefaultProjectForFile ( angularFormsDts . path as server . NormalizedPath , /*ensureProject*/ true ) ! . getLanguageService ( ) . getAutoImportProvider ( ) ,
75
- undefined ) ;
69
+ assert . isUndefined ( projectService
70
+ . getDefaultProjectForFile ( angularFormsDts . path as server . NormalizedPath , /*ensureProject*/ true ) !
71
+ . getLanguageService ( )
72
+ . getAutoImportProvider ( ) ) ;
76
73
} ) ;
77
74
78
75
it ( "Auto-importable file is in inferred project until imported" , ( ) => {
@@ -88,6 +85,8 @@ namespace ts.projectSystem {
88
85
assert . equal (
89
86
projectService . getDefaultProjectForFile ( angularFormsDts . path as server . NormalizedPath , /*ensureProject*/ true ) ?. projectKind ,
90
87
server . ProjectKind . Configured ) ;
88
+
89
+ assert . isUndefined ( projectService . configuredProjects . get ( tsconfig . path ) ! . getLanguageService ( ) . getAutoImportProvider ( ) ) ;
91
90
} ) ;
92
91
93
92
it ( "Responds to package.json changes" , ( ) => {
@@ -100,18 +99,10 @@ namespace ts.projectSystem {
100
99
] ) ;
101
100
102
101
openFilesForSession ( [ indexTs ] , session ) ;
103
- assert . equal (
104
- projectService
105
- . getDefaultProjectForFile ( indexTs . path as server . NormalizedPath , /*ensureProject*/ true ) !
106
- . getLanguageService ( )
107
- . getAutoImportProvider ( ) ,
108
- undefined ) ;
102
+ assert . isUndefined ( projectService . configuredProjects . get ( tsconfig . path ) ! . getLanguageService ( ) . getAutoImportProvider ( ) ) ;
109
103
110
104
host . writeFile ( packageJson . path , packageJson . content ) ;
111
- assert . ok ( projectService
112
- . getDefaultProjectForFile ( indexTs . path as server . NormalizedPath , /*ensureProject*/ true ) !
113
- . getLanguageService ( )
114
- . getAutoImportProvider ( ) ) ;
105
+ assert . ok ( projectService . configuredProjects . get ( tsconfig . path ) ! . getLanguageService ( ) . getAutoImportProvider ( ) ) ;
115
106
} ) ;
116
107
117
108
it ( "Reuses autoImportProvider when program structure is unchanged" , ( ) => {
@@ -124,17 +115,11 @@ namespace ts.projectSystem {
124
115
] ) ;
125
116
126
117
openFilesForSession ( [ indexTs ] , session ) ;
127
- const autoImportProvider = projectService
128
- . getDefaultProjectForFile ( indexTs . path as server . NormalizedPath , /*ensureProject*/ true ) !
129
- . getLanguageService ( )
130
- . getAutoImportProvider ( ) ;
118
+ const autoImportProvider = projectService . configuredProjects . get ( tsconfig . path ) ! . getLanguageService ( ) . getAutoImportProvider ( ) ;
131
119
132
120
updateFile ( indexTs . path , "console.log(0)" ) ;
133
121
assert . strictEqual (
134
- projectService
135
- . getDefaultProjectForFile ( indexTs . path as server . NormalizedPath , /*ensureProject*/ true ) !
136
- . getLanguageService ( )
137
- . getAutoImportProvider ( ) ,
122
+ projectService . configuredProjects . get ( tsconfig . path ) ! . getLanguageService ( ) . getAutoImportProvider ( ) ,
138
123
autoImportProvider ) ;
139
124
} ) ;
140
125
@@ -150,25 +135,52 @@ namespace ts.projectSystem {
150
135
] ) ;
151
136
152
137
openFilesForSession ( [ indexTs ] , session ) ;
153
- projectService
154
- . getDefaultProjectForFile ( indexTs . path as server . NormalizedPath , /*ensureProject*/ true ) !
155
- . getLanguageService ( )
156
- . getAutoImportProvider ( ) ;
138
+ projectService . configuredProjects . get ( tsconfig . path ) ! . getLanguageService ( ) . getAutoImportProvider ( ) ;
157
139
158
140
// Directory watchers only fire for add/remove, not change.
159
141
// This is ok since a real `npm install` will always trigger add/remove events.
160
142
host . deleteFile ( angularFormsDts . path ) ;
161
143
host . writeFile ( angularFormsDts . path , "" ) ;
162
144
163
- const autoImportProvider = projectService
164
- . getDefaultProjectForFile ( indexTs . path as server . NormalizedPath , /*ensureProject*/ true ) !
165
- . getLanguageService ( )
166
- . getAutoImportProvider ( ) ;
167
-
145
+ const autoImportProvider = projectService . configuredProjects . get ( tsconfig . path ) ! . getLanguageService ( ) . getAutoImportProvider ( ) ;
168
146
assert . equal ( autoImportProvider ! . getSourceFile ( angularFormsDts . path ) ! . getText ( ) , "" ) ;
169
147
} ) ;
170
148
} ) ;
171
149
150
+ describe ( "unittests:: tsserver:: autoImportProvider - monorepo" , ( ) => {
151
+ it ( "Does not create auto import providers upon opening projects for find-all-references" , ( ) => {
152
+ const files = [
153
+ // node_modules
154
+ angularFormsDts ,
155
+ angularFormsPackageJson ,
156
+
157
+ // root
158
+ { path : tsconfig . path , content : `{ "references": [{ "path": "packages/a" }, { "path": "packages/b" }] }` } ,
159
+ { path : packageJson . path , content : `{ "private": true }` } ,
160
+
161
+ // packages/a
162
+ { path : "/packages/a/package.json" , content : packageJson . content } ,
163
+ { path : "/packages/a/tsconfig.json" , content : `{ "compilerOptions": { "composite": true }, "references": [{ "path": "../b" }] }` } ,
164
+ { path : "/packages/a/index.ts" , content : "import { B } from '../b';" } ,
165
+
166
+ // packages/b
167
+ { path : "/packages/b/package.json" , content : packageJson . content } ,
168
+ { path : "/packages/b/tsconfig.json" , content : `{ "compilerOptions": { "composite": true } }` } ,
169
+ { path : "/packages/b/index.ts" , content : `export class B {}` }
170
+ ] ;
171
+
172
+ const { projectService, session, findAllReferences } = setup ( files ) ;
173
+
174
+ openFilesForSession ( [ files . find ( f => f . path === "/packages/b/index.ts" ) ! ] , session ) ;
175
+ checkNumberOfConfiguredProjects ( projectService , 2 ) ; // Solution (no files), B
176
+ findAllReferences ( "/packages/b/index.ts" , 1 , "export class B" . length - 1 ) ;
177
+ checkNumberOfConfiguredProjects ( projectService , 3 ) ; // Solution (no files), A, B
178
+
179
+ // Project for A is created - ensure it doesn't have an autoImportProvider
180
+ assert . isUndefined ( projectService . configuredProjects . get ( "/packages/a/tsconfig.json" ) ! . getLanguageService ( ) . getAutoImportProvider ( ) ) ;
181
+ } ) ;
182
+ } ) ;
183
+
172
184
function setup ( files : File [ ] ) {
173
185
const host = createServerHost ( files ) ;
174
186
const session = createSession ( host ) ;
@@ -177,20 +189,33 @@ namespace ts.projectSystem {
177
189
host,
178
190
projectService,
179
191
session,
180
- updateFile
192
+ updateFile,
193
+ findAllReferences
181
194
} ;
182
195
183
196
function updateFile ( path : string , newText : string ) {
184
- const file = Debug . checkDefined ( files . find ( f => f . path === path ) ) ;
197
+ Debug . assertDefined ( files . find ( f => f . path === path ) ) ;
185
198
session . executeCommandSeq < protocol . ApplyChangedToOpenFilesRequest > ( {
186
199
command : protocol . CommandTypes . ApplyChangedToOpenFiles ,
187
200
arguments : {
188
201
openFiles : [ {
189
- fileName : file . path ,
202
+ fileName : path ,
190
203
content : newText
191
204
} ]
192
205
}
193
206
} ) ;
194
207
}
208
+
209
+ function findAllReferences ( file : string , line : number , offset : number ) {
210
+ Debug . assertDefined ( files . find ( f => f . path === file ) ) ;
211
+ session . executeCommandSeq < protocol . ReferencesRequest > ( {
212
+ command : protocol . CommandTypes . References ,
213
+ arguments : {
214
+ file,
215
+ line,
216
+ offset
217
+ }
218
+ } ) ;
219
+ }
195
220
}
196
221
}
0 commit comments