Skip to content

Commit c9fefd2

Browse files
authored
feat: report class evaluation TDZ errors in no-use-before-define (#15134)
1 parent 4fd7a6c commit c9fefd2

3 files changed

Lines changed: 734 additions & 78 deletions

File tree

docs/rules/no-use-before-define.md

Lines changed: 71 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ Examples of **incorrect** code for this rule:
1212

1313
```js
1414
/*eslint no-use-before-define: "error"*/
15-
/*eslint-env es6*/
1615

1716
alert(a);
1817
var a = 10;
@@ -29,13 +28,29 @@ var b = 1;
2928
alert(c);
3029
let c = 1;
3130
}
31+
32+
{
33+
class C extends C {}
34+
}
35+
36+
{
37+
class C {
38+
static x = "foo";
39+
[C.x]() {}
40+
}
41+
}
42+
43+
{
44+
const C = class {
45+
static x = C;
46+
}
47+
}
3248
```
3349

3450
Examples of **correct** code for this rule:
3551

3652
```js
3753
/*eslint no-use-before-define: "error"*/
38-
/*eslint-env es6*/
3954

4055
var a;
4156
a = 10;
@@ -53,6 +68,24 @@ function g() {
5368
let c;
5469
c++;
5570
}
71+
72+
{
73+
class C {
74+
static x = C;
75+
}
76+
}
77+
78+
{
79+
const C = class C {
80+
static x = C;
81+
}
82+
}
83+
84+
{
85+
const C = class {
86+
x = C;
87+
}
88+
}
5689
```
5790

5891
## Options
@@ -103,18 +136,32 @@ Examples of **incorrect** code for the `{ "classes": false }` option:
103136

104137
```js
105138
/*eslint no-use-before-define: ["error", { "classes": false }]*/
106-
/*eslint-env es6*/
107139

108140
new A();
109141
class A {
110142
}
143+
144+
{
145+
class C extends C {}
146+
}
147+
148+
{
149+
class C extends D {}
150+
class D {}
151+
}
152+
153+
{
154+
class C {
155+
static x = "foo";
156+
[C.x]() {}
157+
}
158+
}
111159
```
112160

113161
Examples of **correct** code for the `{ "classes": false }` option:
114162

115163
```js
116164
/*eslint no-use-before-define: ["error", { "classes": false }]*/
117-
/*eslint-env es6*/
118165

119166
function foo() {
120167
return new A();
@@ -139,6 +186,19 @@ const f = () => {};
139186

140187
g();
141188
const g = function() {};
189+
190+
{
191+
const C = class {
192+
static x = C;
193+
}
194+
}
195+
196+
{
197+
const C = class {
198+
static x = foo;
199+
}
200+
const foo = 1;
201+
}
142202
```
143203

144204
Examples of **correct** code for the `{ "variables": false }` option:
@@ -158,4 +218,11 @@ const f = () => {};
158218

159219
const e = function() { return g(); }
160220
const g = function() {}
221+
222+
{
223+
const C = class {
224+
x = foo;
225+
}
226+
const foo = 1;
227+
}
161228
```

0 commit comments

Comments
 (0)