Skip to content

Commit 0ad494c

Browse files
committed
Remove require name collision check for ES6 modules and later
1 parent 21c2c89 commit 0ad494c

File tree

5 files changed

+112
-0
lines changed

5 files changed

+112
-0
lines changed

src/compiler/checker.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15554,6 +15554,11 @@ namespace ts {
1555415554
}
1555515555

1555615556
function checkCollisionWithRequireExportsInGeneratedCode(node: Node, name: Identifier) {
15557+
// No need to check for require or exports for ES6 modules and later
15558+
if (modulekind >= ModuleKind.ES6) {
15559+
return;
15560+
}
15561+
1555715562
if (!needCollisionCheckForIdentifier(node, name, "require") && !needCollisionCheckForIdentifier(node, name, "exports")) {
1555815563
return;
1555915564
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
//// [tests/cases/compiler/es6UseOfTopLevelRequire.ts] ////
2+
3+
//// [b.ts]
4+
5+
export default function require(s: string): void {
6+
}
7+
8+
//// [c.ts]
9+
export const exports = 0;
10+
export default exports;
11+
12+
//// [a.ts]
13+
import require from "./b"
14+
require("arg");
15+
16+
import exports from "./c"
17+
var x = exports + 2;
18+
19+
20+
//// [b.js]
21+
export default function require(s) {
22+
}
23+
//// [c.js]
24+
export const exports = 0;
25+
export default exports;
26+
//// [a.js]
27+
import require from "./b";
28+
require("arg");
29+
import exports from "./c";
30+
var x = exports + 2;
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
=== tests/cases/compiler/a.ts ===
2+
import require from "./b"
3+
>require : Symbol(require, Decl(a.ts, 0, 6))
4+
5+
require("arg");
6+
>require : Symbol(require, Decl(a.ts, 0, 6))
7+
8+
import exports from "./c"
9+
>exports : Symbol(exports, Decl(a.ts, 3, 6))
10+
11+
var x = exports + 2;
12+
>x : Symbol(x, Decl(a.ts, 4, 3))
13+
>exports : Symbol(exports, Decl(a.ts, 3, 6))
14+
15+
=== tests/cases/compiler/b.ts ===
16+
17+
export default function require(s: string): void {
18+
>require : Symbol(require, Decl(b.ts, 0, 0))
19+
>s : Symbol(s, Decl(b.ts, 1, 32))
20+
}
21+
22+
=== tests/cases/compiler/c.ts ===
23+
export const exports = 0;
24+
>exports : Symbol(exports, Decl(c.ts, 0, 12))
25+
26+
export default exports;
27+
>exports : Symbol(exports, Decl(c.ts, 0, 12))
28+
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
=== tests/cases/compiler/a.ts ===
2+
import require from "./b"
3+
>require : (s: string) => void
4+
5+
require("arg");
6+
>require("arg") : void
7+
>require : (s: string) => void
8+
>"arg" : "arg"
9+
10+
import exports from "./c"
11+
>exports : 0
12+
13+
var x = exports + 2;
14+
>x : number
15+
>exports + 2 : number
16+
>exports : 0
17+
>2 : 2
18+
19+
=== tests/cases/compiler/b.ts ===
20+
21+
export default function require(s: string): void {
22+
>require : (s: string) => void
23+
>s : string
24+
}
25+
26+
=== tests/cases/compiler/c.ts ===
27+
export const exports = 0;
28+
>exports : 0
29+
>0 : 0
30+
31+
export default exports;
32+
>exports : 0
33+
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// @target: ES6
2+
3+
// @filename: b.ts
4+
export default function require(s: string): void {
5+
}
6+
7+
// @filename: c.ts
8+
export const exports = 0;
9+
export default exports;
10+
11+
// @filename: a.ts
12+
import require from "./b"
13+
require("arg");
14+
15+
import exports from "./c"
16+
var x = exports + 2;

0 commit comments

Comments
 (0)