From 4071d50344be4d8034a0016f7c4ef6e9bd3f9dfa Mon Sep 17 00:00:00 2001 From: Andy Hanson Date: Wed, 21 Feb 2018 11:05:07 -0800 Subject: [PATCH 1/3] Add 'isNamedDeclaration' helper to reduce casts --- src/compiler/binder.ts | 6 +++--- src/compiler/utilities.ts | 5 +++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index 06b15c7718daf..07020343a0a4c 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -315,7 +315,7 @@ namespace ts { } function getDisplayName(node: Declaration): string { - return (node as NamedDeclaration).name ? declarationNameToString((node as NamedDeclaration).name) : unescapeLeadingUnderscores(getDeclarationName(node)); + return isNamedDeclaration(node) ? declarationNameToString(node.name) : unescapeLeadingUnderscores(getDeclarationName(node)); } /** @@ -383,8 +383,8 @@ namespace ts { symbolTable.set(name, symbol = createSymbol(SymbolFlags.None, name)); } else { - if ((node as NamedDeclaration).name) { - (node as NamedDeclaration).name.parent = node; + if (isNamedDeclaration(node)) { + node.name.parent = node; } // Report errors every position with duplicate declaration diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 63214d68e5d12..1b44009867c2c 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -4298,6 +4298,11 @@ namespace ts { return declaration.name || nameForNamelessJSDocTypedef(declaration); } + /** @internal */ + export function isNamedDeclaration(node: Node): node is NamedDeclaration & { name: DeclarationName } { + return !!(node as NamedDeclaration).name; + } + export function getNameOfDeclaration(declaration: Declaration | Expression): DeclarationName | undefined { if (!declaration) { return undefined; From 52d830f6a5176c5e9ac43917594608c9e0870527 Mon Sep 17 00:00:00 2001 From: Andy Hanson Date: Thu, 22 Feb 2018 08:07:03 -0800 Subject: [PATCH 2/3] Add assertion --- src/compiler/utilities.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 1b44009867c2c..1f5a754970432 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -4300,7 +4300,9 @@ namespace ts { /** @internal */ export function isNamedDeclaration(node: Node): node is NamedDeclaration & { name: DeclarationName } { - return !!(node as NamedDeclaration).name; + const name = (node as NamedDeclaration).name; + Debug.assert(!name || isDeclaration(node) && node.name === name, "A 'name' property should always be a DeclarationName."); + return !!name; } export function getNameOfDeclaration(declaration: Declaration | Expression): DeclarationName | undefined { From 142824b0973e0dd0844279953758aef17f8bbe83 Mon Sep 17 00:00:00 2001 From: Andy Hanson Date: Mon, 5 Mar 2018 13:40:35 -0800 Subject: [PATCH 3/3] Remove assertion --- src/compiler/utilities.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 1f5a754970432..e0333dc42f5f1 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -4300,9 +4300,7 @@ namespace ts { /** @internal */ export function isNamedDeclaration(node: Node): node is NamedDeclaration & { name: DeclarationName } { - const name = (node as NamedDeclaration).name; - Debug.assert(!name || isDeclaration(node) && node.name === name, "A 'name' property should always be a DeclarationName."); - return !!name; + return !!(node as NamedDeclaration).name; // A 'name' property should always be a DeclarationName. } export function getNameOfDeclaration(declaration: Declaration | Expression): DeclarationName | undefined {