From 1b6d9229f2699b4285e32466818fa0abe925cd49 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Fri, 1 Jun 2018 14:14:56 -0700 Subject: [PATCH] Visit super arguments even when no signature exists (#24591) --- src/compiler/checker.ts | 1 + .../importNotElidedWhenNotFound.errors.txt | 17 ++++++++++ .../reference/importNotElidedWhenNotFound.js | 32 +++++++++++++++++++ .../importNotElidedWhenNotFound.symbols | 16 ++++++++++ .../importNotElidedWhenNotFound.types | 18 +++++++++++ .../compiler/importNotElidedWhenNotFound.ts | 8 +++++ 6 files changed, 92 insertions(+) create mode 100644 tests/baselines/reference/importNotElidedWhenNotFound.errors.txt create mode 100644 tests/baselines/reference/importNotElidedWhenNotFound.js create mode 100644 tests/baselines/reference/importNotElidedWhenNotFound.symbols create mode 100644 tests/baselines/reference/importNotElidedWhenNotFound.types create mode 100644 tests/cases/compiler/importNotElidedWhenNotFound.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 1b7b5fc3656..2df1a583876 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -18678,6 +18678,7 @@ namespace ts { if (node.expression.kind === SyntaxKind.SuperKeyword) { const superType = checkSuperExpression(node.expression); if (isTypeAny(superType)) { + forEach(node.arguments, checkExpression); // Still visit arguments so they get marked for visibility, etc return anySignature; } if (superType !== errorType) { diff --git a/tests/baselines/reference/importNotElidedWhenNotFound.errors.txt b/tests/baselines/reference/importNotElidedWhenNotFound.errors.txt new file mode 100644 index 00000000000..51e1fe9b44d --- /dev/null +++ b/tests/baselines/reference/importNotElidedWhenNotFound.errors.txt @@ -0,0 +1,17 @@ +tests/cases/compiler/importNotElidedWhenNotFound.ts(1,15): error TS2307: Cannot find module 'file'. +tests/cases/compiler/importNotElidedWhenNotFound.ts(2,15): error TS2307: Cannot find module 'other_file'. + + +==== tests/cases/compiler/importNotElidedWhenNotFound.ts (2 errors) ==== + import X from 'file'; + ~~~~~~ +!!! error TS2307: Cannot find module 'file'. + import Z from 'other_file'; + ~~~~~~~~~~~~ +!!! error TS2307: Cannot find module 'other_file'. + + class Y extends Z { + constructor() { + super(X); + } + } \ No newline at end of file diff --git a/tests/baselines/reference/importNotElidedWhenNotFound.js b/tests/baselines/reference/importNotElidedWhenNotFound.js new file mode 100644 index 00000000000..303e5df8f22 --- /dev/null +++ b/tests/baselines/reference/importNotElidedWhenNotFound.js @@ -0,0 +1,32 @@ +//// [importNotElidedWhenNotFound.ts] +import X from 'file'; +import Z from 'other_file'; + +class Y extends Z { + constructor() { + super(X); + } +} + +//// [importNotElidedWhenNotFound.js] +"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +exports.__esModule = true; +var file_1 = require("file"); +var other_file_1 = require("other_file"); +var Y = /** @class */ (function (_super) { + __extends(Y, _super); + function Y() { + return _super.call(this, file_1["default"]) || this; + } + return Y; +}(other_file_1["default"])); diff --git a/tests/baselines/reference/importNotElidedWhenNotFound.symbols b/tests/baselines/reference/importNotElidedWhenNotFound.symbols new file mode 100644 index 00000000000..37558d6be3d --- /dev/null +++ b/tests/baselines/reference/importNotElidedWhenNotFound.symbols @@ -0,0 +1,16 @@ +=== tests/cases/compiler/importNotElidedWhenNotFound.ts === +import X from 'file'; +>X : Symbol(X, Decl(importNotElidedWhenNotFound.ts, 0, 6)) + +import Z from 'other_file'; +>Z : Symbol(Z, Decl(importNotElidedWhenNotFound.ts, 1, 6)) + +class Y extends Z { +>Y : Symbol(Y, Decl(importNotElidedWhenNotFound.ts, 1, 27)) +>Z : Symbol(Z, Decl(importNotElidedWhenNotFound.ts, 1, 6)) + + constructor() { + super(X); +>X : Symbol(X, Decl(importNotElidedWhenNotFound.ts, 0, 6)) + } +} diff --git a/tests/baselines/reference/importNotElidedWhenNotFound.types b/tests/baselines/reference/importNotElidedWhenNotFound.types new file mode 100644 index 00000000000..02304b6e2d2 --- /dev/null +++ b/tests/baselines/reference/importNotElidedWhenNotFound.types @@ -0,0 +1,18 @@ +=== tests/cases/compiler/importNotElidedWhenNotFound.ts === +import X from 'file'; +>X : any + +import Z from 'other_file'; +>Z : any + +class Y extends Z { +>Y : Y +>Z : any + + constructor() { + super(X); +>super(X) : void +>super : any +>X : any + } +} diff --git a/tests/cases/compiler/importNotElidedWhenNotFound.ts b/tests/cases/compiler/importNotElidedWhenNotFound.ts new file mode 100644 index 00000000000..2ff7cd64d0d --- /dev/null +++ b/tests/cases/compiler/importNotElidedWhenNotFound.ts @@ -0,0 +1,8 @@ +import X from 'file'; +import Z from 'other_file'; + +class Y extends Z { + constructor() { + super(X); + } +} \ No newline at end of file