Skip to content

Commit

Permalink
fix: handle more cases
Browse files Browse the repository at this point in the history
  • Loading branch information
alexander-akait committed May 25, 2023
1 parent 0d8f4d0 commit 9d97d89
Show file tree
Hide file tree
Showing 6 changed files with 52 additions and 5 deletions.
9 changes: 9 additions & 0 deletions lib/javascript/JavascriptParser.js
Original file line number Diff line number Diff line change
Expand Up @@ -3956,6 +3956,7 @@ class JavascriptParser extends Parser {
.call(expr, commentsStartPos);
if (typeof result === "boolean") return result;
switch (expr.type) {
// TODO handle more cases
case "ClassDeclaration":
case "ClassExpression": {
if (expr.body.type !== "ClassBody") return false;
Expand Down Expand Up @@ -3996,7 +3997,9 @@ class JavascriptParser extends Parser {
case "FunctionDeclaration":
case "FunctionExpression":
case "ArrowFunctionExpression":
case "ThisExpression":
case "Literal":
case "TemplateLiteral":
case "Identifier":
case "PrivateIdentifier":
return true;
Expand All @@ -4013,6 +4016,12 @@ class JavascriptParser extends Parser {
this.isPure(expr.alternate, expr.consequent.range[1])
);

case "LogicalExpression":
return (
this.isPure(expr.left, commentsStartPos) &&
this.isPure(expr.right, expr.left.range[1])
);

case "SequenceExpression":
return expr.expressions.every(expr => {
const pureFlag = this.isPure(expr, commentsStartPos);
Expand Down
16 changes: 14 additions & 2 deletions test/cases/inner-graph/extend-class2/dep-decl.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { A, B, getC, getD, getE, getF, Foo, Pure, DateFormatter } from "./dep2?decl";
import { A3, B3, C3, D3, E3, F3, Pure3 } from "./dep3?decl";
import { A, B, getC, getD, getE, getF, Foo, Pure, DateFormatter, ConditionalExpression, LogicalExpression } from "./dep2?decl";
import { A3, B3, C3, D3, E3, F3, Pure3, ConditionalExpression3, LogicalExpression3 } from "./dep3?decl";

export class A1 extends A {
render() {
Expand Down Expand Up @@ -146,6 +146,18 @@ export class DateBar extends DateFormatter {
render() {}
}

export class ConditionalExpression1 extends ConditionalExpression {
render() {
return new ConditionalExpression3();
}
}

export class LogicalExpression1 extends LogicalExpression {
render() {
return new LogicalExpression3();
}
}

export class A2 extends A3 {}
export class B2 extends B3 {}
export class C2 extends C3 {}
Expand Down
14 changes: 13 additions & 1 deletion test/cases/inner-graph/extend-class2/dep-expr.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import {A, B, DateFormatter, getC, getD, getE, getF, Pure} from "./dep2?expr";
import {A, B, DateFormatter, getC, getD, getE, getF, Pure, ConditionalExpression, LogicalExpression} from "./dep2?expr";
import { A3, B3, C3, D3, E3, F3, Pure3} from "./dep3?expr";

export const A1 = class extends A {
Expand Down Expand Up @@ -52,6 +52,18 @@ export class DateBar extends DateFormatter {
render() {}
}

export class ConditionalExpression1 extends ConditionalExpression {
render() {
return new ConditionalExpression3();
}
}

export class LogicalExpression1 extends LogicalExpression {
render() {
return new LogicalExpression3();
}
}

export const A2 = class extends A3 {};
export const B2 = class extends B3 {};
export const C2 = class extends C3 {};
Expand Down
4 changes: 4 additions & 0 deletions test/cases/inner-graph/extend-class2/dep2.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ export class DateFormatter extends Date {
this.date = this.getDate();
}
}
export class ConditionalExpression extends (true ? A : B) {}
export class LogicalExpression extends (A || B) {}

export const exportsInfoForA = __webpack_exports_info__.A.used;
export const exportsInfoForB = __webpack_exports_info__.B.used;
Expand All @@ -22,3 +24,5 @@ export const exportsInfoForF = __webpack_exports_info__.getF.used;
export const exportsInfoForFoo = __webpack_exports_info__.Foo.used;
export const exportsInfoForPure = __webpack_exports_info__.Pure.used;
export const exportsInfoForDateFormatter = __webpack_exports_info__.DateFormatter.used;
export const exportsInfoForConditionalExpression = __webpack_exports_info__.ConditionalExpression.used;
export const exportsInfoForLogicalExpression = __webpack_exports_info__.LogicalExpression.used;
2 changes: 2 additions & 0 deletions test/cases/inner-graph/extend-class2/dep3.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,5 @@ export class D3 {}
export class E3 {}
export class F3 {}
export class Pure3 {}
export class ConditionalExpression3 extends (true ? A3 : B3) {}
export class LogicalExpression3 extends (A3 || B3) {}
12 changes: 10 additions & 2 deletions test/cases/inner-graph/extend-class2/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@ import {
exportsInfoForF as declF,
exportsInfoForFoo as declFoo,
exportsInfoForPure as declPure,
exportsInfoForDateFormatter as declDateFormatter
exportsInfoForDateFormatter as declDateFormatter,
exportsInfoForConditionalExpression as declConditionalExpression,
exportsInfoForLogicalExpression as declLogicalExpression
} from "./dep2?decl";
import {
exportsInfoForA as exprA,
Expand All @@ -17,7 +19,9 @@ import {
exportsInfoForE as exprE,
exportsInfoForF as exprF,
exportsInfoForPure as exprPure,
exportsInfoForDateFormatter as exprDateFormatter
exportsInfoForDateFormatter as exprDateFormatter,
exportsInfoForConditionalExpression as exprConditionalExpression,
exportsInfoForLogicalExpression as exprLogicalExpression
} from "./dep2?expr";

it("should load module correctly", () => {
Expand Down Expand Up @@ -58,6 +62,10 @@ it("F should be used", () => {
if (process.env.NODE_ENV === "production") {
expect(declPure).toBe(false);
expect(exprPure).toBe(false);
expect(declConditionalExpression).toBe(false);
expect(exprConditionalExpression).toBe(false);
expect(declLogicalExpression).toBe(false);
expect(exprLogicalExpression).toBe(false);
}

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

0 comments on commit 9d97d89

Please sign in to comment.