From d5c6afaae062242e2a29d1287798f56dcd83dc2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dawid=20Ma=C5=82ecki?= Date: Tue, 6 May 2025 06:01:19 -0700 Subject: [PATCH] Fix suggesting components from types_generated directory (#51101) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/51101 TS LSP suggests importing/using components from `types_generated` directory which are exported under slightly different name than root exports. Prefixing default exports with `$$` fixes the issue. Changelog: [Internal] Reviewed By: huntie Differential Revision: D74177107 fbshipit-source-id: 86a6869c2aa7a113915184e4857a7882710b1db4 --- .../transforms/__tests__/replaceDefaultExportName-test.js | 6 +++--- scripts/build-types/transforms/replaceDefaultExportName.js | 5 ++++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/scripts/build-types/transforms/__tests__/replaceDefaultExportName-test.js b/scripts/build-types/transforms/__tests__/replaceDefaultExportName-test.js index f377ea86275..64c849db70b 100644 --- a/scripts/build-types/transforms/__tests__/replaceDefaultExportName-test.js +++ b/scripts/build-types/transforms/__tests__/replaceDefaultExportName-test.js @@ -35,9 +35,9 @@ describe('replaceDefaultExportName', () => { const code = `export default Foo;`; const result = await translate(code, 'mock/path/to/module/Foo.js'); expect(result).toMatchInlineSnapshot(` - "declare const Foo_DEFAULT: typeof Foo; - declare type Foo_DEFAULT = typeof Foo_DEFAULT; - export default Foo_DEFAULT;" + "declare const $$Foo: typeof Foo; + declare type $$Foo = typeof $$Foo; + export default $$Foo;" `); }); }); diff --git a/scripts/build-types/transforms/replaceDefaultExportName.js b/scripts/build-types/transforms/replaceDefaultExportName.js index b1c3e4e863e..9bab2e4c9e6 100644 --- a/scripts/build-types/transforms/replaceDefaultExportName.js +++ b/scripts/build-types/transforms/replaceDefaultExportName.js @@ -19,7 +19,10 @@ function createReplaceDefaultExportName(filePath: string): PluginObj { const moduleName = fileName.split('.')[0]; if (node.node.name === '$$EXPORT_DEFAULT_DECLARATION$$') { - node.node.name = `${moduleName}_DEFAULT`; + // Prefixing with $$ prevents the TS LSP server from (incorrectly) + // discovering identifiers outside of package.json "exports" in + // autocomplete. + node.node.name = `$$${moduleName}`; } }, },