Skip to content

Commit 9d97d89

Browse files
fix: handle more cases
1 parent 0d8f4d0 commit 9d97d89

6 files changed

Lines changed: 52 additions & 5 deletions

File tree

lib/javascript/JavascriptParser.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3956,6 +3956,7 @@ class JavascriptParser extends Parser {
39563956
.call(expr, commentsStartPos);
39573957
if (typeof result === "boolean") return result;
39583958
switch (expr.type) {
3959+
// TODO handle more cases
39593960
case "ClassDeclaration":
39603961
case "ClassExpression": {
39613962
if (expr.body.type !== "ClassBody") return false;
@@ -3996,7 +3997,9 @@ class JavascriptParser extends Parser {
39963997
case "FunctionDeclaration":
39973998
case "FunctionExpression":
39983999
case "ArrowFunctionExpression":
4000+
case "ThisExpression":
39994001
case "Literal":
4002+
case "TemplateLiteral":
40004003
case "Identifier":
40014004
case "PrivateIdentifier":
40024005
return true;
@@ -4013,6 +4016,12 @@ class JavascriptParser extends Parser {
40134016
this.isPure(expr.alternate, expr.consequent.range[1])
40144017
);
40154018

4019+
case "LogicalExpression":
4020+
return (
4021+
this.isPure(expr.left, commentsStartPos) &&
4022+
this.isPure(expr.right, expr.left.range[1])
4023+
);
4024+
40164025
case "SequenceExpression":
40174026
return expr.expressions.every(expr => {
40184027
const pureFlag = this.isPure(expr, commentsStartPos);

test/cases/inner-graph/extend-class2/dep-decl.js

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { A, B, getC, getD, getE, getF, Foo, Pure, DateFormatter } from "./dep2?decl";
2-
import { A3, B3, C3, D3, E3, F3, Pure3 } from "./dep3?decl";
1+
import { A, B, getC, getD, getE, getF, Foo, Pure, DateFormatter, ConditionalExpression, LogicalExpression } from "./dep2?decl";
2+
import { A3, B3, C3, D3, E3, F3, Pure3, ConditionalExpression3, LogicalExpression3 } from "./dep3?decl";
33

44
export class A1 extends A {
55
render() {
@@ -146,6 +146,18 @@ export class DateBar extends DateFormatter {
146146
render() {}
147147
}
148148

149+
export class ConditionalExpression1 extends ConditionalExpression {
150+
render() {
151+
return new ConditionalExpression3();
152+
}
153+
}
154+
155+
export class LogicalExpression1 extends LogicalExpression {
156+
render() {
157+
return new LogicalExpression3();
158+
}
159+
}
160+
149161
export class A2 extends A3 {}
150162
export class B2 extends B3 {}
151163
export class C2 extends C3 {}

test/cases/inner-graph/extend-class2/dep-expr.js

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {A, B, DateFormatter, getC, getD, getE, getF, Pure} from "./dep2?expr";
1+
import {A, B, DateFormatter, getC, getD, getE, getF, Pure, ConditionalExpression, LogicalExpression} from "./dep2?expr";
22
import { A3, B3, C3, D3, E3, F3, Pure3} from "./dep3?expr";
33

44
export const A1 = class extends A {
@@ -52,6 +52,18 @@ export class DateBar extends DateFormatter {
5252
render() {}
5353
}
5454

55+
export class ConditionalExpression1 extends ConditionalExpression {
56+
render() {
57+
return new ConditionalExpression3();
58+
}
59+
}
60+
61+
export class LogicalExpression1 extends LogicalExpression {
62+
render() {
63+
return new LogicalExpression3();
64+
}
65+
}
66+
5567
export const A2 = class extends A3 {};
5668
export const B2 = class extends B3 {};
5769
export const C2 = class extends C3 {};

test/cases/inner-graph/extend-class2/dep2.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ export class DateFormatter extends Date {
1212
this.date = this.getDate();
1313
}
1414
}
15+
export class ConditionalExpression extends (true ? A : B) {}
16+
export class LogicalExpression extends (A || B) {}
1517

1618
export const exportsInfoForA = __webpack_exports_info__.A.used;
1719
export const exportsInfoForB = __webpack_exports_info__.B.used;
@@ -22,3 +24,5 @@ export const exportsInfoForF = __webpack_exports_info__.getF.used;
2224
export const exportsInfoForFoo = __webpack_exports_info__.Foo.used;
2325
export const exportsInfoForPure = __webpack_exports_info__.Pure.used;
2426
export const exportsInfoForDateFormatter = __webpack_exports_info__.DateFormatter.used;
27+
export const exportsInfoForConditionalExpression = __webpack_exports_info__.ConditionalExpression.used;
28+
export const exportsInfoForLogicalExpression = __webpack_exports_info__.LogicalExpression.used;

test/cases/inner-graph/extend-class2/dep3.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,5 @@ export class D3 {}
55
export class E3 {}
66
export class F3 {}
77
export class Pure3 {}
8+
export class ConditionalExpression3 extends (true ? A3 : B3) {}
9+
export class LogicalExpression3 extends (A3 || B3) {}

test/cases/inner-graph/extend-class2/index.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ import {
77
exportsInfoForF as declF,
88
exportsInfoForFoo as declFoo,
99
exportsInfoForPure as declPure,
10-
exportsInfoForDateFormatter as declDateFormatter
10+
exportsInfoForDateFormatter as declDateFormatter,
11+
exportsInfoForConditionalExpression as declConditionalExpression,
12+
exportsInfoForLogicalExpression as declLogicalExpression
1113
} from "./dep2?decl";
1214
import {
1315
exportsInfoForA as exprA,
@@ -17,7 +19,9 @@ import {
1719
exportsInfoForE as exprE,
1820
exportsInfoForF as exprF,
1921
exportsInfoForPure as exprPure,
20-
exportsInfoForDateFormatter as exprDateFormatter
22+
exportsInfoForDateFormatter as exprDateFormatter,
23+
exportsInfoForConditionalExpression as exprConditionalExpression,
24+
exportsInfoForLogicalExpression as exprLogicalExpression
2125
} from "./dep2?expr";
2226

2327
it("should load module correctly", () => {
@@ -58,6 +62,10 @@ it("F should be used", () => {
5862
if (process.env.NODE_ENV === "production") {
5963
expect(declPure).toBe(false);
6064
expect(exprPure).toBe(false);
65+
expect(declConditionalExpression).toBe(false);
66+
expect(exprConditionalExpression).toBe(false);
67+
expect(declLogicalExpression).toBe(false);
68+
expect(exprLogicalExpression).toBe(false);
6169
}
6270

6371
// Note: it has side-effects and is not affected by usage of the class

0 commit comments

Comments
 (0)