Skip to content
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

Merged

Conversation

weswigham
Copy link
Member

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

@typescript-bot typescript-bot added Author: Team For Milestone Bug PRs that fix a bug with a specific milestone labels Apr 12, 2024
>a : A
> : ^
>copy : (other: import(} fro).Foo) => void
Copy link
Member Author

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. 🤷‍♂️

Copy link
Member

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>;
Copy link
Member Author

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;
Copy link
Member Author

@weswigham weswigham Apr 12, 2024

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).

@MichaelMitchell-at
Copy link

I can confirm that this fixes the issue in our codebase

@weswigham weswigham merged commit 6092c2d into microsoft:main Apr 12, 2024
25 checks passed
@weswigham weswigham deleted the fix-cross-file-import-preservation branch April 12, 2024 17:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Author: Team For Milestone Bug PRs that fix a bug with a specific milestone
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[nightly][regression] Some emitted imports are syntactically invalid
4 participants