Skip to content

Commit ec2ef0b

Browse files
committed
fix receiver of imported and exported functions
fixes: #35420
1 parent 0f5ddd2 commit ec2ef0b

File tree

94 files changed

+220
-192
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

94 files changed

+220
-192
lines changed

src/compiler/transformers/module/module.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ namespace ts {
3232
context.onEmitNode = onEmitNode;
3333
context.enableSubstitution(SyntaxKind.Identifier); // Substitutes expression identifiers with imported/exported symbols.
3434
context.enableSubstitution(SyntaxKind.BinaryExpression); // Substitutes assignments to exported symbols.
35+
context.enableSubstitution(SyntaxKind.CallExpression); // Substitutes expression identifiers with imported/exported symbols.
36+
context.enableSubstitution(SyntaxKind.TaggedTemplateExpression); // Substitutes expression identifiers with imported/exported symbols.
3537
context.enableSubstitution(SyntaxKind.PrefixUnaryExpression); // Substitutes updates to exported symbols.
3638
context.enableSubstitution(SyntaxKind.PostfixUnaryExpression); // Substitutes updates to exported symbols.
3739
context.enableSubstitution(SyntaxKind.ShorthandPropertyAssignment); // Substitutes shorthand property assignments for imported/exported symbols.
@@ -1654,6 +1656,10 @@ namespace ts {
16541656
return substituteExpressionIdentifier(<Identifier>node);
16551657
case SyntaxKind.BinaryExpression:
16561658
return substituteBinaryExpression(<BinaryExpression>node);
1659+
case SyntaxKind.CallExpression:
1660+
return substituteCallExpression(<CallExpression>node);
1661+
case SyntaxKind.TaggedTemplateExpression:
1662+
return substituteTaggedTemplateExpression(<TaggedTemplateExpression>node);
16571663
case SyntaxKind.PostfixUnaryExpression:
16581664
case SyntaxKind.PrefixUnaryExpression:
16591665
return substituteUnaryExpression(<PrefixUnaryExpression | PostfixUnaryExpression>node);
@@ -1662,6 +1668,28 @@ namespace ts {
16621668
return node;
16631669
}
16641670

1671+
function substituteCallExpression(node: CallExpression) {
1672+
if (!isIdentifier(node.expression)) {
1673+
return node;
1674+
}
1675+
const newExpression = substituteExpressionIdentifier(node.expression);
1676+
if (newExpression !== node.expression) {
1677+
return updateCall(node, setTextRange(createBinary(createNumericLiteral("0"), SyntaxKind.CommaToken, newExpression), node.expression), /*typeArguments*/ undefined, node.arguments);
1678+
}
1679+
return node;
1680+
}
1681+
1682+
function substituteTaggedTemplateExpression(node: TaggedTemplateExpression) {
1683+
if (!isIdentifier(node.tag)) {
1684+
return node;
1685+
}
1686+
const newTag = substituteExpressionIdentifier(node.tag);
1687+
if (newTag !== node.tag) {
1688+
return updateTaggedTemplate(node, setTextRange(createBinary(createNumericLiteral("0"), SyntaxKind.CommaToken, newTag), node.tag), /*typeArguments*/ undefined, node.template);
1689+
}
1690+
return node;
1691+
}
1692+
16651693
/**
16661694
* Substitution for an Identifier expression that may contain an imported or exported
16671695
* symbol.

src/testRunner/unittests/tsserver/projectReferenceCompileOnSave.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -238,8 +238,8 @@ exports.fn3 = fn3;`;
238238
content: `"use strict";
239239
exports.__esModule = true;
240240
var fns_1 = require("../decls/fns");
241-
fns_1.fn1();
242-
fns_1.fn2();
241+
(0, fns_1.fn1)();
242+
(0, fns_1.fn2)();
243243
${appendJs}`
244244
}]
245245
};

tests/baselines/reference/allowJscheckJsTypeParameterNoCrash.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ exports.vextend = extend;
2828
exports.__esModule = true;
2929
var func_1 = require("./func");
3030
// hover on vextend
31-
exports.a = func_1.vextend({
31+
exports.a = (0, func_1.vextend)({
3232
watch: {
3333
data1: function (val) {
3434
this.data2 = 1;

tests/baselines/reference/allowSyntheticDefaultImportsCanPaintCrossModuleDeclaration.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ exports.__esModule = true;
2222
"use strict";
2323
exports.__esModule = true;
2424
var file1_1 = require("./file1");
25-
exports.A = file1_1.styled();
25+
exports.A = (0, file1_1.styled)();
2626

2727

2828
//// [color.d.ts]

tests/baselines/reference/ambientDeclarationsPatterns.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@ foo(fileText);
3737
exports.__esModule = true;
3838
///<reference path="declarations.d.ts" />
3939
var foobarbaz_1 = require("foobarbaz");
40-
foobarbaz_1.foo(foobarbaz_1.baz);
40+
(0, foobarbaz_1.foo)(foobarbaz_1.baz);
4141
var foosball_1 = require("foosball");
42-
foobarbaz_1.foo(foosball_1.foos);
42+
(0, foobarbaz_1.foo)(foosball_1.foos);
4343
// Works with relative file name
4444
var file_text_1 = require("./file!text");
45-
foobarbaz_1.foo(file_text_1["default"]);
45+
(0, foobarbaz_1.foo)(file_text_1["default"]);

tests/baselines/reference/ambientShorthand.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,4 @@ exports.__esModule = true;
2020
var jquery_1 = require("jquery");
2121
var baz = require("fs");
2222
var boom = require("jquery");
23-
jquery_1["default"](jquery_1.bar, baz, boom);
23+
(0, jquery_1["default"])(jquery_1.bar, baz, boom);

tests/baselines/reference/ambientShorthand_reExport.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,4 @@ exports.__esModule = true;
3434
var reExportX_1 = require("./reExportX");
3535
var $ = require("./reExportAll");
3636
// '$' is not callable, it is an object.
37-
reExportX_1.x($);
37+
(0, reExportX_1.x)($);

tests/baselines/reference/amdDeclarationEmitNoExtraDeclare.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ define("Class", ["require", "exports", "Configurable"], function (require, expor
6868
return _super !== null && _super.apply(this, arguments) || this;
6969
}
7070
return ActualClass;
71-
}(Configurable_1.Configurable(HiddenClass)));
71+
}((0, Configurable_1.Configurable)(HiddenClass)));
7272
exports.ActualClass = ActualClass;
7373
});
7474

tests/baselines/reference/anonClassDeclarationEmitIsAnon.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ var __extends = (this && this.__extends) || (function () {
9090
})();
9191
exports.__esModule = true;
9292
var wrapClass_1 = require("./wrapClass");
93-
exports["default"] = wrapClass_1.wrapClass(0);
93+
exports["default"] = (0, wrapClass_1.wrapClass)(0);
9494
// Simple class
9595
var User = /** @class */ (function () {
9696
function User() {
@@ -106,7 +106,7 @@ var TimestampedUser = /** @class */ (function (_super) {
106106
return _super.call(this) || this;
107107
}
108108
return TimestampedUser;
109-
}(wrapClass_1.Timestamped(User)));
109+
}((0, wrapClass_1.Timestamped)(User)));
110110
exports.TimestampedUser = TimestampedUser;
111111

112112

tests/baselines/reference/commonjsSafeImport.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ exports.Foo = Foo;
1818
"use strict";
1919
Object.defineProperty(exports, "__esModule", { value: true });
2020
var _10_lib_1 = require("./10_lib");
21-
_10_lib_1.Foo();
21+
(0, _10_lib_1.Foo)();
2222

2323

2424
//// [10_lib.d.ts]

tests/baselines/reference/declarationEmitCommonJsModuleReferencedType.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,5 +29,5 @@ export const y = bar();
2929
exports.__esModule = true;
3030
var foo_1 = require("foo");
3131
var root_1 = require("root");
32-
exports.x = foo_1.foo();
33-
exports.y = root_1.bar();
32+
exports.x = (0, foo_1.foo)();
33+
exports.y = (0, root_1.bar)();

tests/baselines/reference/declarationEmitExpandoPropertyPrivateName.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ exports.__esModule = true;
2121
var a_1 = require("./a");
2222
function q() { }
2323
exports.q = q;
24-
q.val = a_1.f();
24+
q.val = (0, a_1.f)();
2525

2626

2727
//// [a.d.ts]

tests/baselines/reference/declarationEmitExpandoWithGenericConstraint.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ Point.zero = (): Point => Point(0, 0);
1919
exports.__esModule = true;
2020
exports.Point = function (x, y) { return ({ x: x, y: y }); };
2121
exports.Rect = function (a, b) { return ({ a: a, b: b }); };
22-
exports.Point.zero = function () { return exports.Point(0, 0); };
22+
exports.Point.zero = function () { return (0, exports.Point)(0, 0); };
2323

2424

2525
//// [declarationEmitExpandoWithGenericConstraint.d.ts]

tests/baselines/reference/declarationEmitExportDeclaration.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ exports.bar = bar;
2424
Object.defineProperty(exports, "__esModule", { value: true });
2525
var utils_1 = require("./utils");
2626
exports.bar = utils_1.bar;
27-
utils_1.foo();
27+
(0, utils_1.foo)();
2828
var obj;
2929

3030

tests/baselines/reference/declarationEmitForGlobalishSpecifierSymlink.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ export const a: import("typescript-fsa").A;
3838
"use strict";
3939
exports.__esModule = true;
4040
var typescript_fsa_1 = require("typescript-fsa");
41-
exports.a = typescript_fsa_1.getA();
41+
exports.a = (0, typescript_fsa_1.getA)();
4242

4343

4444
//// [index.d.ts]

tests/baselines/reference/declarationEmitForGlobalishSpecifierSymlink2.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export const a: import("typescript-fsa").A;
2626
"use strict";
2727
exports.__esModule = true;
2828
var typescript_fsa_1 = require("typescript-fsa");
29-
exports.a = typescript_fsa_1.getA();
29+
exports.a = (0, typescript_fsa_1.getA)();
3030

3131

3232
//// [index.d.ts]

tests/baselines/reference/declarationEmitForTypesWhichNeedImportTypes.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ exports.createNamed = createNamed;
2323
"use strict";
2424
exports.__esModule = true;
2525
var b_1 = require("./b");
26-
exports.Value = b_1.createNamed();
26+
exports.Value = (0, b_1.createNamed)();
2727

2828

2929
//// [b.d.ts]

tests/baselines/reference/declarationEmitPathMappingMonorepo.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ export function b(text: string) {
2020
exports.__esModule = true;
2121
var a_1 = require("@ts-bug/a");
2222
function b(text) {
23-
return a_1.a(text);
23+
return (0, a_1.a)(text);
2424
}
2525
exports.b = b;
2626

tests/baselines/reference/declarationEmitPrefersPathKindBasedOnBundling.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3232
var scalar_1 = require("../lib/operators/scalar");
3333
exports.default = {
3434
get xs() {
35-
return scalar_1.scalar("14px");
35+
return (0, scalar_1.scalar)("14px");
3636
}
3737
};
3838

tests/baselines/reference/declarationEmitPrefersPathKindBasedOnBundling2.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ define("settings/spacing", ["require", "exports", "lib/operators/scalar"], funct
3333
Object.defineProperty(exports, "__esModule", { value: true });
3434
exports.default = {
3535
get xs() {
36-
return scalar_1.scalar("14px");
36+
return (0, scalar_1.scalar)("14px");
3737
}
3838
};
3939
});

tests/baselines/reference/declarationEmitQualifiedAliasTypeArgument.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ export const fun2 = create<Q>();
3131
"use strict";
3232
exports.__esModule = true;
3333
var bbb_1 = require("./bbb");
34-
exports.fun = bbb_1.create();
35-
exports.fun2 = bbb_1.create();
34+
exports.fun = (0, bbb_1.create)();
35+
exports.fun2 = (0, bbb_1.create)();
3636

3737

3838
//// [index.d.ts]

tests/baselines/reference/declarationsForInferredTypeFromOtherFile.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ exports.foo = foo;
3434
exports.__esModule = true;
3535
var file2_1 = require("./file2");
3636
function bar() {
37-
return file2_1.foo();
37+
return (0, file2_1.foo)();
3838
}
3939
exports.bar = bar;
4040

tests/baselines/reference/declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,11 @@ exports.testRecFun = function (parent) {
7373
return {
7474
result: parent,
7575
deeper: function (child) {
76-
return exports.testRecFun(__assign(__assign({}, parent), child));
76+
return (0, exports.testRecFun)(__assign(__assign({}, parent), child));
7777
}
7878
};
7979
};
80-
var p1 = exports.testRecFun({ one: '1' });
80+
var p1 = (0, exports.testRecFun)({ one: '1' });
8181
void p1.result.one;
8282
var p2 = p1.deeper({ two: '2' });
8383
void p2.result.one;

tests/baselines/reference/defaultDeclarationEmitDefaultImport.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ exports["default"] = Something;
2323
"use strict";
2424
exports.__esModule = true;
2525
var root_1 = require("./root");
26-
exports.instance = root_1.getSomething();
26+
exports.instance = (0, root_1.getSomething)();
2727

2828

2929
//// [root.d.ts]

tests/baselines/reference/defaultExportsCannotMerge01.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ exports.default = Decl;
4444
"use strict";
4545
Object.defineProperty(exports, "__esModule", { value: true });
4646
var m1_1 = require("m1");
47-
m1_1.default();
47+
(0, m1_1.default)();
4848
var x;
4949
var y;
5050
m1_1.default.x;

tests/baselines/reference/defaultExportsCannotMerge02.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ exports.default = Decl;
3737
"use strict";
3838
Object.defineProperty(exports, "__esModule", { value: true });
3939
var m1_1 = require("m1");
40-
m1_1.default();
40+
(0, m1_1.default)();
4141
var x;
4242
var y;
4343
var z = new m1_1.default();

tests/baselines/reference/defaultExportsCannotMerge03.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ exports.default = Decl;
3737
"use strict";
3838
Object.defineProperty(exports, "__esModule", { value: true });
3939
var m1_1 = require("m1");
40-
m1_1.default();
40+
(0, m1_1.default)();
4141
var x;
4242
var y;
4343
var z = new m1_1.default();

tests/baselines/reference/duplicatePackage.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,5 +48,5 @@ exports.__esModule = true;
4848
var a_1 = require("a");
4949
var b_1 = require("b");
5050
var c_1 = require("c");
51-
a_1.a(b_1.b); // Works
52-
a_1.a(c_1.c); // Error, these are from different versions of the library.
51+
(0, a_1.a)(b_1.b); // Works
52+
(0, a_1.a)(c_1.c); // Error, these are from different versions of the library.

tests/baselines/reference/duplicatePackage_relativeImportWithinPackage.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,4 @@ use(o);
4242
exports.__esModule = true;
4343
var use_1 = require("foo/use");
4444
var a_1 = require("a");
45-
use_1.use(a_1.o);
45+
(0, use_1.use)(a_1.o);

tests/baselines/reference/duplicatePackage_relativeImportWithinPackage_scoped.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,4 @@ use(o);
4242
exports.__esModule = true;
4343
var use_1 = require("@foo/bar/use");
4444
var a_1 = require("a");
45-
use_1.use(a_1.o);
45+
(0, use_1.use)(a_1.o);

tests/baselines/reference/es3defaultAliasIsQuoted.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,4 @@ exports["default"] = assert;
3232
"use strict";
3333
exports.__esModule = true;
3434
var es3defaultAliasQuoted_file0_1 = require("./es3defaultAliasQuoted_file0");
35-
es3defaultAliasQuoted_file0_1["default"](es3defaultAliasQuoted_file0_1.Foo.CONSTANT === "Foo");
35+
(0, es3defaultAliasQuoted_file0_1["default"])(es3defaultAliasQuoted_file0_1.Foo.CONSTANT === "Foo");

tests/baselines/reference/es5-importHelpersAsyncFunctions.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ export declare function __generator(body: Function): any;
2222
Object.defineProperty(exports, "__esModule", { value: true });
2323
var tslib_1 = require("tslib");
2424
function foo() {
25-
return tslib_1.__awaiter(this, void 0, void 0, function () {
26-
return tslib_1.__generator(this, function (_a) {
25+
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
26+
return (0, tslib_1.__generator)(this, function (_a) {
2727
return [2 /*return*/];
2828
});
2929
});

tests/baselines/reference/esModuleInterop.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,5 +35,5 @@ var hybrid_1 = require("./hybrid");
3535
var path_1 = __importDefault(require("./path"));
3636
var fs = __importStar(require("./fs"));
3737
path_1["default"];
38-
hybrid_1.sayHello();
38+
(0, hybrid_1.sayHello)();
3939
fs;

tests/baselines/reference/esModuleInteropImportTSLibHasImport.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ exports.username = () => 'username';
2424
"use strict";
2525
Object.defineProperty(exports, "__esModule", { value: true });
2626
const tslib_1 = require("tslib");
27-
tslib_1.__exportStar(require("./username"), exports);
27+
(0, tslib_1.__exportStar)(require("./username"), exports);
2828
//// [hello.js]
2929
"use strict";
3030
Object.defineProperty(exports, "__esModule", { value: true });
@@ -34,6 +34,6 @@ exports.default = sayHello;
3434
"use strict";
3535
Object.defineProperty(exports, "__esModule", { value: true });
3636
const tslib_1 = require("tslib");
37-
const hello_1 = tslib_1.__importDefault(require("./hello"));
37+
const hello_1 = (0, tslib_1.__importDefault)(require("./hello"));
3838
const utils_1 = require("./utils");
39-
hello_1.default(utils_1.username());
39+
(0, hello_1.default)((0, utils_1.username)());

tests/baselines/reference/esModuleInteropTslibHelpers.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ export { Bar }
2323
"use strict";
2424
exports.__esModule = true;
2525
var tslib_1 = require("tslib");
26-
var path_1 = tslib_1.__importDefault(require("path"));
26+
var path_1 = (0, tslib_1.__importDefault)(require("path"));
2727
path_1["default"].resolve("", "../");
2828
var Foo = /** @class */ (function () {
2929
function Foo() {
@@ -35,7 +35,7 @@ exports.Foo = Foo;
3535
"use strict";
3636
exports.__esModule = true;
3737
var tslib_1 = require("tslib");
38-
var path = tslib_1.__importStar(require("path"));
38+
var path = (0, tslib_1.__importStar)(require("path"));
3939
path.resolve("", "../");
4040
var Foo2 = /** @class */ (function () {
4141
function Foo2() {
@@ -47,8 +47,8 @@ exports.Foo2 = Foo2;
4747
"use strict";
4848
exports.__esModule = true;
4949
var tslib_1 = require("tslib");
50-
var path_1 = tslib_1.__importDefault(require("path"));
51-
path_1["default"]("", "../");
50+
var path_1 = (0, tslib_1.__importDefault)(require("path"));
51+
(0, path_1["default"])("", "../");
5252
var Foo3 = /** @class */ (function () {
5353
function Foo3() {
5454
}
@@ -59,6 +59,6 @@ exports.Foo3 = Foo3;
5959
"use strict";
6060
exports.__esModule = true;
6161
var tslib_1 = require("tslib");
62-
var path_1 = tslib_1.__importStar(require("path"));
62+
var path_1 = (0, tslib_1.__importStar)(require("path"));
6363
exports.Bar = path_1.Bar;
64-
path_1["default"]("", "../");
64+
(0, path_1["default"])("", "../");

0 commit comments

Comments
 (0)