mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-05-15 04:43:37 -05:00
Handle Identifier declarations in getDeclarationSpaces (#36136)
This commit is contained in:
@@ -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);
|
||||
|
||||
38
tests/baselines/reference/jsFileESModuleWithEnumTag.symbols
Normal file
38
tests/baselines/reference/jsFileESModuleWithEnumTag.symbols
Normal 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)
|
||||
|
||||
|
||||
52
tests/baselines/reference/jsFileESModuleWithEnumTag.types
Normal file
52
tests/baselines/reference/jsFileESModuleWithEnumTag.types
Normal 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"
|
||||
|
||||
|
||||
16
tests/cases/compiler/jsFileESModuleWithEnumTag.ts
Normal file
16
tests/cases/compiler/jsFileESModuleWithEnumTag.ts
Normal 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"];
|
||||
|
||||
Reference in New Issue
Block a user