mirror of https://github.com/webpack/webpack.git
fix: handle more cases
This commit is contained in:
parent
0d8f4d0f3d
commit
9d97d8981c
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
|
|
@ -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() {
|
||||
|
@ -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 {}
|
||||
|
|
|
@ -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 {
|
||||
|
@ -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 {};
|
||||
|
|
|
@ -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;
|
||||
|
@ -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;
|
||||
|
|
|
@ -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) {}
|
||||
|
|
|
@ -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,
|
||||
|
@ -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", () => {
|
||||
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue