Fix "Cannot find name 'global'. Did you mean 'global'?" (#42262)

* 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.
This commit is contained in:
Matt Kantor
2021-01-20 15:23:34 -08:00
committed by GitHub
parent 0383b5cb4c
commit 424b805d61
21 changed files with 184 additions and 0 deletions

View File

@@ -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);

View File

@@ -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'.

View File

@@ -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)

View File

@@ -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)

View File

@@ -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

View File

@@ -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.

View File

@@ -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)

View File

@@ -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)

View File

@@ -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

View File

@@ -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.

View File

@@ -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)

View File

@@ -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)

View File

@@ -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

View File

@@ -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'.

View File

@@ -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)

View File

@@ -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)

View File

@@ -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

View File

@@ -0,0 +1,3 @@
export {}
declare global { const x: any }
global.x // should not suggest `global` (GH#42209)

View File

@@ -0,0 +1,4 @@
export {}
declare global { const x: any }
const globals = { x: true }
global.x // should suggest `globals` (GH#42209)

View File

@@ -0,0 +1,2 @@
const global = { x: true }
globals.x // should suggest `global` (GH#42209)

View File

@@ -0,0 +1,3 @@
export {}
declare global { var x: any }
global.x // should not suggest `global` (GH#42209)