mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-09 20:51:43 -06:00
Component commits: 339e1320c4 Bind typedef/enum on all assignment decl kinds This fixes a crash on exports, but the code now handles all kinds returned from getAssignmentDeclarationPropertyAccessKind.
This commit is contained in:
parent
9cbb7ea29c
commit
49b910e4d4
@ -1815,7 +1815,23 @@ namespace ts {
|
||||
if (isTopLevel) {
|
||||
bindPotentiallyMissingNamespaces(file.symbol, declName.parent, isTopLevel, !!findAncestor(declName, d => isPropertyAccessExpression(d) && d.name.escapedText === "prototype"));
|
||||
const oldContainer = container;
|
||||
container = isPropertyAccessExpression(declName.parent.expression) ? declName.parent.expression.name : declName.parent.expression;
|
||||
switch (getAssignmentDeclarationPropertyAccessKind(declName.parent)) {
|
||||
case AssignmentDeclarationKind.ExportsProperty:
|
||||
case AssignmentDeclarationKind.ModuleExports:
|
||||
container = file;
|
||||
break;
|
||||
case AssignmentDeclarationKind.ThisProperty:
|
||||
container = declName.parent.expression;
|
||||
break;
|
||||
case AssignmentDeclarationKind.PrototypeProperty:
|
||||
container = (declName.parent.expression as PropertyAccessExpression).name;
|
||||
break;
|
||||
case AssignmentDeclarationKind.Property:
|
||||
container = 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");
|
||||
}
|
||||
declareModuleMember(typeAlias, SymbolFlags.TypeAlias, SymbolFlags.TypeAliasExcludes);
|
||||
container = oldContainer;
|
||||
}
|
||||
|
||||
15
tests/baselines/reference/enumTagOnExports.symbols
Normal file
15
tests/baselines/reference/enumTagOnExports.symbols
Normal file
@ -0,0 +1,15 @@
|
||||
=== tests/cases/conformance/jsdoc/enumTagOnExports.js ===
|
||||
/** @enum {number} */
|
||||
exports.a = {};
|
||||
>exports.a : Symbol(a, Decl(enumTagOnExports.js, 0, 0), Decl(enumTagOnExports.js, 1, 8), Decl(enumTagOnExports.js, 0, 4))
|
||||
>exports : Symbol(a, Decl(enumTagOnExports.js, 0, 0), Decl(enumTagOnExports.js, 1, 8), Decl(enumTagOnExports.js, 0, 4))
|
||||
>a : Symbol(a, Decl(enumTagOnExports.js, 0, 0), Decl(enumTagOnExports.js, 1, 8), Decl(enumTagOnExports.js, 0, 4))
|
||||
|
||||
/** @enum {string} */
|
||||
module.exports.b = {};
|
||||
>module.exports.b : Symbol(b, Decl(enumTagOnExports.js, 1, 15), Decl(enumTagOnExports.js, 4, 15), Decl(enumTagOnExports.js, 3, 4))
|
||||
>module.exports : Symbol(b, Decl(enumTagOnExports.js, 1, 15), Decl(enumTagOnExports.js, 4, 15), Decl(enumTagOnExports.js, 3, 4))
|
||||
>module : Symbol(module, Decl(enumTagOnExports.js, 1, 15))
|
||||
>exports : Symbol("tests/cases/conformance/jsdoc/enumTagOnExports", Decl(enumTagOnExports.js, 0, 0))
|
||||
>b : Symbol(b, Decl(enumTagOnExports.js, 1, 15), Decl(enumTagOnExports.js, 4, 15), Decl(enumTagOnExports.js, 3, 4))
|
||||
|
||||
19
tests/baselines/reference/enumTagOnExports.types
Normal file
19
tests/baselines/reference/enumTagOnExports.types
Normal file
@ -0,0 +1,19 @@
|
||||
=== tests/cases/conformance/jsdoc/enumTagOnExports.js ===
|
||||
/** @enum {number} */
|
||||
exports.a = {};
|
||||
>exports.a = {} : {}
|
||||
>exports.a : typeof a
|
||||
>exports : typeof import("tests/cases/conformance/jsdoc/enumTagOnExports")
|
||||
>a : typeof a
|
||||
>{} : {}
|
||||
|
||||
/** @enum {string} */
|
||||
module.exports.b = {};
|
||||
>module.exports.b = {} : {}
|
||||
>module.exports.b : typeof b
|
||||
>module.exports : typeof import("tests/cases/conformance/jsdoc/enumTagOnExports")
|
||||
>module : { "tests/cases/conformance/jsdoc/enumTagOnExports": typeof import("tests/cases/conformance/jsdoc/enumTagOnExports"); }
|
||||
>exports : typeof import("tests/cases/conformance/jsdoc/enumTagOnExports")
|
||||
>b : typeof b
|
||||
>{} : {}
|
||||
|
||||
7
tests/baselines/reference/enumTagOnExports2.symbols
Normal file
7
tests/baselines/reference/enumTagOnExports2.symbols
Normal file
@ -0,0 +1,7 @@
|
||||
=== tests/cases/conformance/jsdoc/enumTagOnExports.js ===
|
||||
/** @enum {string} */
|
||||
module.exports = {};
|
||||
>module.exports : Symbol("tests/cases/conformance/jsdoc/enumTagOnExports", Decl(enumTagOnExports.js, 0, 0))
|
||||
>module : Symbol(module, Decl(enumTagOnExports.js, 0, 0))
|
||||
>exports : Symbol("tests/cases/conformance/jsdoc/enumTagOnExports", Decl(enumTagOnExports.js, 0, 0))
|
||||
|
||||
9
tests/baselines/reference/enumTagOnExports2.types
Normal file
9
tests/baselines/reference/enumTagOnExports2.types
Normal file
@ -0,0 +1,9 @@
|
||||
=== tests/cases/conformance/jsdoc/enumTagOnExports.js ===
|
||||
/** @enum {string} */
|
||||
module.exports = {};
|
||||
>module.exports = {} : typeof import("tests/cases/conformance/jsdoc/enumTagOnExports")
|
||||
>module.exports : typeof import("tests/cases/conformance/jsdoc/enumTagOnExports")
|
||||
>module : { "tests/cases/conformance/jsdoc/enumTagOnExports": typeof import("tests/cases/conformance/jsdoc/enumTagOnExports"); }
|
||||
>exports : typeof import("tests/cases/conformance/jsdoc/enumTagOnExports")
|
||||
>{} : {}
|
||||
|
||||
10
tests/cases/conformance/jsdoc/enumTagOnExports.ts
Normal file
10
tests/cases/conformance/jsdoc/enumTagOnExports.ts
Normal file
@ -0,0 +1,10 @@
|
||||
// @filename: enumTagOnExports.js
|
||||
// @allowjs: true
|
||||
// @checkjs: true
|
||||
// @noemit: true
|
||||
|
||||
/** @enum {number} */
|
||||
exports.a = {};
|
||||
|
||||
/** @enum {string} */
|
||||
module.exports.b = {};
|
||||
7
tests/cases/conformance/jsdoc/enumTagOnExports2.ts
Normal file
7
tests/cases/conformance/jsdoc/enumTagOnExports2.ts
Normal file
@ -0,0 +1,7 @@
|
||||
// @filename: enumTagOnExports.js
|
||||
// @allowjs: true
|
||||
// @checkjs: true
|
||||
// @noemit: true
|
||||
|
||||
/** @enum {string} */
|
||||
module.exports = {};
|
||||
Loading…
x
Reference in New Issue
Block a user