Skip to content

Commit 6de69df

Browse files
begincalendarmhegazy
authored andcommitted
Fix microsoft#102: More accurate error message for module in type reference (microsoft#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.

0 commit comments

Comments
 (0)