mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-05 08:11:30 -06:00
Fix crash on aliased,exported @enum tag in jsdoc (#36996)
THe code to bind `@enum` and `@typedef` didn't handle the case that the
`@enum` was on a property assignment to an alias of module.exports.
Specifically, `x` needs to be correctly aliased to the file's symbol in
the example below:
```
var x = module.exports = {};
/** @enum {string} */
x.E = {
A: "A"
};
```
This commit is contained in:
parent
65e7acce58
commit
3e3df8702c
@ -2113,7 +2113,9 @@ namespace ts {
|
||||
container = (declName.parent.expression as PropertyAccessExpression).name;
|
||||
break;
|
||||
case AssignmentDeclarationKind.Property:
|
||||
container = isPropertyAccessExpression(declName.parent.expression) ? declName.parent.expression.name : declName.parent.expression;
|
||||
container = isExportsOrModuleExportsOrAlias(file, declName.parent.expression) ? file
|
||||
: isPropertyAccessExpression(declName.parent.expression) ? declName.parent.expression.name
|
||||
: declName.parent.expression;
|
||||
break;
|
||||
case AssignmentDeclarationKind.None:
|
||||
return Debug.fail("Shouldn't have detected typedef or enum on non-assignment declaration");
|
||||
|
||||
18
tests/baselines/reference/exportedAliasedEnumTag.symbols
Normal file
18
tests/baselines/reference/exportedAliasedEnumTag.symbols
Normal file
@ -0,0 +1,18 @@
|
||||
=== tests/cases/conformance/jsdoc/exportedAliasedEnumTag.js ===
|
||||
var middlewarify = module.exports = {};
|
||||
>middlewarify : Symbol(middlewarify, Decl(exportedAliasedEnumTag.js, 0, 3))
|
||||
>module.exports : Symbol("tests/cases/conformance/jsdoc/exportedAliasedEnumTag", Decl(exportedAliasedEnumTag.js, 0, 0))
|
||||
>module : Symbol(module, Decl(exportedAliasedEnumTag.js, 0, 18))
|
||||
>exports : Symbol("tests/cases/conformance/jsdoc/exportedAliasedEnumTag", Decl(exportedAliasedEnumTag.js, 0, 0))
|
||||
|
||||
/** @enum */
|
||||
middlewarify.Type = {
|
||||
>middlewarify.Type : Symbol(Type, Decl(exportedAliasedEnumTag.js, 0, 39), Decl(exportedAliasedEnumTag.js, 3, 13), Decl(exportedAliasedEnumTag.js, 2, 4))
|
||||
>middlewarify : Symbol(middlewarify, Decl(exportedAliasedEnumTag.js, 0, 3))
|
||||
>Type : Symbol(Type, Decl(exportedAliasedEnumTag.js, 0, 39), Decl(exportedAliasedEnumTag.js, 3, 13), Decl(exportedAliasedEnumTag.js, 2, 4))
|
||||
|
||||
BEFORE: 'before'
|
||||
>BEFORE : Symbol(BEFORE, Decl(exportedAliasedEnumTag.js, 3, 21))
|
||||
|
||||
};
|
||||
|
||||
23
tests/baselines/reference/exportedAliasedEnumTag.types
Normal file
23
tests/baselines/reference/exportedAliasedEnumTag.types
Normal file
@ -0,0 +1,23 @@
|
||||
=== tests/cases/conformance/jsdoc/exportedAliasedEnumTag.js ===
|
||||
var middlewarify = module.exports = {};
|
||||
>middlewarify : typeof import("tests/cases/conformance/jsdoc/exportedAliasedEnumTag")
|
||||
>module.exports = {} : typeof import("tests/cases/conformance/jsdoc/exportedAliasedEnumTag")
|
||||
>module.exports : typeof import("tests/cases/conformance/jsdoc/exportedAliasedEnumTag")
|
||||
>module : { "\"tests/cases/conformance/jsdoc/exportedAliasedEnumTag\"": typeof import("tests/cases/conformance/jsdoc/exportedAliasedEnumTag"); }
|
||||
>exports : typeof import("tests/cases/conformance/jsdoc/exportedAliasedEnumTag")
|
||||
>{} : {}
|
||||
|
||||
/** @enum */
|
||||
middlewarify.Type = {
|
||||
>middlewarify.Type = { BEFORE: 'before'} : { BEFORE: string; }
|
||||
>middlewarify.Type : { BEFORE: string; }
|
||||
>middlewarify : typeof import("tests/cases/conformance/jsdoc/exportedAliasedEnumTag")
|
||||
>Type : { BEFORE: string; }
|
||||
>{ BEFORE: 'before'} : { BEFORE: string; }
|
||||
|
||||
BEFORE: 'before'
|
||||
>BEFORE : string
|
||||
>'before' : "before"
|
||||
|
||||
};
|
||||
|
||||
9
tests/cases/conformance/jsdoc/exportedAliasedEnumTag.ts
Normal file
9
tests/cases/conformance/jsdoc/exportedAliasedEnumTag.ts
Normal file
@ -0,0 +1,9 @@
|
||||
// @noemit: true
|
||||
// @allowjs: true
|
||||
// @filename: exportedAliasedEnumTag.js
|
||||
var middlewarify = module.exports = {};
|
||||
|
||||
/** @enum */
|
||||
middlewarify.Type = {
|
||||
BEFORE: 'before'
|
||||
};
|
||||
Loading…
x
Reference in New Issue
Block a user