Fix #102: More accurate error message for module in type reference (#19324)

* Add: Logical OR of "SymbolFlags.ValueModule" into the "meaning" argument of the
"resolveName" call, in the "checkAndReportErrorForUsingNamespaceModuleAsValue"
function, when checking if a namespace is being used as a type.

* Fix: test "privacyImportParseErrors" error messages.

* Fix: test "typeofInternalModules" error message.

* Fix: test "moduleWithValuesAsType" error message.

* Fix: test "moduleAssignmentCompat2" error messages.

* Fix: test "moduleVisibilityTest3" error message.

* Fix: test "getAccessorWithImpliedReturnTypeAndFunctionClassMerge" error messages.

* Fix: test "staticInstanceResolution5" error messages.

* Fix: test "noCrashOnImportShadowing" error message.

* Fix: test "moduleAssignmentCompat3" error messages.

* Fix: test "primaryExpressionMods" error message.

* Fix: test "moduleInTypePosition1" error message.

* Fix: test "moduleAssignmentCompat1" error messages.

* Fix: test "moduleAssignmentCompat4" error messages.

* Fix: test "moduleCrashBug1" error message.
This commit is contained in:
Matt 2017-10-31 06:38:18 +11:00 committed by Mohamed Hegazy
parent 91c37f72d3
commit 6de69df9c1
15 changed files with 49 additions and 49 deletions

View file

