Skip to content

Commit

Permalink
Fix "Cannot find name 'global'. Did you mean 'global'?" (#42262)
Browse files Browse the repository at this point in the history
* Add tests for "Cannot find name 'global'. Did you mean 'global'?"

* Fix "Cannot find name 'global'. Did you mean 'global'?"

* Add an additional test case for spelling suggestions of "global".

* Name the boolean for suggestions being global scope augmentations.
  • Loading branch information
mkantor authored Jan 20, 2021
1 parent 0383b5c commit 424b805
Show file tree
Hide file tree
Showing 21 changed files with 184 additions and 0 deletions.
4 changes: 4 additions & 0 deletions src/compiler/checker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2028,6 +2028,10 @@ namespace ts {
let suggestion: Symbol | undefined;
if (suggestedNameNotFoundMessage && suggestionCount < maximumSuggestionCount) {
suggestion = getSuggestedSymbolForNonexistentSymbol(originalLocation, name, meaning);
const isGlobalScopeAugmentationDeclaration = suggestion && suggestion.valueDeclaration && isAmbientModule(suggestion.valueDeclaration) && isGlobalScopeAugmentation(suggestion.valueDeclaration);
if (isGlobalScopeAugmentationDeclaration) {
suggestion = undefined;
}
if (suggestion) {
const suggestionName = symbolToString(suggestion);
const diagnostic = error(errorLocation, suggestedNameNotFoundMessage, diagnosticName(nameArg!), suggestionName);
Expand Down
10 changes: 10 additions & 0 deletions tests/baselines/reference/spellingSuggestionGlobal1.errors.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
tests/cases/compiler/spellingSuggestionGlobal1.ts(3,1): error TS2304: Cannot find name 'global'.


==== tests/cases/compiler/spellingSuggestionGlobal1.ts (1 errors) ====
export {}
declare global { const x: any }
global.x // should not suggest `global` (GH#42209)
~~~~~~
!!! error TS2304: Cannot find name 'global'.

10 changes: 10 additions & 0 deletions tests/baselines/reference/spellingSuggestionGlobal1.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
//// [spellingSuggestionGlobal1.ts]
export {}
declare global { const x: any }
global.x // should not suggest `global` (GH#42209)


//// [spellingSuggestionGlobal1.js]
"use strict";
exports.__esModule = true;
global.x; // should not suggest `global` (GH#42209)
8 changes: 8 additions & 0 deletions tests/baselines/reference/spellingSuggestionGlobal1.symbols
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
=== tests/cases/compiler/spellingSuggestionGlobal1.ts ===
export {}
declare global { const x: any }
>global : Symbol(global, Decl(spellingSuggestionGlobal1.ts, 0, 9))
>x : Symbol(x, Decl(spellingSuggestionGlobal1.ts, 1, 22))

global.x // should not suggest `global` (GH#42209)

11 changes: 11 additions & 0 deletions tests/baselines/reference/spellingSuggestionGlobal1.types
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
=== tests/cases/compiler/spellingSuggestionGlobal1.ts ===
export {}
declare global { const x: any }
>global : typeof global
>x : any

global.x // should not suggest `global` (GH#42209)
>global.x : any
>global : any
>x : any

12 changes: 12 additions & 0 deletions tests/baselines/reference/spellingSuggestionGlobal2.errors.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
tests/cases/compiler/spellingSuggestionGlobal2.ts(4,1): error TS2552: Cannot find name 'global'. Did you mean 'globals'?


==== tests/cases/compiler/spellingSuggestionGlobal2.ts (1 errors) ====
export {}
declare global { const x: any }
const globals = { x: true }
global.x // should suggest `globals` (GH#42209)
~~~~~~
!!! error TS2552: Cannot find name 'global'. Did you mean 'globals'?
!!! related TS2728 tests/cases/compiler/spellingSuggestionGlobal2.ts:3:7: 'globals' is declared here.

12 changes: 12 additions & 0 deletions tests/baselines/reference/spellingSuggestionGlobal2.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
//// [spellingSuggestionGlobal2.ts]
export {}
declare global { const x: any }
const globals = { x: true }
global.x // should suggest `globals` (GH#42209)


//// [spellingSuggestionGlobal2.js]
"use strict";
exports.__esModule = true;
var globals = { x: true };
global.x; // should suggest `globals` (GH#42209)
12 changes: 12 additions & 0 deletions tests/baselines/reference/spellingSuggestionGlobal2.symbols
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
=== tests/cases/compiler/spellingSuggestionGlobal2.ts ===
export {}
declare global { const x: any }
>global : Symbol(global, Decl(spellingSuggestionGlobal2.ts, 0, 9))
>x : Symbol(x, Decl(spellingSuggestionGlobal2.ts, 1, 22))

const globals = { x: true }
>globals : Symbol(globals, Decl(spellingSuggestionGlobal2.ts, 2, 5))
>x : Symbol(x, Decl(spellingSuggestionGlobal2.ts, 2, 17))

global.x // should suggest `globals` (GH#42209)

17 changes: 17 additions & 0 deletions tests/baselines/reference/spellingSuggestionGlobal2.types
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
=== tests/cases/compiler/spellingSuggestionGlobal2.ts ===
export {}
declare global { const x: any }
>global : typeof global
>x : any

const globals = { x: true }
>globals : { x: boolean; }
>{ x: true } : { x: boolean; }
>x : boolean
>true : true

global.x // should suggest `globals` (GH#42209)
>global.x : any
>global : any
>x : any

10 changes: 10 additions & 0 deletions tests/baselines/reference/spellingSuggestionGlobal3.errors.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
tests/cases/compiler/spellingSuggestionGlobal3.ts(2,1): error TS2552: Cannot find name 'globals'. Did you mean 'global'?


==== tests/cases/compiler/spellingSuggestionGlobal3.ts (1 errors) ====
const global = { x: true }
globals.x // should suggest `global` (GH#42209)
~~~~~~~
!!! error TS2552: Cannot find name 'globals'. Did you mean 'global'?
!!! related TS2728 tests/cases/compiler/spellingSuggestionGlobal3.ts:1:7: 'global' is declared here.

8 changes: 8 additions & 0 deletions tests/baselines/reference/spellingSuggestionGlobal3.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
//// [spellingSuggestionGlobal3.ts]
const global = { x: true }
globals.x // should suggest `global` (GH#42209)


//// [spellingSuggestionGlobal3.js]
var global = { x: true };
globals.x; // should suggest `global` (GH#42209)
7 changes: 7 additions & 0 deletions tests/baselines/reference/spellingSuggestionGlobal3.symbols
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
=== tests/cases/compiler/spellingSuggestionGlobal3.ts ===
const global = { x: true }
>global : Symbol(global, Decl(spellingSuggestionGlobal3.ts, 0, 5))
>x : Symbol(x, Decl(spellingSuggestionGlobal3.ts, 0, 16))

globals.x // should suggest `global` (GH#42209)

12 changes: 12 additions & 0 deletions tests/baselines/reference/spellingSuggestionGlobal3.types
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
=== tests/cases/compiler/spellingSuggestionGlobal3.ts ===
const global = { x: true }
>global : { x: boolean; }
>{ x: true } : { x: boolean; }
>x : boolean
>true : true

globals.x // should suggest `global` (GH#42209)
>globals.x : any
>globals : any
>x : any

10 changes: 10 additions & 0 deletions tests/baselines/reference/spellingSuggestionGlobal4.errors.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
tests/cases/compiler/spellingSuggestionGlobal4.ts(3,1): error TS2304: Cannot find name 'global'.


==== tests/cases/compiler/spellingSuggestionGlobal4.ts (1 errors) ====
export {}
declare global { var x: any }
global.x // should not suggest `global` (GH#42209)
~~~~~~
!!! error TS2304: Cannot find name 'global'.

10 changes: 10 additions & 0 deletions tests/baselines/reference/spellingSuggestionGlobal4.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
//// [spellingSuggestionGlobal4.ts]
export {}
declare global { var x: any }
global.x // should not suggest `global` (GH#42209)


//// [spellingSuggestionGlobal4.js]
"use strict";
exports.__esModule = true;
global.x; // should not suggest `global` (GH#42209)
8 changes: 8 additions & 0 deletions tests/baselines/reference/spellingSuggestionGlobal4.symbols
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
=== tests/cases/compiler/spellingSuggestionGlobal4.ts ===
export {}
declare global { var x: any }
>global : Symbol(global, Decl(spellingSuggestionGlobal4.ts, 0, 9))
>x : Symbol(x, Decl(spellingSuggestionGlobal4.ts, 1, 20))

global.x // should not suggest `global` (GH#42209)

11 changes: 11 additions & 0 deletions tests/baselines/reference/spellingSuggestionGlobal4.types
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
=== tests/cases/compiler/spellingSuggestionGlobal4.ts ===
export {}
declare global { var x: any }
>global : typeof global
>x : any

global.x // should not suggest `global` (GH#42209)
>global.x : any
>global : any
>x : any

3 changes: 3 additions & 0 deletions tests/cases/compiler/spellingSuggestionGlobal1.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export {}
declare global { const x: any }
global.x // should not suggest `global` (GH#42209)
4 changes: 4 additions & 0 deletions tests/cases/compiler/spellingSuggestionGlobal2.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
export {}
declare global { const x: any }
const globals = { x: true }
global.x // should suggest `globals` (GH#42209)
2 changes: 2 additions & 0 deletions tests/cases/compiler/spellingSuggestionGlobal3.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
const global = { x: true }
globals.x // should suggest `global` (GH#42209)
3 changes: 3 additions & 0 deletions tests/cases/compiler/spellingSuggestionGlobal4.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export {}
declare global { var x: any }
global.x // should not suggest `global` (GH#42209)

0 comments on commit 424b805

Please sign in to comment.