Handle Identifier declarations in getDeclarationSpaces (#36136)

This commit is contained in:
Wesley Wigham
2020-01-13 10:29:37 -08:00
committed by GitHub
parent 76ee0214f9
commit 69ab1d5ecd
4 changed files with 113 additions and 0 deletions

View File

@@ -29265,6 +29265,13 @@ namespace ts {
case SyntaxKind.BindingElement:
case SyntaxKind.FunctionDeclaration:
case SyntaxKind.ImportSpecifier: // https://github.com/Microsoft/TypeScript/pull/7591
case SyntaxKind.Identifier: // https://github.com/microsoft/TypeScript/issues/36098
// Identifiers are used as declarations of assignment declarations whose parents may be
// SyntaxKind.CallExpression - `Object.defineProperty(thing, "aField", {value: 42});`
// SyntaxKind.ElementAccessExpression - `thing["aField"] = 42;` or `thing["aField"];` (with a doc comment on it)
// or SyntaxKind.PropertyAccessExpression - `thing.aField = 42;`
// all of which are pretty much always values, or at least imply a value meaning.
// It may be apprpriate to treat these as aliases in the future.
return DeclarationSpaces.ExportValue;
default:
return Debug.failBadSyntaxKind(d);

View File

@@ -0,0 +1,38 @@
=== tests/cases/compiler/jsFileESModuleWithEnumTag.js ===
export {}; // mark as module
/** @enum {number} */
const ChangeDetectionStrategy = {
>ChangeDetectionStrategy : Symbol(ChangeDetectionStrategy, Decl(jsFileESModuleWithEnumTag.js, 2, 5), Decl(jsFileESModuleWithEnumTag.js, 5, 2), Decl(jsFileESModuleWithEnumTag.js, 6, 67), Decl(jsFileESModuleWithEnumTag.js, 8, 22), Decl(jsFileESModuleWithEnumTag.js, 8, 70) ... and 1 more)
OnPush: 0,
>OnPush : Symbol(OnPush, Decl(jsFileESModuleWithEnumTag.js, 2, 33))
Default: 1,
>Default : Symbol(Default, Decl(jsFileESModuleWithEnumTag.js, 3, 12))
};
ChangeDetectionStrategy[ChangeDetectionStrategy.OnPush] = 'OnPush';
>ChangeDetectionStrategy : Symbol(ChangeDetectionStrategy, Decl(jsFileESModuleWithEnumTag.js, 2, 5), Decl(jsFileESModuleWithEnumTag.js, 5, 2), Decl(jsFileESModuleWithEnumTag.js, 6, 67), Decl(jsFileESModuleWithEnumTag.js, 8, 22), Decl(jsFileESModuleWithEnumTag.js, 8, 70) ... and 1 more)
>ChangeDetectionStrategy.OnPush : Symbol(OnPush, Decl(jsFileESModuleWithEnumTag.js, 2, 33))
>ChangeDetectionStrategy : Symbol(ChangeDetectionStrategy, Decl(jsFileESModuleWithEnumTag.js, 2, 5), Decl(jsFileESModuleWithEnumTag.js, 5, 2), Decl(jsFileESModuleWithEnumTag.js, 6, 67), Decl(jsFileESModuleWithEnumTag.js, 8, 22), Decl(jsFileESModuleWithEnumTag.js, 8, 70) ... and 1 more)
>OnPush : Symbol(OnPush, Decl(jsFileESModuleWithEnumTag.js, 2, 33))
ChangeDetectionStrategy[ChangeDetectionStrategy.Default] = 'Default';
>ChangeDetectionStrategy : Symbol(ChangeDetectionStrategy, Decl(jsFileESModuleWithEnumTag.js, 2, 5), Decl(jsFileESModuleWithEnumTag.js, 5, 2), Decl(jsFileESModuleWithEnumTag.js, 6, 67), Decl(jsFileESModuleWithEnumTag.js, 8, 22), Decl(jsFileESModuleWithEnumTag.js, 8, 70) ... and 1 more)
>ChangeDetectionStrategy.Default : Symbol(Default, Decl(jsFileESModuleWithEnumTag.js, 3, 12))
>ChangeDetectionStrategy : Symbol(ChangeDetectionStrategy, Decl(jsFileESModuleWithEnumTag.js, 2, 5), Decl(jsFileESModuleWithEnumTag.js, 5, 2), Decl(jsFileESModuleWithEnumTag.js, 6, 67), Decl(jsFileESModuleWithEnumTag.js, 8, 22), Decl(jsFileESModuleWithEnumTag.js, 8, 70) ... and 1 more)
>Default : Symbol(Default, Decl(jsFileESModuleWithEnumTag.js, 3, 12))
Object.defineProperty(ChangeDetectionStrategy, "aField", {value: 42});
>Object.defineProperty : Symbol(ObjectConstructor.defineProperty, Decl(lib.es5.d.ts, --, --))
>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
>defineProperty : Symbol(ObjectConstructor.defineProperty, Decl(lib.es5.d.ts, --, --))
>ChangeDetectionStrategy : Symbol(ChangeDetectionStrategy, Decl(jsFileESModuleWithEnumTag.js, 2, 5), Decl(jsFileESModuleWithEnumTag.js, 5, 2), Decl(jsFileESModuleWithEnumTag.js, 6, 67), Decl(jsFileESModuleWithEnumTag.js, 8, 22), Decl(jsFileESModuleWithEnumTag.js, 8, 70) ... and 1 more)
>"aField" : Symbol(ChangeDetectionStrategy.aField, Decl(jsFileESModuleWithEnumTag.js, 7, 69))
>value : Symbol(value, Decl(jsFileESModuleWithEnumTag.js, 8, 58))
/** @type {number} */
ChangeDetectionStrategy["bField"];
>ChangeDetectionStrategy : Symbol(ChangeDetectionStrategy, Decl(jsFileESModuleWithEnumTag.js, 2, 5), Decl(jsFileESModuleWithEnumTag.js, 5, 2), Decl(jsFileESModuleWithEnumTag.js, 6, 67), Decl(jsFileESModuleWithEnumTag.js, 8, 22), Decl(jsFileESModuleWithEnumTag.js, 8, 70) ... and 1 more)

View File

@@ -0,0 +1,52 @@
=== tests/cases/compiler/jsFileESModuleWithEnumTag.js ===
export {}; // mark as module
/** @enum {number} */
const ChangeDetectionStrategy = {
>ChangeDetectionStrategy : { OnPush: number; Default: number; }
>{ OnPush: 0, Default: 1,} : { OnPush: number; Default: number; }
OnPush: 0,
>OnPush : number
>0 : 0
Default: 1,
>Default : number
>1 : 1
};
ChangeDetectionStrategy[ChangeDetectionStrategy.OnPush] = 'OnPush';
>ChangeDetectionStrategy[ChangeDetectionStrategy.OnPush] = 'OnPush' : "OnPush"
>ChangeDetectionStrategy[ChangeDetectionStrategy.OnPush] : error
>ChangeDetectionStrategy : { OnPush: number; Default: number; }
>ChangeDetectionStrategy.OnPush : number
>ChangeDetectionStrategy : { OnPush: number; Default: number; }
>OnPush : number
>'OnPush' : "OnPush"
ChangeDetectionStrategy[ChangeDetectionStrategy.Default] = 'Default';
>ChangeDetectionStrategy[ChangeDetectionStrategy.Default] = 'Default' : "Default"
>ChangeDetectionStrategy[ChangeDetectionStrategy.Default] : error
>ChangeDetectionStrategy : { OnPush: number; Default: number; }
>ChangeDetectionStrategy.Default : number
>ChangeDetectionStrategy : { OnPush: number; Default: number; }
>Default : number
>'Default' : "Default"
Object.defineProperty(ChangeDetectionStrategy, "aField", {value: 42});
>Object.defineProperty(ChangeDetectionStrategy, "aField", {value: 42}) : any
>Object.defineProperty : (o: any, p: string | number | symbol, attributes: PropertyDescriptor & ThisType<any>) => any
>Object : ObjectConstructor
>defineProperty : (o: any, p: string | number | symbol, attributes: PropertyDescriptor & ThisType<any>) => any
>ChangeDetectionStrategy : { OnPush: number; Default: number; }
>"aField" : "aField"
>{value: 42} : { value: number; }
>value : number
>42 : 42
/** @type {number} */
ChangeDetectionStrategy["bField"];
>ChangeDetectionStrategy["bField"] : error
>ChangeDetectionStrategy : { OnPush: number; Default: number; }
>"bField" : "bField"

View File

@@ -0,0 +1,16 @@
// @allowJs: true
// @checkJs: true
// @noEmit: true
// @filename: jsFileESModuleWithEnumTag.js
export {}; // mark as module
/** @enum {number} */
const ChangeDetectionStrategy = {
OnPush: 0,
Default: 1,
};
ChangeDetectionStrategy[ChangeDetectionStrategy.OnPush] = 'OnPush';
ChangeDetectionStrategy[ChangeDetectionStrategy.Default] = 'Default';
Object.defineProperty(ChangeDetectionStrategy, "aField", {value: 42});
/** @type {number} */
ChangeDetectionStrategy["bField"];