@ -1368,7 +1368,7 @@ namespace ts {
}
}
else if (meaning & (SymbolFlags.Type & ~SymbolFlags.NamespaceModule & ~SymbolFlags.Value)) {
const symbol = resolveSymbol(resolveName(errorLocation, name, SymbolFlags.NamespaceModule & ~SymbolFlags.Type, /*nameNotFoundMessage*/undefined, /*nameArg*/ undefined, /*isUse*/ false));
const symbol = resolveSymbol(resolveName(errorLocation, name, (SymbolFlags.ValueModule | SymbolFlags.NamespaceModule) & ~SymbolFlags.Type, /*nameNotFoundMessage*/undefined, /*nameArg*/ undefined, /*isUse*/ false));
if (symbol) {
error(errorLocation, Diagnostics.Cannot_use_namespace_0_as_a_type, unescapeLeadingUnderscores(name));
return true;

View file

@ -1,7 +1,7 @@
tests/cases/compiler/getAccessorWithImpliedReturnTypeAndFunctionClassMerge.ts(1,18): error TS2300: Duplicate identifier '_'.
tests/cases/compiler/getAccessorWithImpliedReturnTypeAndFunctionClassMerge.ts(1,41): error TS2304: Cannot find name '_'.
tests/cases/compiler/getAccessorWithImpliedReturnTypeAndFunctionClassMerge.ts(1,41): error TS2709: Cannot use namespace '_' as a type.
tests/cases/compiler/getAccessorWithImpliedReturnTypeAndFunctionClassMerge.ts(2,18): error TS2300: Duplicate identifier '_'.
tests/cases/compiler/getAccessorWithImpliedReturnTypeAndFunctionClassMerge.ts(2,34): error TS2304: Cannot find name '_'.
tests/cases/compiler/getAccessorWithImpliedReturnTypeAndFunctionClassMerge.ts(2,34): error TS2709: Cannot use namespace '_' as a type.
tests/cases/compiler/getAccessorWithImpliedReturnTypeAndFunctionClassMerge.ts(4,16): error TS2300: Duplicate identifier '_'.
tests/cases/compiler/getAccessorWithImpliedReturnTypeAndFunctionClassMerge.ts(15,15): error TS2300: Duplicate identifier '_'.
tests/cases/compiler/getAccessorWithImpliedReturnTypeAndFunctionClassMerge.ts(21,20): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher.
@ -12,12 +12,12 @@ tests/cases/compiler/getAccessorWithImpliedReturnTypeAndFunctionClassMerge.ts(21
~
!!! error TS2300: Duplicate identifier '_'.
~
!!! error TS2304: Cannot find name '_'.
!!! error TS2709: Cannot use namespace '_' as a type.
declare function _<T>(value: T): _<T>;
~
!!! error TS2300: Duplicate identifier '_'.
~
!!! error TS2304: Cannot find name '_'.
!!! error TS2709: Cannot use namespace '_' as a type.
declare module _ {
~

View file

@ -1,5 +1,5 @@
tests/cases/compiler/moduleAssignmentCompat1.ts(9,8): error TS2304: Cannot find name 'A'.
tests/cases/compiler/moduleAssignmentCompat1.ts(10,8): error TS2304: Cannot find name 'B'.
tests/cases/compiler/moduleAssignmentCompat1.ts(9,8): error TS2709: Cannot use namespace 'A' as a type.
tests/cases/compiler/moduleAssignmentCompat1.ts(10,8): error TS2709: Cannot use namespace 'B' as a type.
==== tests/cases/compiler/moduleAssignmentCompat1.ts (2 errors) ====
@ -13,10 +13,10 @@ tests/cases/compiler/moduleAssignmentCompat1.ts(10,8): error TS2304: Cannot find
var a: A;
~
!!! error TS2304: Cannot find name 'A'.
!!! error TS2709: Cannot use namespace 'A' as a type.
var b: B;
~
!!! error TS2304: Cannot find name 'B'.
!!! error TS2709: Cannot use namespace 'B' as a type.
// no error
a = b;

View file

@ -1,5 +1,5 @@
tests/cases/compiler/moduleAssignmentCompat2.ts(9,8): error TS2304: Cannot find name 'A'.
tests/cases/compiler/moduleAssignmentCompat2.ts(10,8): error TS2304: Cannot find name 'B'.
tests/cases/compiler/moduleAssignmentCompat2.ts(9,8): error TS2709: Cannot use namespace 'A' as a type.
tests/cases/compiler/moduleAssignmentCompat2.ts(10,8): error TS2709: Cannot use namespace 'B' as a type.
==== tests/cases/compiler/moduleAssignmentCompat2.ts (2 errors) ====
@ -13,10 +13,10 @@ tests/cases/compiler/moduleAssignmentCompat2.ts(10,8): error TS2304: Cannot find
var a: A;
~
!!! error TS2304: Cannot find name 'A'.
!!! error TS2709: Cannot use namespace 'A' as a type.
var b: B;
~
!!! error TS2304: Cannot find name 'B'.
!!! error TS2709: Cannot use namespace 'B' as a type.
a = b;
b = a; // error

View file

@ -1,5 +1,5 @@
tests/cases/compiler/moduleAssignmentCompat3.ts(8,8): error TS2304: Cannot find name 'A'.
tests/cases/compiler/moduleAssignmentCompat3.ts(9,8): error TS2304: Cannot find name 'B'.
tests/cases/compiler/moduleAssignmentCompat3.ts(8,8): error TS2709: Cannot use namespace 'A' as a type.
tests/cases/compiler/moduleAssignmentCompat3.ts(9,8): error TS2709: Cannot use namespace 'B' as a type.
==== tests/cases/compiler/moduleAssignmentCompat3.ts (2 errors) ====
@ -12,10 +12,10 @@ tests/cases/compiler/moduleAssignmentCompat3.ts(9,8): error TS2304: Cannot find
var a: A;
~
!!! error TS2304: Cannot find name 'A'.
!!! error TS2709: Cannot use namespace 'A' as a type.
var b: B;
~
!!! error TS2304: Cannot find name 'B'.
!!! error TS2709: Cannot use namespace 'B' as a type.
// both errors
a = b;

View file

@ -1,5 +1,5 @@
tests/cases/compiler/moduleAssignmentCompat4.ts(12,8): error TS2304: Cannot find name 'A'.
tests/cases/compiler/moduleAssignmentCompat4.ts(13,8): error TS2304: Cannot find name 'B'.
tests/cases/compiler/moduleAssignmentCompat4.ts(12,8): error TS2709: Cannot use namespace 'A' as a type.
tests/cases/compiler/moduleAssignmentCompat4.ts(13,8): error TS2709: Cannot use namespace 'B' as a type.
==== tests/cases/compiler/moduleAssignmentCompat4.ts (2 errors) ====
@ -16,10 +16,10 @@ tests/cases/compiler/moduleAssignmentCompat4.ts(13,8): error TS2304: Cannot find
var a: A;
~
!!! error TS2304: Cannot find name 'A'.
!!! error TS2709: Cannot use namespace 'A' as a type.
var b: B;
~
!!! error TS2304: Cannot find name 'B'.
!!! error TS2709: Cannot use namespace 'B' as a type.
a = b;
b = a; // error

View file

@ -1,4 +1,4 @@
tests/cases/compiler/moduleCrashBug1.ts(18,9): error TS2304: Cannot find name '_modes'.
tests/cases/compiler/moduleCrashBug1.ts(18,9): error TS2709: Cannot use namespace '_modes' as a type.
==== tests/cases/compiler/moduleCrashBug1.ts (1 errors) ====
@ -21,7 +21,7 @@ tests/cases/compiler/moduleCrashBug1.ts(18,9): error TS2304: Cannot find name '_
var m : _modes;
~~~~~~
!!! error TS2304: Cannot find name '_modes'.
!!! error TS2709: Cannot use namespace '_modes' as a type.

View file

@ -1,4 +1,4 @@
tests/cases/compiler/moduleInTypePosition1_1.ts(3,14): error TS2304: Cannot find name 'WinJS'.
tests/cases/compiler/moduleInTypePosition1_1.ts(3,14): error TS2709: Cannot use namespace 'WinJS' as a type.
==== tests/cases/compiler/moduleInTypePosition1_1.ts (1 errors) ====
@ -6,7 +6,7 @@ tests/cases/compiler/moduleInTypePosition1_1.ts(3,14): error TS2304: Cannot find
import WinJS = require('./moduleInTypePosition1_0');
var x = (w1: WinJS) => { };
~~~~~
!!! error TS2304: Cannot find name 'WinJS'.
!!! error TS2709: Cannot use namespace 'WinJS' as a type.
==== tests/cases/compiler/moduleInTypePosition1_0.ts (0 errors) ====
export class Promise {

View file

@ -1,4 +1,4 @@
tests/cases/compiler/moduleVisibilityTest3.ts(20,22): error TS2304: Cannot find name 'modes'.
tests/cases/compiler/moduleVisibilityTest3.ts(20,22): error TS2709: Cannot use namespace 'modes' as a type.
tests/cases/compiler/moduleVisibilityTest3.ts(20,39): error TS2694: Namespace '_modes' has no exported member 'Mode'.
tests/cases/compiler/moduleVisibilityTest3.ts(21,22): error TS2694: Namespace '_modes' has no exported member 'Mode'.
@ -25,7 +25,7 @@ tests/cases/compiler/moduleVisibilityTest3.ts(21,22): error TS2694: Namespace '_
class Bug {
constructor(p1: modes, p2: modes.Mode) {// should be an error on p2 - it's not exported
~~~~~
!!! error TS2304: Cannot find name 'modes'.
!!! error TS2709: Cannot use namespace 'modes' as a type.
~~~~
!!! error TS2694: Namespace '_modes' has no exported member 'Mode'.
var x:modes.Mode;

View file

@ -1,4 +1,4 @@
tests/cases/compiler/moduleWithValuesAsType.ts(5,8): error TS2304: Cannot find name 'A'.
tests/cases/compiler/moduleWithValuesAsType.ts(5,8): error TS2709: Cannot use namespace 'A' as a type.
==== tests/cases/compiler/moduleWithValuesAsType.ts (1 errors) ====
@ -8,4 +8,4 @@ tests/cases/compiler/moduleWithValuesAsType.ts(5,8): error TS2304: Cannot find n
var a: A; // no error
~
!!! error TS2304: Cannot find name 'A'.
!!! error TS2709: Cannot use namespace 'A' as a type.

View file

@ -1,5 +1,5 @@
tests/cases/compiler/index.ts(4,1): error TS2693: 'B' only refers to a type, but is being used as a value here.
tests/cases/compiler/index.ts(9,10): error TS2304: Cannot find name 'OriginalB'.
tests/cases/compiler/index.ts(9,10): error TS2709: Cannot use namespace 'OriginalB' as a type.
==== tests/cases/compiler/b.ts (0 errors) ====
@ -30,4 +30,4 @@ tests/cases/compiler/index.ts(9,10): error TS2304: Cannot find name 'OriginalB'.
const y: OriginalB = x;
~~~~~~~~~
!!! error TS2304: Cannot find name 'OriginalB'.
!!! error TS2709: Cannot use namespace 'OriginalB' as a type.

View file

@ -1,4 +1,4 @@
tests/cases/compiler/primaryExpressionMods.ts(7,8): error TS2304: Cannot find name 'M'.
tests/cases/compiler/primaryExpressionMods.ts(7,8): error TS2709: Cannot use namespace 'M' as a type.
tests/cases/compiler/primaryExpressionMods.ts(11,8): error TS2503: Cannot find namespace 'm'.
@ -11,7 +11,7 @@ tests/cases/compiler/primaryExpressionMods.ts(11,8): error TS2503: Cannot find n
var p: M.P; // Used as ModuleName
var m: M = M; // Used as TypeName and PrimaryExpression (error on TypeName)
~
!!! error TS2304: Cannot find name 'M'.
!!! error TS2709: Cannot use namespace 'M' as a type.
var m2: typeof M = M; // Used as PrimaryExpression in TypeQuery
var x1 = M.a; // Used as PrimaryExpression
var x2 = m.a; // Same as M.a

View file

@ -26,14 +26,14 @@ tests/cases/compiler/privacyImportParseErrors.ts(251,40): error TS2307: Cannot f
tests/cases/compiler/privacyImportParseErrors.ts(252,40): error TS2307: Cannot find module 'glo_M4_private'.
tests/cases/compiler/privacyImportParseErrors.ts(255,1): error TS2668: 'export' modifier cannot be applied to ambient modules and module augmentations since they are always visible.
tests/cases/compiler/privacyImportParseErrors.ts(255,23): error TS2664: Invalid module name in augmentation, module 'use_glo_M1_public' cannot be found.
tests/cases/compiler/privacyImportParseErrors.ts(258,45): error TS2304: Cannot find name 'use_glo_M1_public'.
tests/cases/compiler/privacyImportParseErrors.ts(261,39): error TS2304: Cannot find name 'use_glo_M1_public'.
tests/cases/compiler/privacyImportParseErrors.ts(258,45): error TS2709: Cannot use namespace 'use_glo_M1_public' as a type.
tests/cases/compiler/privacyImportParseErrors.ts(261,39): error TS2709: Cannot use namespace 'use_glo_M1_public' as a type.
tests/cases/compiler/privacyImportParseErrors.ts(264,40): error TS2307: Cannot find module 'glo_M2_public'.
tests/cases/compiler/privacyImportParseErrors.ts(273,38): error TS1147: Import declarations in a namespace cannot reference a module.
tests/cases/compiler/privacyImportParseErrors.ts(277,45): error TS1147: Import declarations in a namespace cannot reference a module.
tests/cases/compiler/privacyImportParseErrors.ts(284,16): error TS2664: Invalid module name in augmentation, module 'use_glo_M3_private' cannot be found.
tests/cases/compiler/privacyImportParseErrors.ts(287,46): error TS2304: Cannot find name 'use_glo_M3_private'.
tests/cases/compiler/privacyImportParseErrors.ts(290,40): error TS2304: Cannot find name 'use_glo_M3_private'.
tests/cases/compiler/privacyImportParseErrors.ts(287,46): error TS2709: Cannot use namespace 'use_glo_M3_private' as a type.
tests/cases/compiler/privacyImportParseErrors.ts(290,40): error TS2709: Cannot use namespace 'use_glo_M3_private' as a type.
tests/cases/compiler/privacyImportParseErrors.ts(293,41): error TS2307: Cannot find module 'glo_M4_private'.
tests/cases/compiler/privacyImportParseErrors.ts(302,38): error TS1147: Import declarations in a namespace cannot reference a module.
tests/cases/compiler/privacyImportParseErrors.ts(306,45): error TS1147: Import declarations in a namespace cannot reference a module.
@ -371,12 +371,12 @@ tests/cases/compiler/privacyImportParseErrors.ts(353,29): error TS1147: Import d
export var use_glo_M1_public_v1_public: { new (): use_glo_M1_public.c1; };
export var use_glo_M1_public_v2_public: use_glo_M1_public;
~~~~~~~~~~~~~~~~~
!!! error TS2304: Cannot find name 'use_glo_M1_public'.
!!! error TS2709: Cannot use namespace 'use_glo_M1_public' as a type.
export var use_glo_M1_public_v3_public: () => use_glo_M1_public.c1;
var use_glo_M1_public_v1_private: { new (): use_glo_M1_public.c1; };
var use_glo_M1_public_v2_private: use_glo_M1_public;
~~~~~~~~~~~~~~~~~
!!! error TS2304: Cannot find name 'use_glo_M1_public'.
!!! error TS2709: Cannot use namespace 'use_glo_M1_public' as a type.
var use_glo_M1_public_v3_private: () => use_glo_M1_public.c1;
import use_glo_M2_public = require("glo_M2_public");
@ -412,12 +412,12 @@ tests/cases/compiler/privacyImportParseErrors.ts(353,29): error TS1147: Import d
export var use_glo_M3_private_v1_public: { new (): use_glo_M3_private.c1; };
export var use_glo_M3_private_v2_public: use_glo_M3_private;
~~~~~~~~~~~~~~~~~~
!!! error TS2304: Cannot find name 'use_glo_M3_private'.
!!! error TS2709: Cannot use namespace 'use_glo_M3_private' as a type.
export var use_glo_M3_private_v3_public: () => use_glo_M3_private.c1;
var use_glo_M3_private_v1_private: { new (): use_glo_M3_private.c1; };
var use_glo_M3_private_v2_private: use_glo_M3_private;
~~~~~~~~~~~~~~~~~~
!!! error TS2304: Cannot find name 'use_glo_M3_private'.
!!! error TS2709: Cannot use namespace 'use_glo_M3_private' as a type.
var use_glo_M3_private_v3_private: () => use_glo_M3_private.c1;
import use_glo_M4_private = require("glo_M4_private");

View file

@ -1,6 +1,6 @@
tests/cases/compiler/staticInstanceResolution5_1.ts(4,14): error TS2304: Cannot find name 'WinJS'.
tests/cases/compiler/staticInstanceResolution5_1.ts(5,23): error TS2304: Cannot find name 'WinJS'.
tests/cases/compiler/staticInstanceResolution5_1.ts(6,16): error TS2304: Cannot find name 'WinJS'.
tests/cases/compiler/staticInstanceResolution5_1.ts(4,14): error TS2709: Cannot use namespace 'WinJS' as a type.
tests/cases/compiler/staticInstanceResolution5_1.ts(5,23): error TS2709: Cannot use namespace 'WinJS' as a type.
tests/cases/compiler/staticInstanceResolution5_1.ts(6,16): error TS2709: Cannot use namespace 'WinJS' as a type.
==== tests/cases/compiler/staticInstanceResolution5_1.ts (3 errors) ====
@ -9,13 +9,13 @@ tests/cases/compiler/staticInstanceResolution5_1.ts(6,16): error TS2304: Cannot
// these 3 should be errors
var x = (w1: WinJS) => { };
~~~~~
!!! error TS2304: Cannot find name 'WinJS'.
!!! error TS2709: Cannot use namespace 'WinJS' as a type.
var y = function (w2: WinJS) { }
~~~~~
!!! error TS2304: Cannot find name 'WinJS'.
!!! error TS2709: Cannot use namespace 'WinJS' as a type.
function z(w3: WinJS) { }
~~~~~
!!! error TS2304: Cannot find name 'WinJS'.
!!! error TS2709: Cannot use namespace 'WinJS' as a type.
==== tests/cases/compiler/staticInstanceResolution5_0.ts (0 errors) ====
export class Promise {

View file

@ -1,5 +1,5 @@
tests/cases/compiler/typeofInternalModules.ts(15,16): error TS2708: Cannot use namespace 'importUninst' as a value.
tests/cases/compiler/typeofInternalModules.ts(17,9): error TS2304: Cannot find name 'Outer'.
tests/cases/compiler/typeofInternalModules.ts(17,9): error TS2709: Cannot use namespace 'Outer' as a type.
tests/cases/compiler/typeofInternalModules.ts(19,1): error TS2322: Type 'typeof Outer' is not assignable to type 'typeof instantiated'.
Property 'C' is missing in type 'typeof Outer'.
tests/cases/compiler/typeofInternalModules.ts(21,16): error TS2708: Cannot use namespace 'importUninst' as a value.
@ -28,7 +28,7 @@ tests/cases/compiler/typeofInternalModules.ts(23,1): error TS2322: Type 'typeof
var x4: Outer = Outer;
~~~~~
!!! error TS2304: Cannot find name 'Outer'.
!!! error TS2709: Cannot use namespace 'Outer' as a type.
var x5: typeof importInst;
x5 = Outer;
~~