Fix jsdoc variadic type nodes not being remapped to equivalent TS in output (#38276)

This commit is contained in:
Wesley Wigham 2020-05-02 01:43:59 -07:00 committed by GitHub
parent b57dd52afa
commit 5b0194b311
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 16 additions and 9 deletions

View file

@ -5567,6 +5567,9 @@ namespace ts {
if (isJSDocNonNullableType(node)) { if (isJSDocNonNullableType(node)) {
return visitNode(node.type, visitExistingNodeTreeSymbols); return visitNode(node.type, visitExistingNodeTreeSymbols);
} }
if (isJSDocVariadicType(node)) {
return createArrayTypeNode(visitNode((node as JSDocVariadicType).type, visitExistingNodeTreeSymbols));
}
if (isTypeReferenceNode(node) && isIdentifier(node.typeName) && node.typeName.escapedText === "") { if (isTypeReferenceNode(node) && isIdentifier(node.typeName) && node.typeName.escapedText === "") {
return setOriginalNode(createKeywordTypeNode(SyntaxKind.AnyKeyword), node); return setOriginalNode(createKeywordTypeNode(SyntaxKind.AnyKeyword), node);
} }
@ -5593,8 +5596,8 @@ namespace ts {
mapDefined(node.parameters, (p, i) => p.name && isIdentifier(p.name) && p.name.escapedText === "new" ? (newTypeNode = p.type, undefined) : createParameter( mapDefined(node.parameters, (p, i) => p.name && isIdentifier(p.name) && p.name.escapedText === "new" ? (newTypeNode = p.type, undefined) : createParameter(
/*decorators*/ undefined, /*decorators*/ undefined,
/*modifiers*/ undefined, /*modifiers*/ undefined,
p.dotDotDotToken, getEffectiveDotDotDotForParameter(p),
p.name || p.dotDotDotToken ? `args` : `arg${i}`, p.name || getEffectiveDotDotDotForParameter(p) ? `args` : `arg${i}`,
p.questionToken, p.questionToken,
visitNode(p.type, visitExistingNodeTreeSymbols), visitNode(p.type, visitExistingNodeTreeSymbols),
/*initializer*/ undefined /*initializer*/ undefined
@ -5608,8 +5611,8 @@ namespace ts {
map(node.parameters, (p, i) => createParameter( map(node.parameters, (p, i) => createParameter(
/*decorators*/ undefined, /*decorators*/ undefined,
/*modifiers*/ undefined, /*modifiers*/ undefined,
p.dotDotDotToken, getEffectiveDotDotDotForParameter(p),
p.name || p.dotDotDotToken ? `args` : `arg${i}`, p.name || getEffectiveDotDotDotForParameter(p) ? `args` : `arg${i}`,
p.questionToken, p.questionToken,
visitNode(p.type, visitExistingNodeTreeSymbols), visitNode(p.type, visitExistingNodeTreeSymbols),
/*initializer*/ undefined /*initializer*/ undefined
@ -5653,6 +5656,10 @@ namespace ts {
return visitEachChild(node, visitExistingNodeTreeSymbols, nullTransformationContext); return visitEachChild(node, visitExistingNodeTreeSymbols, nullTransformationContext);
function getEffectiveDotDotDotForParameter(p: ParameterDeclaration) {
return p.dotDotDotToken || (p.type && isJSDocVariadicType(p.type) ? createToken(SyntaxKind.DotDotDotToken) : undefined);
}
function rewriteModuleSpecifier(parent: ImportTypeNode, lit: StringLiteral) { function rewriteModuleSpecifier(parent: ImportTypeNode, lit: StringLiteral) {
if (bundled) { if (bundled) {
if (context.tracker && context.tracker.moduleResolverHost) { if (context.tracker && context.tracker.moduleResolverHost) {

View file

@ -10,7 +10,7 @@
* @returns {*} Returns the result of `func`. * @returns {*} Returns the result of `func`.
*/ */
function apply(func, thisArg, ...args) { function apply(func, thisArg, ...args) {
>apply : (func: Function, thisArg: any, ...args: ...*) => any >apply : (func: Function, thisArg: any, ...args: any[]) => any
>func : Function >func : Function
>thisArg : any >thisArg : any
>args : any[] >args : any[]

View file

@ -2,7 +2,7 @@
// from bcryptjs // from bcryptjs
/** @param {function(...[*])} callback */ /** @param {function(...[*])} callback */
function g(callback) { function g(callback) {
>g : (callback: (arg0: ...[*]) => ) => void >g : (callback: (...args: [any][]) => ) => void
>callback : (...arg0: [any][]) => any >callback : (...arg0: [any][]) => any
callback([1], [2], [3]) callback([1], [2], [3])

View file

@ -2,7 +2,7 @@
/** @param {...*=} args /** @param {...*=} args
@return {*=} */ @return {*=} */
function f(...args) { function f(...args) {
>f : (...args: ...*=) => any | undefined >f : (...args: (any | undefined)[]) => any | undefined
>args : any[] >args : any[]
return null return null

View file

@ -15,7 +15,7 @@
* @param {...number?[]!} k - (number[] | null)[] * @param {...number?[]!} k - (number[] | null)[]
*/ */
function f(x, y, z, a, b, c, e, f, g, h, i, j, k) { function f(x, y, z, a, b, c, e, f, g, h, i, j, k) {
>f : (x: number[], y: number[], z: (number[]), a: (number | null)[], b: number[] | null, c: (number[]) | null, e: ...?number, f: ...?number, g: ...?!number, h: ...!?number, i: ...number[], j: ...?!number[], k: ...!?number[]) => void >f : (x: number[], y: number[], z: (number[]), a: (number | null)[], b: number[] | null, c: (number[]) | null, e: (number | null)[], f: (number | null)[], g: (number | null)[], h: (number | null)[], i: number[][], j: (number[] | null)[], k: (number | null)[][]) => void
>x : number[] >x : number[]
>y : number[] >y : number[]
>z : number[] >z : number[]

View file

@ -1,7 +1,7 @@
=== /a.js === === /a.js ===
/** @param {...number} a */ /** @param {...number} a */
function f(...a) { function f(...a) {
>f : (...a: ...number) => void >f : (...a: number[]) => void
>a : number[] >a : number[]
a; // number[] a; // number[]