Skip to content

Commit 3768dae

Browse files
authored
Merge pull request #15594 from Microsoft/get-name-of-declaration-wrapper
Get name of declaration uniformly, even for JS-style assignment declarations.
2 parents 1737598 + 157b777 commit 3768dae

20 files changed

+183
-133
lines changed

src/compiler/binder.ts

+14-13
Original file line numberDiff line numberDiff line change
@@ -227,12 +227,13 @@ namespace ts {
227227
// Should not be called on a declaration with a computed property name,
228228
// unless it is a well known Symbol.
229229
function getDeclarationName(node: Declaration): string {
230-
if (node.name) {
230+
const name = getNameOfDeclaration(node);
231+
if (name) {
231232
if (isAmbientModule(node)) {
232-
return isGlobalScopeAugmentation(<ModuleDeclaration>node) ? "__global" : `"${(<LiteralExpression>node.name).text}"`;
233+
return isGlobalScopeAugmentation(<ModuleDeclaration>node) ? "__global" : `"${(<LiteralExpression>name).text}"`;
233234
}
234-
if (node.name.kind === SyntaxKind.ComputedPropertyName) {
235-
const nameExpression = (<ComputedPropertyName>node.name).expression;
235+
if (name.kind === SyntaxKind.ComputedPropertyName) {
236+
const nameExpression = (<ComputedPropertyName>name).expression;
236237
// treat computed property names where expression is string/numeric literal as just string/numeric literal
237238
if (isStringOrNumericLiteral(nameExpression)) {
238239
return nameExpression.text;
@@ -241,7 +242,7 @@ namespace ts {
241242
Debug.assert(isWellKnownSymbolSyntactically(nameExpression));
242243
return getPropertyNameForKnownSymbolName((<PropertyAccessExpression>nameExpression).name.text);
243244
}
244-
return (<Identifier | LiteralExpression>node.name).text;
245+
return (<Identifier | LiteralExpression>name).text;
245246
}
246247
switch (node.kind) {
247248
case SyntaxKind.Constructor:
@@ -303,7 +304,7 @@ namespace ts {
303304
}
304305

305306
function getDisplayName(node: Declaration): string {
306-
return node.name ? declarationNameToString(node.name) : getDeclarationName(node);
307+
return (node as NamedDeclaration).name ? declarationNameToString((node as NamedDeclaration).name) : getDeclarationName(node);
307308
}
308309

309310
/**
@@ -366,8 +367,8 @@ namespace ts {
366367
symbolTable.set(name, symbol = createSymbol(SymbolFlags.None, name));
367368
}
368369
else {
369-
if (node.name) {
370-
node.name.parent = node;
370+
if ((node as NamedDeclaration).name) {
371+
(node as NamedDeclaration).name.parent = node;
371372
}
372373

373374
// Report errors every position with duplicate declaration
@@ -396,9 +397,9 @@ namespace ts {
396397
}
397398

398399
forEach(symbol.declarations, declaration => {
399-
file.bindDiagnostics.push(createDiagnosticForNode(declaration.name || declaration, message, getDisplayName(declaration)));
400+
file.bindDiagnostics.push(createDiagnosticForNode(getNameOfDeclaration(declaration) || declaration, message, getDisplayName(declaration)));
400401
});
401-
file.bindDiagnostics.push(createDiagnosticForNode(node.name || node, message, getDisplayName(node)));
402+
file.bindDiagnostics.push(createDiagnosticForNode(getNameOfDeclaration(node) || node, message, getDisplayName(node)));
402403

403404
symbol = createSymbol(SymbolFlags.None, name);
404405
}
@@ -439,9 +440,9 @@ namespace ts {
439440
// and this case is specially handled. Module augmentations should only be merged with original module definition
440441
// and should never be merged directly with other augmentation, and the latter case would be possible if automatic merge is allowed.
441442
const isJSDocTypedefInJSDocNamespace = node.kind === SyntaxKind.JSDocTypedefTag &&
442-
node.name &&
443-
node.name.kind === SyntaxKind.Identifier &&
444-
(<Identifier>node.name).isInJSDocNamespace;
443+
(node as JSDocTypedefTag).name &&
444+
(node as JSDocTypedefTag).name.kind === SyntaxKind.Identifier &&
445+
((node as JSDocTypedefTag).name as Identifier).isInJSDocNamespace;
445446
if ((!isAmbientModule(node) && (hasExportModifier || container.flags & NodeFlags.ExportContext)) || isJSDocTypedefInJSDocNamespace) {
446447
const exportKind =
447448
(symbolFlags & SymbolFlags.Value ? SymbolFlags.ExportValue : 0) |

0 commit comments

Comments
 (0)