-
Notifications
You must be signed in to change notification settings - Fork 12.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Reuse input nodes where possible when serializing jsdoc implements clauses #41783
Reuse input nodes where possible when serializing jsdoc implements clauses #41783
Conversation
6e9b462
to
d5280d0
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
One question about what trackExistingEntityName can do
return cleanup(/*result*/ undefined); | ||
} | ||
} | ||
return cleanup(factory.createExpressionWithTypeArguments(expr, map(e.typeArguments, a => serializeExistingTypeNode(context, a, includePrivateSymbol, bundled) || typeToTypeNodeHelper(getTypeFromTypeNode(a), context)))); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not sure this is the best way to break up this line, but it's what I ended up doing so I could read it.
return cleanup(factory.createExpressionWithTypeArguments(expr, map(e.typeArguments, a => serializeExistingTypeNode(context, a, includePrivateSymbol, bundled) || typeToTypeNodeHelper(getTypeFromTypeNode(a), context)))); | |
return cleanup(factory.createExpressionWithTypeArguments(expr, | |
map(e.typeArguments, a => | |
serializeExistingTypeNode(context, a, includePrivateSymbol, bundled) | |
|| typeToTypeNodeHelper(getTypeFromTypeNode(a), context)))); |
return cleanup(factory.createExpressionWithTypeArguments(expr, map(e.typeArguments, a => serializeExistingTypeNode(context, a, includePrivateSymbol, bundled) || typeToTypeNodeHelper(getTypeFromTypeNode(a), context)))); | ||
|
||
function cleanup<T>(result: T): T { | ||
context.enclosingDeclaration = oldEnclosing; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
wtb dynamic scope macro
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I mean... try
...finally
is that, but has bad perf implications last I checked.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
that gives you the control flow, but not the scoping behaviour for variables. I'm talking something like special
in Common Lisp, which would allow the assignment to context.enclosingDeclaration
on line 6733 to be popped off the stack at the end of the scope instead of requiring the oldEnclosing=context.enclosing
/context.enclosing=oldEnclosing
bracketing to be manually written.
const localParams = getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol); | ||
const typeParamDecls = map(localParams, p => typeParameterToDeclaration(p, context)); | ||
const classType = getDeclaredTypeOfClassOrInterface(symbol); | ||
const baseTypes = getBaseTypes(classType); | ||
const implementsExpressions = mapDefined(getImplementsTypes(classType), serializeImplementedType); | ||
const originalImplements = originalDecl && getEffectiveImplementsTypeNodes(originalDecl); | ||
const implementsExpressions = originalImplements && sanitizeJSDocImplements(originalImplements) || mapDefined(getImplementsTypes(classType), serializeImplementedType); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
might be nice to break this line too
Fixes #41258