mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-06-26 19:25:41 -05:00
Do not report unused local error on locals that are intended for removing properties with object spread
Fixes #12766
This commit is contained in:
@@ -16702,6 +16702,14 @@ namespace ts {
|
||||
}
|
||||
}
|
||||
|
||||
function isRemovedPropertyFromObjectSpread(node: Node) {
|
||||
if (isBindingElement(node) && isObjectBindingPattern(node.parent)) {
|
||||
const lastElement = lastOrUndefined(node.parent.elements);
|
||||
return lastElement !== node && !!lastElement.dotDotDotToken;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function errorUnusedLocal(node: Node, name: string) {
|
||||
if (isIdentifierThatStartsWithUnderScore(node)) {
|
||||
const declaration = getRootDeclaration(node.parent);
|
||||
@@ -16711,7 +16719,10 @@ namespace ts {
|
||||
return;
|
||||
}
|
||||
}
|
||||
error(node, Diagnostics._0_is_declared_but_never_used, name);
|
||||
|
||||
if (!isRemovedPropertyFromObjectSpread(node.kind === SyntaxKind.Identifier ? node.parent : node)) {
|
||||
error(node, Diagnostics._0_is_declared_but_never_used, name);
|
||||
}
|
||||
}
|
||||
|
||||
function parameterNameStartsWithUnderscore(parameterName: DeclarationName) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
tests/cases/compiler/unusedLocalsAndObjectSpread.ts(7,12): error TS6133: 'a' is declared but never used.
|
||||
tests/cases/compiler/unusedLocalsAndObjectSpread.ts(14,15): error TS6133: '_' is declared but never used.
|
||||
tests/cases/compiler/unusedLocalsAndObjectSpread.ts(21,18): error TS6133: 'bar' is declared but never used.
|
||||
tests/cases/compiler/unusedLocalsAndObjectSpread.ts(28,21): error TS6133: 'bar' is declared but never used.
|
||||
|
||||
|
||||
==== tests/cases/compiler/unusedLocalsAndObjectSpread.ts (2 errors) ====
|
||||
@@ -10,8 +10,6 @@ tests/cases/compiler/unusedLocalsAndObjectSpread.ts(14,15): error TS6133: '_' is
|
||||
const foo = { a: 1, b: 2 };
|
||||
// 'a' is declared but never used
|
||||
const {a, ...bar} = foo;
|
||||
~
|
||||
!!! error TS6133: 'a' is declared but never used.
|
||||
console.log(bar);
|
||||
}
|
||||
|
||||
@@ -19,9 +17,24 @@ tests/cases/compiler/unusedLocalsAndObjectSpread.ts(14,15): error TS6133: '_' is
|
||||
const foo = { a: 1, b: 2 };
|
||||
// '_' is declared but never used
|
||||
const {a: _, ...bar} = foo;
|
||||
~
|
||||
!!! error TS6133: '_' is declared but never used.
|
||||
console.log(bar);
|
||||
}
|
||||
|
||||
function three() {
|
||||
const foo = { a: 1, b: 2 };
|
||||
// 'a' is declared but never used
|
||||
const {a, ...bar} = foo; // bar should be unused
|
||||
~~~
|
||||
!!! error TS6133: 'bar' is declared but never used.
|
||||
//console.log(bar);
|
||||
}
|
||||
|
||||
function four() {
|
||||
const foo = { a: 1, b: 2 };
|
||||
// '_' is declared but never used
|
||||
const {a: _, ...bar} = foo; // bar should be unused
|
||||
~~~
|
||||
!!! error TS6133: 'bar' is declared but never used.
|
||||
//console.log(bar);
|
||||
}
|
||||
|
||||
@@ -16,6 +16,19 @@ function two() {
|
||||
console.log(bar);
|
||||
}
|
||||
|
||||
function three() {
|
||||
const foo = { a: 1, b: 2 };
|
||||
// 'a' is declared but never used
|
||||
const {a, ...bar} = foo; // bar should be unused
|
||||
//console.log(bar);
|
||||
}
|
||||
|
||||
function four() {
|
||||
const foo = { a: 1, b: 2 };
|
||||
// '_' is declared but never used
|
||||
const {a: _, ...bar} = foo; // bar should be unused
|
||||
//console.log(bar);
|
||||
}
|
||||
|
||||
|
||||
//// [unusedLocalsAndObjectSpread.js]
|
||||
@@ -40,3 +53,15 @@ function two() {
|
||||
var _ = foo.a, bar = __rest(foo, ["a"]);
|
||||
console.log(bar);
|
||||
}
|
||||
function three() {
|
||||
var foo = { a: 1, b: 2 };
|
||||
// 'a' is declared but never used
|
||||
var a = foo.a, bar = __rest(foo, ["a"]); // bar should be unused
|
||||
//console.log(bar);
|
||||
}
|
||||
function four() {
|
||||
var foo = { a: 1, b: 2 };
|
||||
// '_' is declared but never used
|
||||
var _ = foo.a, bar = __rest(foo, ["a"]); // bar should be unused
|
||||
//console.log(bar);
|
||||
}
|
||||
|
||||
@@ -16,3 +16,16 @@ function two() {
|
||||
console.log(bar);
|
||||
}
|
||||
|
||||
function three() {
|
||||
const foo = { a: 1, b: 2 };
|
||||
// 'a' is declared but never used
|
||||
const {a, ...bar} = foo; // bar should be unused
|
||||
//console.log(bar);
|
||||
}
|
||||
|
||||
function four() {
|
||||
const foo = { a: 1, b: 2 };
|
||||
// '_' is declared but never used
|
||||
const {a: _, ...bar} = foo; // bar should be unused
|
||||
//console.log(bar);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user