fix(42380): include JSDoc comments in declarations for static/prototype methods (#42454)

This commit is contained in:
Oleksandr T
2021-03-09 21:37:40 +02:00
committed by GitHub
parent d9f5a85d5b
commit 9610c16cc8
5 changed files with 519 additions and 3 deletions

View File

@@ -6816,8 +6816,7 @@ namespace ts {
for (const sig of signatures) {
// Each overload becomes a separate function declaration, in order
const decl = signatureToSignatureDeclarationHelper(sig, SyntaxKind.FunctionDeclaration, context, { name: factory.createIdentifier(localName), privateSymbolVisitor: includePrivateSymbol, bundledImports: bundled }) as FunctionDeclaration;
// for expressions assigned to `var`s, use the `var` as the text range
addResult(setTextRange(decl, sig.declaration && isVariableDeclaration(sig.declaration.parent) && sig.declaration.parent.parent || sig.declaration), modifierFlags);
addResult(setTextRange(decl, getSignatureTextRangeLocation(sig)), modifierFlags);
}
// Module symbol emit will take care of module-y members, provided it has exports
if (!(symbol.flags & (SymbolFlags.ValueModule | SymbolFlags.NamespaceModule) && !!symbol.exports && !!symbol.exports.size)) {
@@ -6826,6 +6825,19 @@ namespace ts {
}
}
function getSignatureTextRangeLocation(signature: Signature) {
if (signature.declaration && signature.declaration.parent) {
if (isBinaryExpression(signature.declaration.parent) && getAssignmentDeclarationKind(signature.declaration.parent) === AssignmentDeclarationKind.Property) {
return signature.declaration.parent;
}
// for expressions assigned to `var`s, use the `var` as the text range
if (isVariableDeclaration(signature.declaration.parent) && signature.declaration.parent.parent) {
return signature.declaration.parent.parent;
}
}
return signature.declaration;
}
function serializeAsNamespaceDeclaration(props: readonly Symbol[], localName: string, modifierFlags: ModifierFlags, suppressNewPrivateContext: boolean) {
if (length(props)) {
const localVsRemoteMap = arrayToMultiMap(props, p =>
@@ -7422,7 +7434,8 @@ namespace ts {
modifiers: flag ? factory.createModifiersFromModifierFlags(flag) : undefined
}
);
results.push(setTextRange(decl, sig.declaration));
const location = sig.declaration && isPrototypePropertyAssignment(sig.declaration.parent) ? sig.declaration.parent : sig.declaration;
results.push(setTextRange(decl, location));
}
return results as unknown as T[];
}