Skip to content

Commit e435054

Browse files
authored
fix(36416): empty import path causes server crash (#36751)
1 parent bf37065 commit e435054

7 files changed

+160
-1
lines changed

Diff for: src/services/textChanges.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1238,9 +1238,10 @@ namespace ts.textChanges {
12381238
}
12391239

12401240
case SyntaxKind.ImportDeclaration:
1241+
const isFirstImport = sourceFile.imports.length && node === first(sourceFile.imports).parent || node === find(sourceFile.statements, isImportDeclaration);
12411242
deleteNode(changes, sourceFile, node,
12421243
// For first import, leave header comment in place
1243-
node === sourceFile.imports[0].parent ? { leadingTriviaOption: LeadingTriviaOption.Exclude } : undefined);
1244+
isFirstImport ? { leadingTriviaOption: LeadingTriviaOption.Exclude } : undefined);
12441245
break;
12451246

12461247
case SyntaxKind.BindingElement:
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
/// <reference path='fourslash.ts' />
2+
3+
// @Filename: /a.ts
4+
////// leading trivia
5+
////import * as foo from ""; // trailing trivia
6+
7+
verify.codeFix({
8+
description: "Remove import from ''",
9+
newFileContent:
10+
`// leading trivia
11+
// trailing trivia`,
12+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/// <reference path='fourslash.ts' />
2+
3+
// @Filename: /a.ts
4+
////// leading trivia
5+
////import * as foo from "";
6+
////import { b } from "./b";
7+
////import { c } from "./c";
8+
9+
// @Filename: /b.ts
10+
////export const b = null;
11+
12+
// @Filename: /c.ts
13+
////export const c = null;
14+
15+
verify.codeFix({
16+
index: 0,
17+
description: "Remove import from ''",
18+
newFileContent:
19+
`// leading trivia
20+
import { b } from "./b";
21+
import { c } from "./c";`,
22+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/// <reference path='fourslash.ts' />
2+
3+
// @Filename: /a.ts
4+
////// leading trivia
5+
////import { b } from "./b";
6+
////import * as foo from "";
7+
////import { c } from "./c";
8+
9+
// @Filename: /b.ts
10+
////export const b = null;
11+
12+
// @Filename: /c.ts
13+
////export const c = null;
14+
15+
verify.codeFix({
16+
index: 1,
17+
description: "Remove import from ''",
18+
newFileContent:
19+
`// leading trivia
20+
import { b } from "./b";
21+
import { c } from "./c";`,
22+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/// <reference path='fourslash.ts' />
2+
3+
// @Filename: /a.ts
4+
////// leading trivia
5+
////import { b } from "./b";
6+
////import { c } from "./c";
7+
////import * as foo from "";
8+
9+
// @Filename: /b.ts
10+
////export const b = null;
11+
12+
// @Filename: /c.ts
13+
////export const c = null;
14+
15+
verify.codeFix({
16+
index: 2,
17+
description: "Remove import from ''",
18+
newFileContent:
19+
`// leading trivia
20+
import { b } from "./b";
21+
import { c } from "./c";
22+
`,
23+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/// <reference path='fourslash.ts' />
2+
3+
// @Filename: /a.ts
4+
////// leading trivia
5+
////import * as a from "";
6+
////import * as b from "";
7+
////import * as c from "";
8+
9+
verify.codeFix({
10+
index: 0,
11+
description: "Remove import from ''",
12+
newFileContent:
13+
`// leading trivia
14+
import * as b from "";
15+
import * as c from "";`,
16+
});
17+
18+
verify.codeFix({
19+
index: 1,
20+
description: "Remove import from ''",
21+
newFileContent:
22+
`// leading trivia
23+
import * as a from "";
24+
import * as c from "";`,
25+
});
26+
27+
verify.codeFix({
28+
index: 2,
29+
description: "Remove import from ''",
30+
newFileContent:
31+
`// leading trivia
32+
import * as a from "";
33+
import * as b from "";
34+
`
35+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/// <reference path='fourslash.ts' />
2+
3+
// @Filename: /main.ts
4+
////// leading trivia
5+
////import { a } from "./a";
6+
////import { b } from "./b";
7+
////import { c } from "./c";
8+
9+
// @Filename: /a.ts
10+
////export const a = null;
11+
12+
// @Filename: /b.ts
13+
////export const b = null;
14+
15+
// @Filename: /c.ts
16+
////export const c = null;
17+
18+
verify.codeFix({
19+
index: 0,
20+
description: "Remove import from './a'",
21+
newFileContent:
22+
`// leading trivia
23+
import { b } from "./b";
24+
import { c } from "./c";`,
25+
});
26+
27+
verify.codeFix({
28+
index: 1,
29+
description: "Remove import from './b'",
30+
newFileContent:
31+
`// leading trivia
32+
import { a } from "./a";
33+
import { c } from "./c";`,
34+
});
35+
36+
verify.codeFix({
37+
index: 2,
38+
description: "Remove import from './c'",
39+
newFileContent:
40+
`// leading trivia
41+
import { a } from "./a";
42+
import { b } from "./b";
43+
`,
44+
});

0 commit comments

Comments
 (0)