From 2c7b13b8306899b3846333670e13fb883b0aad41 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Thu, 14 Oct 2021 17:00:55 -0700 Subject: [PATCH] Fix explainFiles on files under nodenext with types references (#46367) * Fix explainFiles on files under nodenext with types references * Fix explainFiles crash on module nodenext --- src/compiler/program.ts | 2 +- ...sNodeNextWithTypesReference.baseline.jsonc | 37 +++++++++++++++ .../explainFilesNodeNextWithTypesReference.ts | 45 +++++++++++++++++++ 3 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 tests/baselines/reference/explainFilesNodeNextWithTypesReference.baseline.jsonc create mode 100644 tests/cases/fourslash/explainFilesNodeNextWithTypesReference.ts diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 045a31d4576..2db75250cce 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -685,7 +685,7 @@ namespace ts { break; case FileIncludeKind.TypeReferenceDirective: ({ pos, end } = file.typeReferenceDirectives[index]); - packageId = file.resolvedTypeReferenceDirectiveNames?.get(toFileNameLowerCase(file.typeReferenceDirectives[index].fileName), getModeForResolutionAtIndex(file, index))?.packageId; + packageId = file.resolvedTypeReferenceDirectiveNames?.get(toFileNameLowerCase(file.typeReferenceDirectives[index].fileName), file.impliedNodeFormat)?.packageId; break; case FileIncludeKind.LibReferenceDirective: ({ pos, end } = file.libReferenceDirectives[index]); diff --git a/tests/baselines/reference/explainFilesNodeNextWithTypesReference.baseline.jsonc b/tests/baselines/reference/explainFilesNodeNextWithTypesReference.baseline.jsonc new file mode 100644 index 00000000000..535e351c335 --- /dev/null +++ b/tests/baselines/reference/explainFilesNodeNextWithTypesReference.baseline.jsonc @@ -0,0 +1,37 @@ +// === /node_modules/react-hook-form/dist/index.d.ts === +// /// +// export type Foo = React.Whatever; +// export function useForm(): any; + +[ + { + "definition": { + "containerKind": "", + "containerName": "", + "fileName": "/node_modules/react-hook-form/dist/index.d.ts", + "kind": "string", + "name": "react", + "textSpan": { + "start": 22, + "length": 5 + }, + "displayParts": [ + { + "text": "\"react\"", + "kind": "stringLiteral" + } + ] + }, + "references": [ + { + "textSpan": { + "start": 22, + "length": 5 + }, + "fileName": "/node_modules/react-hook-form/dist/index.d.ts", + "isWriteAccess": false, + "isDefinition": false + } + ] + } +] \ No newline at end of file diff --git a/tests/cases/fourslash/explainFilesNodeNextWithTypesReference.ts b/tests/cases/fourslash/explainFilesNodeNextWithTypesReference.ts new file mode 100644 index 00000000000..8b22bb50044 --- /dev/null +++ b/tests/cases/fourslash/explainFilesNodeNextWithTypesReference.ts @@ -0,0 +1,45 @@ +/// +// @Filename: /node_modules/react-hook-form/package.json +//// { +//// "name": "react-hook-form", +//// "main": "dist/index.cjs.js", +//// "module": "dist/index.esm.js", +//// "types": "dist/index.d.ts", +//// "exports": { +//// "./package.json": "./package.json", +//// ".": { +//// "import": "./dist/index.esm.js", +//// "require": "./dist/index.cjs.js", +//// "types": "./dist/index.d.ts" +//// } +//// } +//// } + +// @Filename: /node_modules/react-hook-form/dist/index.cjs.js +//// module.exports = {}; + +// @Filename: /node_modules/react-hook-form/dist/index.esm.js +//// export function useForm() {} + +// @Filename: /node_modules/react-hook-form/dist/index.d.ts +//// /// +//// export type Foo = React.Whatever; +//// export function useForm(): any; + +// @Filename: /node_modules/react/index.d.ts +//// declare namespace JSX {} +//// declare namespace React { export interface Whatever {} } + +// @Filename: /tsconfig.json +//// { +//// "compilerOptions": { +//// "module": "nodenext", +//// "explainFiles": true +//// } +//// "files": ["./index.ts"] +//// } + +// @Filename: /index.ts +//// import { useForm } from "react-hook-form"; + +verify.baselineFindAllReferences(""); \ No newline at end of file