From 6c5c48c74c4a51f201de251cf6eafb420965d609 Mon Sep 17 00:00:00 2001
From: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com>
Date: Thu, 27 Feb 2020 13:18:43 -0800
Subject: [PATCH] Exempt ambient [#]private from unused error (#37050)
* Exempt ambient [#]private from unused error
These declarations exist to create nominality so they _must_ be unused.
There should be no error for them.
* Switch to fourslash test
I don't know how to baseline suggestion diagnostics in the compiler
tests.
---
src/compiler/checker.ts | 4 +++-
tests/cases/fourslash/unusedVariableInClass4.ts | 11 +++++++++++
tests/cases/fourslash/unusedVariableInClass5.ts | 10 ++++++++++
3 files changed, 24 insertions(+), 1 deletion(-)
create mode 100644 tests/cases/fourslash/unusedVariableInClass4.ts
create mode 100644 tests/cases/fourslash/unusedVariableInClass5.ts
diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts
index ba5a482a4a4..b4052825c68 100644
--- a/src/compiler/checker.ts
+++ b/src/compiler/checker.ts
@@ -30566,7 +30566,9 @@ namespace ts {
break;
}
const symbol = getSymbolOfNode(member);
- if (!symbol.isReferenced && (hasModifier(member, ModifierFlags.Private) || isNamedDeclaration(member) && isPrivateIdentifier(member.name))) {
+ if (!symbol.isReferenced
+ && (hasModifier(member, ModifierFlags.Private) || isNamedDeclaration(member) && isPrivateIdentifier(member.name))
+ && !(member.flags & NodeFlags.Ambient)) {
addDiagnostic(member, UnusedKind.Local, createDiagnosticForNode(member.name!, Diagnostics._0_is_declared_but_its_value_is_never_read, symbolToString(symbol)));
}
break;
diff --git a/tests/cases/fourslash/unusedVariableInClass4.ts b/tests/cases/fourslash/unusedVariableInClass4.ts
new file mode 100644
index 00000000000..ec5d5f973a2
--- /dev/null
+++ b/tests/cases/fourslash/unusedVariableInClass4.ts
@@ -0,0 +1,11 @@
+///
+
+// @noUnusedLocals: false
+////class greeter {
+//// [|private greeting: string;|]
+////}
+
+verify.codeFix({
+ description: "Remove unused declaration for: 'greeting'",
+ newRangeContent: "",
+});
diff --git a/tests/cases/fourslash/unusedVariableInClass5.ts b/tests/cases/fourslash/unusedVariableInClass5.ts
new file mode 100644
index 00000000000..c1e9f58f527
--- /dev/null
+++ b/tests/cases/fourslash/unusedVariableInClass5.ts
@@ -0,0 +1,10 @@
+///
+
+// @noUnusedLocals: true
+// @target: esnext
+////declare class greeter {
+//// #private;
+//// private name;
+////}
+
+verify.noErrors()