Skip to content

Commit 6de69df

Browse files
begincalendarmhegazy
authored andcommitted
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.
1 parent 91c37f7 commit 6de69df

15 files changed

+49
-49
lines changed

src/compiler/checker.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1368,7 +1368,7 @@ namespace ts {
13681368
}
13691369
}
13701370
else if (meaning & (SymbolFlags.Type & ~SymbolFlags.NamespaceModule & ~SymbolFlags.Value)) {
1371-
const symbol = resolveSymbol(resolveName(errorLocation, name, SymbolFlags.NamespaceModule & ~SymbolFlags.Type, /*nameNotFoundMessage*/undefined, /*nameArg*/ undefined, /*isUse*/ false));
1371+
const symbol = resolveSymbol(resolveName(errorLocation, name, (SymbolFlags.ValueModule | SymbolFlags.NamespaceModule) & ~SymbolFlags.Type, /*nameNotFoundMessage*/undefined, /*nameArg*/ undefined, /*isUse*/ false));
13721372
if (symbol) {
13731373
error(errorLocation, Diagnostics.Cannot_use_namespace_0_as_a_type, unescapeLeadingUnderscores(name));
13741374
return true;

tests/baselines/reference/getAccessorWithImpliedReturnTypeAndFunctionClassMerge.errors.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
tests/cases/compiler/getAccessorWithImpliedReturnTypeAndFunctionClassMerge.ts(1,18): error TS2300: Duplicate identifier '_'.
2-
tests/cases/compiler/getAccessorWithImpliedReturnTypeAndFunctionClassMerge.ts(1,41): error TS2304: Cannot find name '_'.
2+
tests/cases/compiler/getAccessorWithImpliedReturnTypeAndFunctionClassMerge.ts(1,41): error TS2709: Cannot use namespace '_' as a type.
33
tests/cases/compiler/getAccessorWithImpliedReturnTypeAndFunctionClassMerge.ts(2,18): error TS2300: Duplicate identifier '_'.
4-
tests/cases/compiler/getAccessorWithImpliedReturnTypeAndFunctionClassMerge.ts(2,34): error TS2304: Cannot find name '_'.
4+
tests/cases/compiler/getAccessorWithImpliedReturnTypeAndFunctionClassMerge.ts(2,34): error TS2709: Cannot use namespace '_' as a type.
55
tests/cases/compiler/getAccessorWithImpliedReturnTypeAndFunctionClassMerge.ts(4,16): error TS2300: Duplicate identifier '_'.
66
tests/cases/compiler/getAccessorWithImpliedReturnTypeAndFunctionClassMerge.ts(15,15): error TS2300: Duplicate identifier '_'.
77
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
1212
~
1313
!!! error TS2300: Duplicate identifier '_'.
1414
~
15-
!!! error TS2304: Cannot find name '_'.
15+
!!! error TS2709: Cannot use namespace '_' as a type.
1616
declare function _<T>(value: T): _<T>;
1717
~
1818
!!! error TS2300: Duplicate identifier '_'.
1919
~
20-
!!! error TS2304: Cannot find name '_'.
20+
!!! error TS2709: Cannot use namespace '_' as a type.
2121

2222
declare module _ {
2323
~

tests/baselines/reference/moduleAssignmentCompat1.errors.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
tests/cases/compiler/moduleAssignmentCompat1.ts(9,8): error TS2304: Cannot find name 'A'.
2-
tests/cases/compiler/moduleAssignmentCompat1.ts(10,8): error TS2304: Cannot find name 'B'.
1+
tests/cases/compiler/moduleAssignmentCompat1.ts(9,8): error TS2709: Cannot use namespace 'A' as a type.
2+
tests/cases/compiler/moduleAssignmentCompat1.ts(10,8): error TS2709: Cannot use namespace 'B' as a type.
33

44

55
==== tests/cases/compiler/moduleAssignmentCompat1.ts (2 errors) ====
@@ -13,10 +13,10 @@ tests/cases/compiler/moduleAssignmentCompat1.ts(10,8): error TS2304: Cannot find
1313

1414
var a: A;
1515
~
16-
!!! error TS2304: Cannot find name 'A'.
16+
!!! error TS2709: Cannot use namespace 'A' as a type.
1717
var b: B;
1818
~
19-
!!! error TS2304: Cannot find name 'B'.
19+
!!! error TS2709: Cannot use namespace 'B' as a type.
2020

2121
// no error
2222
a = b;

tests/baselines/reference/moduleAssignmentCompat2.errors.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
tests/cases/compiler/moduleAssignmentCompat2.ts(9,8): error TS2304: Cannot find name 'A'.
2-
tests/cases/compiler/moduleAssignmentCompat2.ts(10,8): error TS2304: Cannot find name 'B'.
1+
tests/cases/compiler/moduleAssignmentCompat2.ts(9,8): error TS2709: Cannot use namespace 'A' as a type.
2+
tests/cases/compiler/moduleAssignmentCompat2.ts(10,8): error TS2709: Cannot use namespace 'B' as a type.
33

44

55
==== tests/cases/compiler/moduleAssignmentCompat2.ts (2 errors) ====
@@ -13,10 +13,10 @@ tests/cases/compiler/moduleAssignmentCompat2.ts(10,8): error TS2304: Cannot find
1313

1414
var a: A;
1515
~
16-
!!! error TS2304: Cannot find name 'A'.
16+
!!! error TS2709: Cannot use namespace 'A' as a type.
1717
var b: B;
1818
~
19-
!!! error TS2304: Cannot find name 'B'.
19+
!!! error TS2709: Cannot use namespace 'B' as a type.
2020

2121
a = b;
2222
b = a; // error

tests/baselines/reference/moduleAssignmentCompat3.errors.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
tests/cases/compiler/moduleAssignmentCompat3.ts(8,8): error TS2304: Cannot find name 'A'.
2-
tests/cases/compiler/moduleAssignmentCompat3.ts(9,8): error TS2304: Cannot find name 'B'.
1+
tests/cases/compiler/moduleAssignmentCompat3.ts(8,8): error TS2709: Cannot use namespace 'A' as a type.
2+
tests/cases/compiler/moduleAssignmentCompat3.ts(9,8): error TS2709: Cannot use namespace 'B' as a type.
33

44

55
==== tests/cases/compiler/moduleAssignmentCompat3.ts (2 errors) ====
@@ -12,10 +12,10 @@ tests/cases/compiler/moduleAssignmentCompat3.ts(9,8): error TS2304: Cannot find
1212

1313
var a: A;
1414
~
15-
!!! error TS2304: Cannot find name 'A'.
15+
!!! error TS2709: Cannot use namespace 'A' as a type.
1616
var b: B;
1717
~
18-
!!! error TS2304: Cannot find name 'B'.
18+
!!! error TS2709: Cannot use namespace 'B' as a type.
1919

2020
// both errors
2121
a = b;

tests/baselines/reference/moduleAssignmentCompat4.errors.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
tests/cases/compiler/moduleAssignmentCompat4.ts(12,8): error TS2304: Cannot find name 'A'.
2-
tests/cases/compiler/moduleAssignmentCompat4.ts(13,8): error TS2304: Cannot find name 'B'.
1+
tests/cases/compiler/moduleAssignmentCompat4.ts(12,8): error TS2709: Cannot use namespace 'A' as a type.
2+
tests/cases/compiler/moduleAssignmentCompat4.ts(13,8): error TS2709: Cannot use namespace 'B' as a type.
33

44

55
==== tests/cases/compiler/moduleAssignmentCompat4.ts (2 errors) ====
@@ -16,10 +16,10 @@ tests/cases/compiler/moduleAssignmentCompat4.ts(13,8): error TS2304: Cannot find
1616

1717
var a: A;
1818
~
19-
!!! error TS2304: Cannot find name 'A'.
19+
!!! error TS2709: Cannot use namespace 'A' as a type.
2020
var b: B;
2121
~
22-
!!! error TS2304: Cannot find name 'B'.
22+
!!! error TS2709: Cannot use namespace 'B' as a type.
2323

2424
a = b;
2525
b = a; // error

tests/baselines/reference/moduleCrashBug1.errors.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
tests/cases/compiler/moduleCrashBug1.ts(18,9): error TS2304: Cannot find name '_modes'.
1+
tests/cases/compiler/moduleCrashBug1.ts(18,9): error TS2709: Cannot use namespace '_modes' as a type.
22

33

44
==== tests/cases/compiler/moduleCrashBug1.ts (1 errors) ====
@@ -21,7 +21,7 @@ tests/cases/compiler/moduleCrashBug1.ts(18,9): error TS2304: Cannot find name '_
2121

2222
var m : _modes;
2323
~~~~~~
24-
!!! error TS2304: Cannot find name '_modes'.
24+
!!! error TS2709: Cannot use namespace '_modes' as a type.
2525

2626

2727

tests/baselines/reference/moduleInTypePosition1.errors.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
tests/cases/compiler/moduleInTypePosition1_1.ts(3,14): error TS2304: Cannot find name 'WinJS'.
1+
tests/cases/compiler/moduleInTypePosition1_1.ts(3,14): error TS2709: Cannot use namespace 'WinJS' as a type.
22

33

44
==== tests/cases/compiler/moduleInTypePosition1_1.ts (1 errors) ====
55
///<reference path='moduleInTypePosition1_0.ts'/>
66
import WinJS = require('./moduleInTypePosition1_0');
77
var x = (w1: WinJS) => { };
88
~~~~~
9-
!!! error TS2304: Cannot find name 'WinJS'.
9+
!!! error TS2709: Cannot use namespace 'WinJS' as a type.
1010

1111
==== tests/cases/compiler/moduleInTypePosition1_0.ts (0 errors) ====
1212
export class Promise {

tests/baselines/reference/moduleVisibilityTest3.errors.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
tests/cases/compiler/moduleVisibilityTest3.ts(20,22): error TS2304: Cannot find name 'modes'.
1+
tests/cases/compiler/moduleVisibilityTest3.ts(20,22): error TS2709: Cannot use namespace 'modes' as a type.
22
tests/cases/compiler/moduleVisibilityTest3.ts(20,39): error TS2694: Namespace '_modes' has no exported member 'Mode'.
33
tests/cases/compiler/moduleVisibilityTest3.ts(21,22): error TS2694: Namespace '_modes' has no exported member 'Mode'.
44

@@ -25,7 +25,7 @@ tests/cases/compiler/moduleVisibilityTest3.ts(21,22): error TS2694: Namespace '_
2525
class Bug {
2626
constructor(p1: modes, p2: modes.Mode) {// should be an error on p2 - it's not exported
2727
~~~~~
28-
!!! error TS2304: Cannot find name 'modes'.
28+
!!! error TS2709: Cannot use namespace 'modes' as a type.
2929
~~~~
3030
!!! error TS2694: Namespace '_modes' has no exported member 'Mode'.
3131
var x:modes.Mode;
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
tests/cases/compiler/moduleWithValuesAsType.ts(5,8): error TS2304: Cannot find name 'A'.
1+
tests/cases/compiler/moduleWithValuesAsType.ts(5,8): error TS2709: Cannot use namespace 'A' as a type.
22

33

44
==== tests/cases/compiler/moduleWithValuesAsType.ts (1 errors) ====
@@ -8,4 +8,4 @@ tests/cases/compiler/moduleWithValuesAsType.ts(5,8): error TS2304: Cannot find n
88

99
var a: A; // no error
1010
~
11-
!!! error TS2304: Cannot find name 'A'.
11+
!!! error TS2709: Cannot use namespace 'A' as a type.

tests/baselines/reference/noCrashOnImportShadowing.errors.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
tests/cases/compiler/index.ts(4,1): error TS2693: 'B' only refers to a type, but is being used as a value here.
2-
tests/cases/compiler/index.ts(9,10): error TS2304: Cannot find name 'OriginalB'.
2+
tests/cases/compiler/index.ts(9,10): error TS2709: Cannot use namespace 'OriginalB' as a type.
33

44

55
==== tests/cases/compiler/b.ts (0 errors) ====
@@ -30,4 +30,4 @@ tests/cases/compiler/index.ts(9,10): error TS2304: Cannot find name 'OriginalB'.
3030

3131
const y: OriginalB = x;
3232
~~~~~~~~~
33-
!!! error TS2304: Cannot find name 'OriginalB'.
33+
!!! error TS2709: Cannot use namespace 'OriginalB' as a type.

tests/baselines/reference/primaryExpressionMods.errors.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
tests/cases/compiler/primaryExpressionMods.ts(7,8): error TS2304: Cannot find name 'M'.
1+
tests/cases/compiler/primaryExpressionMods.ts(7,8): error TS2709: Cannot use namespace 'M' as a type.
22
tests/cases/compiler/primaryExpressionMods.ts(11,8): error TS2503: Cannot find namespace 'm'.
33

44

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

tests/baselines/reference/privacyImportParseErrors.errors.txt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,14 @@ tests/cases/compiler/privacyImportParseErrors.ts(251,40): error TS2307: Cannot f
2626
tests/cases/compiler/privacyImportParseErrors.ts(252,40): error TS2307: Cannot find module 'glo_M4_private'.
2727
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.
2828
tests/cases/compiler/privacyImportParseErrors.ts(255,23): error TS2664: Invalid module name in augmentation, module 'use_glo_M1_public' cannot be found.
29-
tests/cases/compiler/privacyImportParseErrors.ts(258,45): error TS2304: Cannot find name 'use_glo_M1_public'.
30-
tests/cases/compiler/privacyImportParseErrors.ts(261,39): error TS2304: Cannot find name 'use_glo_M1_public'.
29+
tests/cases/compiler/privacyImportParseErrors.ts(258,45): error TS2709: Cannot use namespace 'use_glo_M1_public' as a type.
30+
tests/cases/compiler/privacyImportParseErrors.ts(261,39): error TS2709: Cannot use namespace 'use_glo_M1_public' as a type.
3131
tests/cases/compiler/privacyImportParseErrors.ts(264,40): error TS2307: Cannot find module 'glo_M2_public'.
3232
tests/cases/compiler/privacyImportParseErrors.ts(273,38): error TS1147: Import declarations in a namespace cannot reference a module.
3333
tests/cases/compiler/privacyImportParseErrors.ts(277,45): error TS1147: Import declarations in a namespace cannot reference a module.
3434
tests/cases/compiler/privacyImportParseErrors.ts(284,16): error TS2664: Invalid module name in augmentation, module 'use_glo_M3_private' cannot be found.
35-
tests/cases/compiler/privacyImportParseErrors.ts(287,46): error TS2304: Cannot find name 'use_glo_M3_private'.
36-
tests/cases/compiler/privacyImportParseErrors.ts(290,40): error TS2304: Cannot find name 'use_glo_M3_private'.
35+
tests/cases/compiler/privacyImportParseErrors.ts(287,46): error TS2709: Cannot use namespace 'use_glo_M3_private' as a type.
36+
tests/cases/compiler/privacyImportParseErrors.ts(290,40): error TS2709: Cannot use namespace 'use_glo_M3_private' as a type.
3737
tests/cases/compiler/privacyImportParseErrors.ts(293,41): error TS2307: Cannot find module 'glo_M4_private'.
3838
tests/cases/compiler/privacyImportParseErrors.ts(302,38): error TS1147: Import declarations in a namespace cannot reference a module.
3939
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
371371
export var use_glo_M1_public_v1_public: { new (): use_glo_M1_public.c1; };
372372
export var use_glo_M1_public_v2_public: use_glo_M1_public;
373373
~~~~~~~~~~~~~~~~~
374-
!!! error TS2304: Cannot find name 'use_glo_M1_public'.
374+
!!! error TS2709: Cannot use namespace 'use_glo_M1_public' as a type.
375375
export var use_glo_M1_public_v3_public: () => use_glo_M1_public.c1;
376376
var use_glo_M1_public_v1_private: { new (): use_glo_M1_public.c1; };
377377
var use_glo_M1_public_v2_private: use_glo_M1_public;
378378
~~~~~~~~~~~~~~~~~
379-
!!! error TS2304: Cannot find name 'use_glo_M1_public'.
379+
!!! error TS2709: Cannot use namespace 'use_glo_M1_public' as a type.
380380
var use_glo_M1_public_v3_private: () => use_glo_M1_public.c1;
381381

382382
import use_glo_M2_public = require("glo_M2_public");
@@ -412,12 +412,12 @@ tests/cases/compiler/privacyImportParseErrors.ts(353,29): error TS1147: Import d
412412
export var use_glo_M3_private_v1_public: { new (): use_glo_M3_private.c1; };
413413
export var use_glo_M3_private_v2_public: use_glo_M3_private;
414414
~~~~~~~~~~~~~~~~~~
415-
!!! error TS2304: Cannot find name 'use_glo_M3_private'.
415+
!!! error TS2709: Cannot use namespace 'use_glo_M3_private' as a type.
416416
export var use_glo_M3_private_v3_public: () => use_glo_M3_private.c1;
417417
var use_glo_M3_private_v1_private: { new (): use_glo_M3_private.c1; };
418418
var use_glo_M3_private_v2_private: use_glo_M3_private;
419419
~~~~~~~~~~~~~~~~~~
420-
!!! error TS2304: Cannot find name 'use_glo_M3_private'.
420+
!!! error TS2709: Cannot use namespace 'use_glo_M3_private' as a type.
421421
var use_glo_M3_private_v3_private: () => use_glo_M3_private.c1;
422422

423423
import use_glo_M4_private = require("glo_M4_private");

tests/baselines/reference/staticInstanceResolution5.errors.txt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
tests/cases/compiler/staticInstanceResolution5_1.ts(4,14): error TS2304: Cannot find name 'WinJS'.
2-
tests/cases/compiler/staticInstanceResolution5_1.ts(5,23): error TS2304: Cannot find name 'WinJS'.
3-
tests/cases/compiler/staticInstanceResolution5_1.ts(6,16): error TS2304: Cannot find name 'WinJS'.
1+
tests/cases/compiler/staticInstanceResolution5_1.ts(4,14): error TS2709: Cannot use namespace 'WinJS' as a type.
2+
tests/cases/compiler/staticInstanceResolution5_1.ts(5,23): error TS2709: Cannot use namespace 'WinJS' as a type.
3+
tests/cases/compiler/staticInstanceResolution5_1.ts(6,16): error TS2709: Cannot use namespace 'WinJS' as a type.
44

55

66
==== tests/cases/compiler/staticInstanceResolution5_1.ts (3 errors) ====
@@ -9,13 +9,13 @@ tests/cases/compiler/staticInstanceResolution5_1.ts(6,16): error TS2304: Cannot
99
// these 3 should be errors
1010
var x = (w1: WinJS) => { };
1111
~~~~~
12-
!!! error TS2304: Cannot find name 'WinJS'.
12+
!!! error TS2709: Cannot use namespace 'WinJS' as a type.
1313
var y = function (w2: WinJS) { }
1414
~~~~~
15-
!!! error TS2304: Cannot find name 'WinJS'.
15+
!!! error TS2709: Cannot use namespace 'WinJS' as a type.
1616
function z(w3: WinJS) { }
1717
~~~~~
18-
!!! error TS2304: Cannot find name 'WinJS'.
18+
!!! error TS2709: Cannot use namespace 'WinJS' as a type.
1919

2020
==== tests/cases/compiler/staticInstanceResolution5_0.ts (0 errors) ====
2121
export class Promise {

tests/baselines/reference/typeofInternalModules.errors.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
tests/cases/compiler/typeofInternalModules.ts(15,16): error TS2708: Cannot use namespace 'importUninst' as a value.
2-
tests/cases/compiler/typeofInternalModules.ts(17,9): error TS2304: Cannot find name 'Outer'.
2+
tests/cases/compiler/typeofInternalModules.ts(17,9): error TS2709: Cannot use namespace 'Outer' as a type.
33
tests/cases/compiler/typeofInternalModules.ts(19,1): error TS2322: Type 'typeof Outer' is not assignable to type 'typeof instantiated'.
44
Property 'C' is missing in type 'typeof Outer'.
55
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
2828

2929
var x4: Outer = Outer;
3030
~~~~~
31-
!!! error TS2304: Cannot find name 'Outer'.
31+
!!! error TS2709: Cannot use namespace 'Outer' as a type.
3232
var x5: typeof importInst;
3333
x5 = Outer;
3434
~~

0 commit comments

Comments
 (0)