-
Notifications
You must be signed in to change notification settings - Fork 12.4k
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
Add missing recursive vistor on copied import
type nodes
#58165
Add missing recursive vistor on copied import
type nodes
#58165
Conversation
>a : A | ||
> : ^ | ||
>copy : (other: import(} fro).Foo) => void |
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 we already had a test demonstrating the issue is... yeah, reviewing big baseline diffs is hard - easy to miss the one test that's still off. And that's why we try and break it down where we can. 🤷♂️
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.
Oops!
@@ -68,4 +68,4 @@ export class Encoder<T> implements IEncoder<T> { | |||
*/ | |||
encode(value: T): Uint8Array; | |||
} | |||
export type IEncoder<T> = import('./interface').Encoder<T>; | |||
export type IEncoder<T> = import("./interface").Encoder<T>; |
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.
Since we're doing the recursive visit on the specifier now, the quote-style-conformity change we just made is now also being applied here~
//// [index.d.ts] | ||
export declare const d: { | ||
e: { | ||
f: (foo: import("../projA").Foo) => boolean; |
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.
If I didn't also swap to getSpecifierForModuleSymbol
as part of this, this emits as "../projA/index"
because, well, getResolvedExternalModuleName
is not the robust specifier generation solution in the checker that calls into moduleSpecifiers.ts
, while getSpecifierForModuleSymbol
is. getResolvedExternalModuleName
was probably sufficient for just handling the unbundled -> bundled specifier case (which is all the declarations.ts
version of rewriteModuleSpecifier
needs to handle and what this was originally based on), but doesn't handle rewriting specifiers copied from other files, which is an additional case the node builder needs to handle (and as of this week, happens waaaaaaay more often). getSpecifierForModuleSymbol
, however, does (and caches the results).
I can confirm that this fixes the issue in our codebase |
And swap to using the cached (and much more robust)
getSpecifierForModuleSymbol
for generating new specifiers while we're at it (so we can more often know to reuse the input node when the specifier matches).Fixes #58159