From d10994256405ef82239ba2d32462ece847dfac9b Mon Sep 17 00:00:00 2001 From: Andy Hanson Date: Mon, 22 Jan 2018 11:55:31 -0800 Subject: [PATCH 1/3] Assert `exportingModuleSymbol` is defined --- src/compiler/core.ts | 5 +++++ src/services/findAllReferences.ts | 2 +- src/services/importTracker.ts | 3 +-- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/compiler/core.ts b/src/compiler/core.ts index ae506fd616a15..fd85a44a7c8a2 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -2872,6 +2872,11 @@ namespace ts { throw e; } + export function assertDefined(value: T | null | undefined): T { + assert(value !== undefined && value !== null); + return value; + } + export function assertNever(member: never, message?: string, stackCrawlMark?: AnyFunction): never { return fail(message || `Illegal value: ${member}`, stackCrawlMark || assertNever); } diff --git a/src/services/findAllReferences.ts b/src/services/findAllReferences.ts index 31a0702bb82ac..197428c400ba5 100644 --- a/src/services/findAllReferences.ts +++ b/src/services/findAllReferences.ts @@ -366,7 +366,7 @@ namespace ts.FindAllReferences.Core { if (node.kind === SyntaxKind.DefaultKeyword) { addReference(node, symbol, node, state); - searchForImportsOfExport(node, symbol, { exportingModuleSymbol: symbol.parent, exportKind: ExportKind.Default }, state); + searchForImportsOfExport(node, symbol, { exportingModuleSymbol: Debug.assertDefined(symbol.parent), exportKind: ExportKind.Default }, state); } else { const search = state.createSearch(node, symbol, /*comingFrom*/ undefined, { allSearchSymbols: populateSearchSymbolSet(symbol, node, checker, options.implementations) }); diff --git a/src/services/importTracker.ts b/src/services/importTracker.ts index d2ce802f177b2..05471880678a7 100644 --- a/src/services/importTracker.ts +++ b/src/services/importTracker.ts @@ -491,8 +491,7 @@ namespace ts.FindAllReferences { function getExportAssignmentExport(ex: ExportAssignment): ExportedSymbol { // Get the symbol for the `export =` node; its parent is the module it's the export of. - const exportingModuleSymbol = ex.symbol.parent; - Debug.assert(!!exportingModuleSymbol); + const exportingModuleSymbol = Debug.assertDefined(ex.symbol.parent); const exportKind = ex.isExportEquals ? ExportKind.ExportEquals : ExportKind.Default; return { kind: ImportExport.Export, symbol, exportInfo: { exportingModuleSymbol, exportKind } }; } From 03581a47130105706c9e66e18768f6e3294075eb Mon Sep 17 00:00:00 2001 From: Andy Hanson Date: Fri, 2 Feb 2018 09:31:34 -0800 Subject: [PATCH 2/3] Add assert message --- src/compiler/core.ts | 4 ++-- src/services/findAllReferences.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/compiler/core.ts b/src/compiler/core.ts index fd85a44a7c8a2..9ccf6d7e6cdd5 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -2872,8 +2872,8 @@ namespace ts { throw e; } - export function assertDefined(value: T | null | undefined): T { - assert(value !== undefined && value !== null); + export function assertDefined(value: T | null | undefined, message?: string): T { + assert(value !== undefined && value !== null, message); return value; } diff --git a/src/services/findAllReferences.ts b/src/services/findAllReferences.ts index 197428c400ba5..6869e7331c338 100644 --- a/src/services/findAllReferences.ts +++ b/src/services/findAllReferences.ts @@ -366,7 +366,7 @@ namespace ts.FindAllReferences.Core { if (node.kind === SyntaxKind.DefaultKeyword) { addReference(node, symbol, node, state); - searchForImportsOfExport(node, symbol, { exportingModuleSymbol: Debug.assertDefined(symbol.parent), exportKind: ExportKind.Default }, state); + searchForImportsOfExport(node, symbol, { exportingModuleSymbol: Debug.assertDefined(symbol.parent, "Expected export symbol to have a parent"), exportKind: ExportKind.Default }, state); } else { const search = state.createSearch(node, symbol, /*comingFrom*/ undefined, { allSearchSymbols: populateSearchSymbolSet(symbol, node, checker, options.implementations) }); From 2970abfe0316b4f5b3850909cb7877da365de03b Mon Sep 17 00:00:00 2001 From: Andy Hanson Date: Fri, 2 Feb 2018 10:20:57 -0800 Subject: [PATCH 3/3] Add message in both places --- src/services/importTracker.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/importTracker.ts b/src/services/importTracker.ts index 05471880678a7..4ccfb85da8425 100644 --- a/src/services/importTracker.ts +++ b/src/services/importTracker.ts @@ -491,7 +491,7 @@ namespace ts.FindAllReferences { function getExportAssignmentExport(ex: ExportAssignment): ExportedSymbol { // Get the symbol for the `export =` node; its parent is the module it's the export of. - const exportingModuleSymbol = Debug.assertDefined(ex.symbol.parent); + const exportingModuleSymbol = Debug.assertDefined(ex.symbol.parent, "Expected export symbol to have a parent"); const exportKind = ex.isExportEquals ? ExportKind.ExportEquals : ExportKind.Default; return { kind: ImportExport.Export, symbol, exportInfo: { exportingModuleSymbol, exportKind } }; }