From 820433a27c469b335ef0082703218d5e25650d19 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Wed, 3 Jun 2020 13:43:47 -0700 Subject: [PATCH] Make isEntityNameVisible duplicate the node builder logic to always consider type parameters as visible if they are the resolution result --- src/compiler/checker.ts | 3 +++ ...clarationEmitTypeParamMergedWithPrivate.js | 27 +++++++++++++++++++ ...tionEmitTypeParamMergedWithPrivate.symbols | 19 +++++++++++++ ...rationEmitTypeParamMergedWithPrivate.types | 19 +++++++++++++ ...clarationEmitTypeParamMergedWithPrivate.ts | 11 ++++++++ 5 files changed, 79 insertions(+) create mode 100644 tests/baselines/reference/declarationEmitTypeParamMergedWithPrivate.js create mode 100644 tests/baselines/reference/declarationEmitTypeParamMergedWithPrivate.symbols create mode 100644 tests/baselines/reference/declarationEmitTypeParamMergedWithPrivate.types create mode 100644 tests/cases/compiler/declarationEmitTypeParamMergedWithPrivate.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index d3ff399e9a5dd..99e9ade7f4d3e 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -4064,6 +4064,9 @@ namespace ts { const firstIdentifier = getFirstIdentifier(entityName); const symbol = resolveName(enclosingDeclaration, firstIdentifier.escapedText, meaning, /*nodeNotFoundErrorMessage*/ undefined, /*nameArg*/ undefined, /*isUse*/ false); + if (symbol && symbol.flags & SymbolFlags.TypeParameter && meaning & SymbolFlags.Type) { + return { accessibility: SymbolAccessibility.Accessible }; + } // Verify if the symbol is accessible return (symbol && hasVisibleDeclarations(symbol, /*shouldComputeAliasToMakeVisible*/ true)) || { diff --git a/tests/baselines/reference/declarationEmitTypeParamMergedWithPrivate.js b/tests/baselines/reference/declarationEmitTypeParamMergedWithPrivate.js new file mode 100644 index 0000000000000..6e2f2c9a8d4e7 --- /dev/null +++ b/tests/baselines/reference/declarationEmitTypeParamMergedWithPrivate.js @@ -0,0 +1,27 @@ +//// [declarationEmitTypeParamMergedWithPrivate.ts] +export class Test { + private get T(): T { + throw ""; + } + + public test(): T { + return null as any; + } +} + +//// [declarationEmitTypeParamMergedWithPrivate.js] +export class Test { + get T() { + throw ""; + } + test() { + return null; + } +} + + +//// [declarationEmitTypeParamMergedWithPrivate.d.ts] +export declare class Test { + private get T(); + test(): T; +} diff --git a/tests/baselines/reference/declarationEmitTypeParamMergedWithPrivate.symbols b/tests/baselines/reference/declarationEmitTypeParamMergedWithPrivate.symbols new file mode 100644 index 0000000000000..076490366e8fb --- /dev/null +++ b/tests/baselines/reference/declarationEmitTypeParamMergedWithPrivate.symbols @@ -0,0 +1,19 @@ +=== tests/cases/compiler/declarationEmitTypeParamMergedWithPrivate.ts === +export class Test { +>Test : Symbol(Test, Decl(declarationEmitTypeParamMergedWithPrivate.ts, 0, 0)) +>T : Symbol(T, Decl(declarationEmitTypeParamMergedWithPrivate.ts, 0, 18), Decl(declarationEmitTypeParamMergedWithPrivate.ts, 0, 22)) + + private get T(): T { +>T : Symbol(T, Decl(declarationEmitTypeParamMergedWithPrivate.ts, 0, 18), Decl(declarationEmitTypeParamMergedWithPrivate.ts, 0, 22)) +>T : Symbol(T, Decl(declarationEmitTypeParamMergedWithPrivate.ts, 0, 18), Decl(declarationEmitTypeParamMergedWithPrivate.ts, 0, 22)) + + throw ""; + } + + public test(): T { +>test : Symbol(Test.test, Decl(declarationEmitTypeParamMergedWithPrivate.ts, 3, 5)) +>T : Symbol(T, Decl(declarationEmitTypeParamMergedWithPrivate.ts, 0, 18), Decl(declarationEmitTypeParamMergedWithPrivate.ts, 0, 22)) + + return null as any; + } +} diff --git a/tests/baselines/reference/declarationEmitTypeParamMergedWithPrivate.types b/tests/baselines/reference/declarationEmitTypeParamMergedWithPrivate.types new file mode 100644 index 0000000000000..ae8ccf955a962 --- /dev/null +++ b/tests/baselines/reference/declarationEmitTypeParamMergedWithPrivate.types @@ -0,0 +1,19 @@ +=== tests/cases/compiler/declarationEmitTypeParamMergedWithPrivate.ts === +export class Test { +>Test : Test + + private get T(): T { +>T : T + + throw ""; +>"" : "" + } + + public test(): T { +>test : () => T + + return null as any; +>null as any : any +>null : null + } +} diff --git a/tests/cases/compiler/declarationEmitTypeParamMergedWithPrivate.ts b/tests/cases/compiler/declarationEmitTypeParamMergedWithPrivate.ts new file mode 100644 index 0000000000000..d2383e4171c00 --- /dev/null +++ b/tests/cases/compiler/declarationEmitTypeParamMergedWithPrivate.ts @@ -0,0 +1,11 @@ +// @declaration: true +// @target: es6 +export class Test { + private get T(): T { + throw ""; + } + + public test(): T { + return null as any; + } +} \ No newline at end of file