From d863aef57e6a03cf20367d4c13e3d549e96ca119 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Mon, 24 Apr 2017 10:43:58 -0700 Subject: [PATCH 1/4] Improve message for untyped module w/noImplicitAny Now there is an elaboration that suggests npm install @types/foo or adding `declare module 'foo'` in a separate file. --- src/compiler/checker.ts | 6 +++++- src/compiler/diagnosticMessages.json | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index d43bd907c46..ab3a09abe24 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -1641,10 +1641,14 @@ namespace ts { error(errorNode, diag, moduleReference, resolvedModule.resolvedFileName); } else if (noImplicitAny && moduleNotFoundError) { - error(errorNode, + let errorInfo = chainDiagnosticMessages(undefined, + Diagnostics.Try_npm_install_types_Slash_0_if_it_exists_or_adding_declare_module_0_in_a_separate_file, + moduleReference); + errorInfo = chainDiagnosticMessages(errorInfo, Diagnostics.Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type, moduleReference, resolvedModule.resolvedFileName); + diagnostics.add(createDiagnosticForNodeFromMessageChain(errorNode, errorInfo)); } // Failed imports and untyped modules are both treated in an untyped manner; only difference is whether we give a diagnostic first. return undefined; diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 93e1edcb31d..447e403469f 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -3310,6 +3310,10 @@ "category": "Error", "code": 7034 }, + "Try `npm install @types/{0}` if it exists or adding `declare module '{0}'` in a separate file.": { + "category": "Error", + "code": 7035 + }, "You cannot rename this element.": { "category": "Error", "code": 8000 From a44b97268257801254fe1cdc861fbc5b9eb6115b Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Mon, 24 Apr 2017 10:45:03 -0700 Subject: [PATCH 2/4] Update baselines --- .../reference/untypedModuleImport_noImplicitAny.errors.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/baselines/reference/untypedModuleImport_noImplicitAny.errors.txt b/tests/baselines/reference/untypedModuleImport_noImplicitAny.errors.txt index 349a944deeb..cd9d1f0b031 100644 --- a/tests/baselines/reference/untypedModuleImport_noImplicitAny.errors.txt +++ b/tests/baselines/reference/untypedModuleImport_noImplicitAny.errors.txt @@ -1,10 +1,12 @@ /a.ts(1,22): error TS7016: Could not find a declaration file for module 'foo'. '/node_modules/foo/index.js' implicitly has an 'any' type. + Try `npm install @types/foo` if it exists or adding `declare module 'foo'` in a separate file. ==== /a.ts (1 errors) ==== import * as foo from "foo"; ~~~~~ !!! error TS7016: Could not find a declaration file for module 'foo'. '/node_modules/foo/index.js' implicitly has an 'any' type. +!!! error TS7016: Try `npm install @types/foo` if it exists or adding `declare module 'foo'` in a separate file. ==== /node_modules/foo/index.js (0 errors) ==== // This tests that `--noImplicitAny` disables untyped modules. From 65dae3b0b831bdddddeb1d779175101c29072d5e Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Mon, 24 Apr 2017 11:40:45 -0700 Subject: [PATCH 3/4] Fix lint --- src/compiler/checker.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index ab3a09abe24..2f1b63471b5 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -1641,7 +1641,7 @@ namespace ts { error(errorNode, diag, moduleReference, resolvedModule.resolvedFileName); } else if (noImplicitAny && moduleNotFoundError) { - let errorInfo = chainDiagnosticMessages(undefined, + let errorInfo = chainDiagnosticMessages(/*details*/ undefined, Diagnostics.Try_npm_install_types_Slash_0_if_it_exists_or_adding_declare_module_0_in_a_separate_file, moduleReference); errorInfo = chainDiagnosticMessages(errorInfo, From 3b8cafe40e79d5d63fc8d84e3804e7b166b01d5d Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Mon, 24 Apr 2017 15:19:30 -0700 Subject: [PATCH 4/4] Reword message:more detail about declaration files --- src/compiler/checker.ts | 2 +- src/compiler/diagnosticMessages.json | 2 +- .../reference/untypedModuleImport_noImplicitAny.errors.txt | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 2f1b63471b5..1c5f36f73c5 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -1642,7 +1642,7 @@ namespace ts { } else if (noImplicitAny && moduleNotFoundError) { let errorInfo = chainDiagnosticMessages(/*details*/ undefined, - Diagnostics.Try_npm_install_types_Slash_0_if_it_exists_or_adding_declare_module_0_in_a_separate_file, + Diagnostics.Try_npm_install_types_Slash_0_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare_module_0, moduleReference); errorInfo = chainDiagnosticMessages(errorInfo, Diagnostics.Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type, diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 447e403469f..b69adf708f2 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -3310,7 +3310,7 @@ "category": "Error", "code": 7034 }, - "Try `npm install @types/{0}` if it exists or adding `declare module '{0}'` in a separate file.": { + "Try `npm install @types/{0}` if it exists or add a new declaration (.d.ts) file containing `declare module '{0}';`": { "category": "Error", "code": 7035 }, diff --git a/tests/baselines/reference/untypedModuleImport_noImplicitAny.errors.txt b/tests/baselines/reference/untypedModuleImport_noImplicitAny.errors.txt index cd9d1f0b031..0f451941bd7 100644 --- a/tests/baselines/reference/untypedModuleImport_noImplicitAny.errors.txt +++ b/tests/baselines/reference/untypedModuleImport_noImplicitAny.errors.txt @@ -1,12 +1,12 @@ /a.ts(1,22): error TS7016: Could not find a declaration file for module 'foo'. '/node_modules/foo/index.js' implicitly has an 'any' type. - Try `npm install @types/foo` if it exists or adding `declare module 'foo'` in a separate file. + Try `npm install @types/foo` if it exists or add a new declaration (.d.ts) file containing `declare module 'foo';` ==== /a.ts (1 errors) ==== import * as foo from "foo"; ~~~~~ !!! error TS7016: Could not find a declaration file for module 'foo'. '/node_modules/foo/index.js' implicitly has an 'any' type. -!!! error TS7016: Try `npm install @types/foo` if it exists or adding `declare module 'foo'` in a separate file. +!!! error TS7016: Try `npm install @types/foo` if it exists or add a new declaration (.d.ts) file containing `declare module 'foo';` ==== /node_modules/foo/index.js (0 errors) ==== // This tests that `--noImplicitAny` disables untyped modules.