From ec8c8b801919de3c50f1451d7427e18a09af1720 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Mon, 5 Dec 2022 11:11:05 -0800 Subject: [PATCH 1/2] Fix #51623 --- src/compiler/checker.ts | 2 +- .../fixCrashAliasLookupForDefauledImport.js | 25 ++++++++++ ...xCrashAliasLookupForDefauledImport.symbols | 22 +++++++++ ...fixCrashAliasLookupForDefauledImport.types | 22 +++++++++ .../fixCrashAliasLookupForDefauledImport.ts | 11 +++++ .../fourslash/refactorExtractType_js8.ts | 46 +++++++++---------- 6 files changed, 104 insertions(+), 24 deletions(-) create mode 100644 tests/baselines/reference/fixCrashAliasLookupForDefauledImport.js create mode 100644 tests/baselines/reference/fixCrashAliasLookupForDefauledImport.symbols create mode 100644 tests/baselines/reference/fixCrashAliasLookupForDefauledImport.types create mode 100644 tests/cases/compiler/fixCrashAliasLookupForDefauledImport.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 11164845ba139..c3c2b2e25c722 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -14896,7 +14896,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { const resolved = resolveAlias(aliasSymbol); if (resolved && resolved.flags & SymbolFlags.TypeAlias) { newAliasSymbol = resolved; - aliasTypeArguments = typeArgumentsFromTypeReferenceNode(node); + aliasTypeArguments = typeArgumentsFromTypeReferenceNode(node) || (typeParameters ? [] : undefined); } } } diff --git a/tests/baselines/reference/fixCrashAliasLookupForDefauledImport.js b/tests/baselines/reference/fixCrashAliasLookupForDefauledImport.js new file mode 100644 index 0000000000000..0b01d73ce87ce --- /dev/null +++ b/tests/baselines/reference/fixCrashAliasLookupForDefauledImport.js @@ -0,0 +1,25 @@ +//// [tests/cases/compiler/fixCrashAliasLookupForDefauledImport.ts] //// + +//// [input.ts] +export type Foo = {}; + +//// [usage.ts] +import {Foo} from "./input"; + +function bar(element: Foo) { + return 1; +} + +bar(1 as Foo); + + +//// [input.js] +"use strict"; +exports.__esModule = true; +//// [usage.js] +"use strict"; +exports.__esModule = true; +function bar(element) { + return 1; +} +bar(1); diff --git a/tests/baselines/reference/fixCrashAliasLookupForDefauledImport.symbols b/tests/baselines/reference/fixCrashAliasLookupForDefauledImport.symbols new file mode 100644 index 0000000000000..78574383420fa --- /dev/null +++ b/tests/baselines/reference/fixCrashAliasLookupForDefauledImport.symbols @@ -0,0 +1,22 @@ +=== tests/cases/compiler/input.ts === +export type Foo = {}; +>Foo : Symbol(Foo, Decl(input.ts, 0, 0)) +>T : Symbol(T, Decl(input.ts, 0, 16)) + +=== tests/cases/compiler/usage.ts === +import {Foo} from "./input"; +>Foo : Symbol(Foo, Decl(usage.ts, 0, 8)) + +function bar(element: Foo) { +>bar : Symbol(bar, Decl(usage.ts, 0, 28)) +>T : Symbol(T, Decl(usage.ts, 2, 13)) +>element : Symbol(element, Decl(usage.ts, 2, 16)) +>Foo : Symbol(Foo, Decl(usage.ts, 0, 8)) + + return 1; +} + +bar(1 as Foo); +>bar : Symbol(bar, Decl(usage.ts, 0, 28)) +>Foo : Symbol(Foo, Decl(usage.ts, 0, 8)) + diff --git a/tests/baselines/reference/fixCrashAliasLookupForDefauledImport.types b/tests/baselines/reference/fixCrashAliasLookupForDefauledImport.types new file mode 100644 index 0000000000000..6842c50459cc9 --- /dev/null +++ b/tests/baselines/reference/fixCrashAliasLookupForDefauledImport.types @@ -0,0 +1,22 @@ +=== tests/cases/compiler/input.ts === +export type Foo = {}; +>Foo : Foo + +=== tests/cases/compiler/usage.ts === +import {Foo} from "./input"; +>Foo : any + +function bar(element: Foo) { +>bar : (element: Foo) => number +>element : Foo + + return 1; +>1 : 1 +} + +bar(1 as Foo); +>bar(1 as Foo) : number +>bar : (element: Foo) => number +>1 as Foo : Foo +>1 : 1 + diff --git a/tests/cases/compiler/fixCrashAliasLookupForDefauledImport.ts b/tests/cases/compiler/fixCrashAliasLookupForDefauledImport.ts new file mode 100644 index 0000000000000..17f5ab92aae09 --- /dev/null +++ b/tests/cases/compiler/fixCrashAliasLookupForDefauledImport.ts @@ -0,0 +1,11 @@ +// @filename: input.ts +export type Foo = {}; + +// @filename: usage.ts +import {Foo} from "./input"; + +function bar(element: Foo) { + return 1; +} + +bar(1 as Foo); diff --git a/tests/cases/fourslash/refactorExtractType_js8.ts b/tests/cases/fourslash/refactorExtractType_js8.ts index 433c45c1ce78c..09fb36c444851 100644 --- a/tests/cases/fourslash/refactorExtractType_js8.ts +++ b/tests/cases/fourslash/refactorExtractType_js8.ts @@ -1,23 +1,23 @@ -/// - -// @allowJs: true -// @Filename: a.js -/////** -//// * @type {/*a*/Foo/*b*/} -//// */ - -goTo.file('a.js') -goTo.select("a", "b"); -edit.applyRefactor({ - refactorName: "Extract type", - actionName: "Extract to typedef", - actionDescription: "Extract to typedef", - newContent: -`/** - * @typedef {Foo} /*RENAME*/NewType - */ - -/** - * @type {NewType} - */`, -}); +/// + +// @allowJs: true +// @Filename: a.js +/////** +//// * @type {/*a*/Foo/*b*/} +//// */ + +goTo.file('a.js') +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Extract type", + actionName: "Extract to typedef", + actionDescription: "Extract to typedef", + newContent: +`/** + * @typedef {Foo} /*RENAME*/NewType + */ + +/** + * @type {NewType} + */`, +}); From 3aaed26e352b6937f5d1b08d726abefe590eb920 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Mon, 5 Dec 2022 11:26:40 -0800 Subject: [PATCH 2/2] Revert newline changes --- .../fourslash/refactorExtractType_js8.ts | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/tests/cases/fourslash/refactorExtractType_js8.ts b/tests/cases/fourslash/refactorExtractType_js8.ts index 09fb36c444851..433c45c1ce78c 100644 --- a/tests/cases/fourslash/refactorExtractType_js8.ts +++ b/tests/cases/fourslash/refactorExtractType_js8.ts @@ -1,23 +1,23 @@ -/// - -// @allowJs: true -// @Filename: a.js -/////** -//// * @type {/*a*/Foo/*b*/} -//// */ - -goTo.file('a.js') -goTo.select("a", "b"); -edit.applyRefactor({ - refactorName: "Extract type", - actionName: "Extract to typedef", - actionDescription: "Extract to typedef", - newContent: -`/** - * @typedef {Foo} /*RENAME*/NewType - */ - -/** - * @type {NewType} - */`, -}); +/// + +// @allowJs: true +// @Filename: a.js +/////** +//// * @type {/*a*/Foo/*b*/} +//// */ + +goTo.file('a.js') +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Extract type", + actionName: "Extract to typedef", + actionDescription: "Extract to typedef", + newContent: +`/** + * @typedef {Foo} /*RENAME*/NewType + */ + +/** + * @type {NewType} + */`, +});