@@ -181,6 +181,65 @@ func TestCreateProgramUsesStaticModuleResolutions(t *testing.T) {
181181 assert .DeepEqual (t , fileNames , []tspath.RootedFilePath {provided , root })
182182}
183183
184+ func TestCustomModuleResolutionsSkipUnsafeRewriteDiagnostic (t * testing.T ) {
185+ t .Parallel ()
186+
187+ const root = "/home/projects/p/src/a.ts"
188+ const staticTarget = "/home/projects/p/src/b.ts"
189+ const callbackTarget = "/home/projects/p/src/c.ts"
190+ projectSession , _ := projecttestutil .Setup (map [string ]any {
191+ root : `import { b } from "./b.ts"; import { c } from "./c.ts"; export const a = b + c;` ,
192+ staticTarget : `export const b = 1;` ,
193+ callbackTarget : `export const c = 2;` ,
194+ })
195+ defer projectSession .Close ()
196+ session := NewLSPSession (projectSession , nil )
197+ defer session .Close ()
198+ session .conn = & callbackTestConn {responses : map [string ]json.Value {
199+ "resolveModuleName/1" : json .Value (`{"resolvedFileName":"` + callbackTarget + `"}` ),
200+ }}
201+ compilerOptions := func () core.CompilerOptions {
202+ return core.CompilerOptions {
203+ NoLib : core .TSTrue ,
204+ Module : core .ModuleKindNodeNext ,
205+ ModuleResolution : core .ModuleResolutionKindNodeNext ,
206+ RewriteRelativeImportExtensions : core .TSTrue ,
207+ OutDir : "/home/projects/p/out" ,
208+ }
209+ }
210+ resolver , err := session .handleCreateModuleResolver (& CreateModuleResolverParams {
211+ CompilerOptions : compilerOptions (),
212+ ModuleResolutions : & ModuleResolutionSpec {
213+ Fallback : ModuleResolutionFallbackResolve ,
214+ Entries : []* ModuleResolutionEntry {
215+ staticResolutionEntry ("./b.ts" , "" , nil , staticTarget ),
216+ },
217+ },
218+ ResolveModuleNameCallback : "resolveModuleName/1" ,
219+ })
220+ assert .NilError (t , err )
221+
222+ response , err := session .handleCreateSnapshot (t .Context (), & CreateSnapshotParams {
223+ SnapshotRequestChangesParams : SnapshotRequestChangesParams { //nolint:modernize
224+ CreatePrograms : []* CreateSnapshotProgramParams {{
225+ RootFiles : []DocumentIdentifier {{FileName : root }, {FileName : staticTarget }, {FileName : callbackTarget }},
226+ CompilerOptions : compilerOptions (),
227+ Options : & CreateProgramOptions {ModuleResolver : resolver },
228+ }},
229+ },
230+ })
231+ assert .NilError (t , err )
232+ diagnostics , err := session .handleGetSemanticDiagnostics (t .Context (), & GetDiagnosticsParams {
233+ Snapshot : response .Snapshot ,
234+ Project : (* response .Operation .CreatedPrograms )[0 ].AsID (),
235+ Files : []DocumentIdentifier {{FileName : root }},
236+ })
237+ assert .NilError (t , err )
238+ for _ , diagnostic := range diagnostics {
239+ t .Errorf ("handleGetSemanticDiagnostics(%s) reported TS%d at %d: %s" , root , diagnostic .Code , diagnostic .Pos , diagnostic .Text )
240+ }
241+ }
242+
184243func TestStaticModuleResolutionPreservesStaticIdentity (t * testing.T ) {
185244 t .Parallel ()
186245
0 commit comments