forked from babel/babel
/
index.js
103 lines (96 loc) 路 3.49 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
import { parse } from "@babel/parser";
import generator from "@babel/generator";
import * as t from "@babel/types";
import optimizeCallExpression from "..";
function transformInput(input, thisIdentifier) {
const ast = parse(input);
const callExpression = ast.program.body[0].expression;
return generator(
optimizeCallExpression(
callExpression.callee,
thisIdentifier
? t.identifier(thisIdentifier)
: callExpression.callee.object,
callExpression.arguments,
callExpression.type === "OptionalCallExpression",
),
).code;
}
describe("@babel/helper-optimise-call-expression", () => {
test("optimizeCallExpression should work when thisNode is implied from callee", () => {
expect(transformInput("a.b(...arguments)")).toMatchInlineSnapshot(
`"a.b.apply(a, arguments)"`,
);
expect(transformInput("a[b](...arguments)")).toMatchInlineSnapshot(
`"a[b].apply(a, arguments)"`,
);
expect(transformInput("a.b?.(...arguments)")).toMatchInlineSnapshot(
`"a.b?.apply(a, arguments)"`,
);
expect(transformInput("a[b]?.(...arguments)")).toMatchInlineSnapshot(
`"a[b]?.apply(a, arguments)"`,
);
expect(transformInput("a.b(...args)")).toMatchInlineSnapshot(
`"a.b.call(a, ...args)"`,
);
expect(transformInput("a[b](...args)")).toMatchInlineSnapshot(
`"a[b].call(a, ...args)"`,
);
expect(transformInput("a.b?.(...args)")).toMatchInlineSnapshot(
`"a.b?.call(a, ...args)"`,
);
expect(transformInput("a[b]?.(...args)")).toMatchInlineSnapshot(
`"a[b]?.call(a, ...args)"`,
);
expect(transformInput("a.b(arg1, arg2)")).toMatchInlineSnapshot(
`"a.b.call(a, arg1, arg2)"`,
);
expect(transformInput("a[b](arg1, arg2)")).toMatchInlineSnapshot(
`"a[b].call(a, arg1, arg2)"`,
);
expect(transformInput("a.b?.(arg1, arg2)")).toMatchInlineSnapshot(
`"a.b?.call(a, arg1, arg2)"`,
);
expect(transformInput("a[b]?.(arg1, arg2)")).toMatchInlineSnapshot(
`"a[b]?.call(a, arg1, arg2)"`,
);
});
test("optimizeCallExpression should work when thisNode is provided", () => {
expect(transformInput("a.b(...arguments)", "c")).toMatchInlineSnapshot(
`"a.b.apply(c, arguments)"`,
);
expect(transformInput("a[b](...arguments)", "c")).toMatchInlineSnapshot(
`"a[b].apply(c, arguments)"`,
);
expect(transformInput("a.b?.(...arguments)", "c")).toMatchInlineSnapshot(
`"a.b?.apply(c, arguments)"`,
);
expect(transformInput("a[b]?.(...arguments)", "c")).toMatchInlineSnapshot(
`"a[b]?.apply(c, arguments)"`,
);
expect(transformInput("a.b(...args)", "c")).toMatchInlineSnapshot(
`"a.b.call(c, ...args)"`,
);
expect(transformInput("a[b](...args)", "c")).toMatchInlineSnapshot(
`"a[b].call(c, ...args)"`,
);
expect(transformInput("a.b?.(...args)", "c")).toMatchInlineSnapshot(
`"a.b?.call(c, ...args)"`,
);
expect(transformInput("a[b]?.(...args)", "c")).toMatchInlineSnapshot(
`"a[b]?.call(c, ...args)"`,
);
expect(transformInput("a.b(arg1, arg2)", "c")).toMatchInlineSnapshot(
`"a.b.call(c, arg1, arg2)"`,
);
expect(transformInput("a[b](arg1, arg2)", "c")).toMatchInlineSnapshot(
`"a[b].call(c, arg1, arg2)"`,
);
expect(transformInput("a.b?.(arg1, arg2)", "c")).toMatchInlineSnapshot(
`"a.b?.call(c, arg1, arg2)"`,
);
expect(transformInput("a[b]?.(arg1, arg2)", "c")).toMatchInlineSnapshot(
`"a[b]?.call(c, arg1, arg2)"`,
);
});
});