Skip to content

Commit 2c295fd

Browse files
committed
Allow underscore prefix to bypass noUnusedLocals warning
This PR continues [Allow leading underscore for types...](#58884), taking into account feedback from https://github.com/microsoft/TypeScript/pull/58884/files#r1643108204. The initial commit on this PR is original work by @a-tarasyuk. The second commit enhances the test suite and reverts the change to checker.ts to get a new baseline on the test suite for easier comparison with the changes. The third commit changes checker.ts to allow any unused local if it is prefixed with an underscore. This has the effect of newly allowing the following unused declarations: ```ts // Variables were previously allowed only in destructuring and for-loops const _unusedVar = 2; let _unusedLet = 4; var _unusedVar2 = 6; // These two no longer raise // error TS6198: All destructured elements are unused const { _a, _b } = { _a: 1, _b: 1 }; function f2({_a, _b}) function _unusedFunc() { } const _unusedArrow = () => { }; class _UnusedClass { } interface _UnusedInterface { } type _UnusedType = string; enum _UnusedEnum { A } namespace _UnusedNamespace { ... } ``` As far as I can tell, enum members and properties are not checked in the checkUnusedLocalsAndParameters function, and we do not need to special-case them. Closes #58561
1 parent 88058e0 commit 2c295fd

14 files changed

+121
-114
lines changed

src/compiler/checker.ts

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -44409,21 +44409,6 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
4440944409
return tryCast(getRootDeclaration(node), isParameter);
4441044410
}
4441144411

44412-
function isValidUnusedLocalDeclaration(declaration: Declaration): boolean {
44413-
if (isBindingElement(declaration)) {
44414-
if (isObjectBindingPattern(declaration.parent)) {
44415-
/**
44416-
* ignore starts with underscore names _
44417-
* const { a: _a } = { a: 1 }
44418-
*/
44419-
return !!(declaration.propertyName && isIdentifierThatStartsWithUnderscore(declaration.name));
44420-
}
44421-
return isIdentifierThatStartsWithUnderscore(declaration.name);
44422-
}
44423-
return isAmbientModule(declaration) ||
44424-
(isVariableDeclaration(declaration) && isForInOrOfStatement(declaration.parent.parent) || isImportedDeclaration(declaration)) && isIdentifierThatStartsWithUnderscore(declaration.name!);
44425-
}
44426-
4442744412
function checkUnusedLocalsAndParameters(nodeWithLocals: HasLocals, addDiagnostic: AddUnusedDiagnostic): void {
4442844413
// Ideally we could use the ImportClause directly as a key, but must wait until we have full ES6 maps. So must store key along with value.
4442944414
const unusedImports = new Map<string, [ImportClause, ImportedDeclaration[]]>();
@@ -44438,7 +44423,8 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
4443844423

4443944424
if (local.declarations) {
4444044425
for (const declaration of local.declarations) {
44441-
if (isValidUnusedLocalDeclaration(declaration)) {
44426+
const name = getNameOfDeclaration(declaration);
44427+
if (isAmbientModule(declaration) || name && isIdentifierThatStartsWithUnderscore(name)) {
4444244428
continue;
4444344429
}
4444444430

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
11
noUnusedLocals_types.ts(4,6): error TS6196: 'UnusedType1' is declared but never used.
22
noUnusedLocals_types.ts(5,11): error TS6196: 'UnusedInterface1' is declared but never used.
33
noUnusedLocals_types.ts(6,7): error TS6196: 'UnusedClass1' is declared but never used.
4-
noUnusedLocals_types.ts(9,6): error TS6196: '_UnusedType2' is declared but never used.
5-
noUnusedLocals_types.ts(10,11): error TS6196: '_UnusedInterface2' is declared but never used.
6-
noUnusedLocals_types.ts(11,7): error TS6196: '_UnusedClass2' is declared but never used.
7-
noUnusedLocals_types.ts(15,6): error TS6196: '_Helper' is declared but never used.
84

95

10-
==== noUnusedLocals_types.ts (7 errors) ====
6+
==== noUnusedLocals_types.ts (3 errors) ====
117
// Test specifically for type declarations with underscore prefix
128

139
// These should all produce errors (no underscore)
@@ -23,19 +19,11 @@ noUnusedLocals_types.ts(15,6): error TS6196: '_Helper' is declared but never use
2319

2420
// These should NOT produce errors (underscore prefix)
2521
type _UnusedType2 = string;
26-
~~~~~~~~~~~~
27-
!!! error TS6196: '_UnusedType2' is declared but never used.
2822
interface _UnusedInterface2 { x: number; }
29-
~~~~~~~~~~~~~~~~~
30-
!!! error TS6196: '_UnusedInterface2' is declared but never used.
3123
class _UnusedClass2 { }
32-
~~~~~~~~~~~~~
33-
!!! error TS6196: '_UnusedClass2' is declared but never used.
3424

3525
// Mixed usage - only the one without underscore should error
3626
type UsedInOther = number;
3727
type _Helper = UsedInOther; // _Helper is not an error, but it uses UsedInOther
38-
~~~~~~~
39-
!!! error TS6196: '_Helper' is declared but never used.
4028

4129
export {};

tests/baselines/reference/unusedLocalsStartingWithUnderscore.errors.txt

Lines changed: 4 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,16 @@
11
unusedLocalsStartingWithUnderscore.ts(2,7): error TS6133: 'unusedVar' is declared but its value is never read.
2-
unusedLocalsStartingWithUnderscore.ts(3,7): error TS6133: '_unusedVar' is declared but its value is never read.
32
unusedLocalsStartingWithUnderscore.ts(5,5): error TS6133: 'unusedLet' is declared but its value is never read.
4-
unusedLocalsStartingWithUnderscore.ts(6,5): error TS6133: '_unusedLet' is declared but its value is never read.
53
unusedLocalsStartingWithUnderscore.ts(8,5): error TS6133: 'unusedVar2' is declared but its value is never read.
6-
unusedLocalsStartingWithUnderscore.ts(9,5): error TS6133: '_unusedVar2' is declared but its value is never read.
7-
unusedLocalsStartingWithUnderscore.ts(11,7): error TS6198: All destructured elements are unused.
8-
unusedLocalsStartingWithUnderscore.ts(12,7): error TS6198: All destructured elements are unused.
4+
unusedLocalsStartingWithUnderscore.ts(11,9): error TS6133: 'a1' is declared but its value is never read.
95
unusedLocalsStartingWithUnderscore.ts(15,10): error TS6133: 'unusedFunc' is declared but its value is never read.
10-
unusedLocalsStartingWithUnderscore.ts(16,10): error TS6133: '_unusedFunc' is declared but its value is never read.
116
unusedLocalsStartingWithUnderscore.ts(18,7): error TS6133: 'unusedArrow' is declared but its value is never read.
12-
unusedLocalsStartingWithUnderscore.ts(19,7): error TS6133: '_unusedArrow' is declared but its value is never read.
137
unusedLocalsStartingWithUnderscore.ts(22,7): error TS6196: 'UnusedClass' is declared but never used.
14-
unusedLocalsStartingWithUnderscore.ts(23,7): error TS6196: '_UnusedClass' is declared but never used.
158
unusedLocalsStartingWithUnderscore.ts(26,11): error TS6196: 'UnusedInterface' is declared but never used.
16-
unusedLocalsStartingWithUnderscore.ts(27,11): error TS6196: '_UnusedInterface' is declared but never used.
179
unusedLocalsStartingWithUnderscore.ts(30,6): error TS6196: 'UnusedType' is declared but never used.
18-
unusedLocalsStartingWithUnderscore.ts(31,6): error TS6196: '_UnusedType' is declared but never used.
1910
unusedLocalsStartingWithUnderscore.ts(34,6): error TS6196: 'UnusedEnum' is declared but never used.
20-
unusedLocalsStartingWithUnderscore.ts(35,6): error TS6196: '_UnusedEnum' is declared but never used.
2111
unusedLocalsStartingWithUnderscore.ts(39,12): error TS6133: 'x' is declared but its value is never read.
2212
unusedLocalsStartingWithUnderscore.ts(41,12): error TS6133: 'x' is declared but its value is never read.
2313
unusedLocalsStartingWithUnderscore.ts(44,11): error TS6133: 'UnusedNamespace' is declared but its value is never read.
24-
unusedLocalsStartingWithUnderscore.ts(47,11): error TS6133: '_UnusedNamespace' is declared but its value is never read.
2514
unusedLocalsStartingWithUnderscore.ts(52,7): error TS6133: 'unusedA' is declared but its value is never read.
2615
unusedLocalsStartingWithUnderscore.ts(54,8): error TS6133: 'unusedC' is declared but its value is never read.
2716
unusedLocalsStartingWithUnderscore.ts(61,7): error TS6196: 'TestClass' is declared but never used.
@@ -34,82 +23,62 @@ unusedLocalsStartingWithUnderscore.ts(74,11): error TS6196: 'TestInterface' is d
3423
unusedLocalsStartingWithUnderscore.ts(79,7): error TS6133: 'obj' is declared but its value is never read.
3524

3625

37-
==== unusedLocalsStartingWithUnderscore.ts (34 errors) ====
26+
==== unusedLocalsStartingWithUnderscore.ts (23 errors) ====
3827
// Variables
3928
const unusedVar = 1; // error
4029
~~~~~~~~~
4130
!!! error TS6133: 'unusedVar' is declared but its value is never read.
4231
const _unusedVar = 2; // ok
43-
~~~~~~~~~~
44-
!!! error TS6133: '_unusedVar' is declared but its value is never read.
4532

4633
let unusedLet = 3; // error
4734
~~~~~~~~~
4835
!!! error TS6133: 'unusedLet' is declared but its value is never read.
4936
let _unusedLet = 4; // ok
50-
~~~~~~~~~~
51-
!!! error TS6133: '_unusedLet' is declared but its value is never read.
5237

5338
var unusedVar2 = 5; // error
5439
~~~~~~~~~~
5540
!!! error TS6133: 'unusedVar2' is declared but its value is never read.
5641
var _unusedVar2 = 6; // ok
57-
~~~~~~~~~~~
58-
!!! error TS6133: '_unusedVar2' is declared but its value is never read.
5942

6043
const { a1, _b1 } = { a1: 1, _b1: 2 }; // error on a1
61-
~~~~~~~~~~~
62-
!!! error TS6198: All destructured elements are unused.
44+
~~
45+
!!! error TS6133: 'a1' is declared but its value is never read.
6346
const { _a2, _b2 } = { _a2: 1, _b2: 2 }; // ok
64-
~~~~~~~~~~~~
65-
!!! error TS6198: All destructured elements are unused.
6647

6748
// Functions
6849
function unusedFunc() { } // error
6950
~~~~~~~~~~
7051
!!! error TS6133: 'unusedFunc' is declared but its value is never read.
7152
function _unusedFunc() { } // ok
72-
~~~~~~~~~~~
73-
!!! error TS6133: '_unusedFunc' is declared but its value is never read.
7453

7554
const unusedArrow = () => { }; // error
7655
~~~~~~~~~~~
7756
!!! error TS6133: 'unusedArrow' is declared but its value is never read.
7857
const _unusedArrow = () => { }; // ok
79-
~~~~~~~~~~~~
80-
!!! error TS6133: '_unusedArrow' is declared but its value is never read.
8158

8259
// Classes
8360
class UnusedClass { } // error
8461
~~~~~~~~~~~
8562
!!! error TS6196: 'UnusedClass' is declared but never used.
8663
class _UnusedClass { } // ok
87-
~~~~~~~~~~~~
88-
!!! error TS6196: '_UnusedClass' is declared but never used.
8964

9065
// Interfaces
9166
interface UnusedInterface { } // error
9267
~~~~~~~~~~~~~~~
9368
!!! error TS6196: 'UnusedInterface' is declared but never used.
9469
interface _UnusedInterface { } // ok
95-
~~~~~~~~~~~~~~~~
96-
!!! error TS6196: '_UnusedInterface' is declared but never used.
9770

9871
// Type aliases
9972
type UnusedType = string; // error
10073
~~~~~~~~~~
10174
!!! error TS6196: 'UnusedType' is declared but never used.
10275
type _UnusedType = string; // ok
103-
~~~~~~~~~~~
104-
!!! error TS6196: '_UnusedType' is declared but never used.
10576

10677
// Enums
10778
enum UnusedEnum { A } // error
10879
~~~~~~~~~~
10980
!!! error TS6196: 'UnusedEnum' is declared but never used.
11081
enum _UnusedEnum { A } // ok
111-
~~~~~~~~~~~
112-
!!! error TS6196: '_UnusedEnum' is declared but never used.
11382

11483
// Declarations in for loops
11584
for (const _x of []) { } // ok
@@ -128,8 +97,6 @@ unusedLocalsStartingWithUnderscore.ts(79,7): error TS6133: 'obj' is declared but
12897
export const x = 1;
12998
}
13099
namespace _UnusedNamespace { // ok
131-
~~~~~~~~~~~~~~~~
132-
!!! error TS6133: '_UnusedNamespace' is declared but its value is never read.
133100
export const x = 1;
134101
}
135102

tests/baselines/reference/unusedParametersWithUnderscore.errors.txt

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ unusedParametersWithUnderscore.ts(1,12): error TS6133: 'a' is declared but its v
22
unusedParametersWithUnderscore.ts(1,19): error TS6133: 'c' is declared but its value is never read.
33
unusedParametersWithUnderscore.ts(1,27): error TS6133: 'd' is declared but its value is never read.
44
unusedParametersWithUnderscore.ts(1,29): error TS6133: 'e___' is declared but its value is never read.
5-
unusedParametersWithUnderscore.ts(5,13): error TS6198: All destructured elements are unused.
6-
unusedParametersWithUnderscore.ts(11,16): error TS6133: 'arg' is declared but its value is never read.
7-
unusedParametersWithUnderscore.ts(17,13): error TS6133: 'arg' is declared but its value is never read.
5+
unusedParametersWithUnderscore.ts(9,14): error TS6198: All destructured elements are unused.
6+
unusedParametersWithUnderscore.ts(15,16): error TS6133: 'arg' is declared but its value is never read.
7+
unusedParametersWithUnderscore.ts(21,13): error TS6133: 'arg' is declared but its value is never read.
88

99

1010
==== unusedParametersWithUnderscore.ts (7 errors) ====
@@ -19,9 +19,13 @@ unusedParametersWithUnderscore.ts(17,13): error TS6133: 'arg' is declared but it
1919
!!! error TS6133: 'e___' is declared but its value is never read.
2020
}
2121

22-
22+
// ok because of underscore prefix
2323
function f2({_a, __b}) {
24-
~~~~~~~~~
24+
}
25+
26+
// error
27+
function f2b({ a, b }) {
28+
~~~~~~~~
2529
!!! error TS6198: All destructured elements are unused.
2630
}
2731

tests/baselines/reference/unusedParametersWithUnderscore.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,14 @@
44
function f(a, _b, c, ___, d,e___, _f) {
55
}
66

7-
7+
// ok because of underscore prefix
88
function f2({_a, __b}) {
99
}
1010

11+
// error
12+
function f2b({ a, b }) {
13+
}
14+
1115
function f3([_a, ,__b]) {
1216
}
1317

@@ -27,9 +31,14 @@ var f8 = function (_) { };
2731
//// [unusedParametersWithUnderscore.js]
2832
function f(a, _b, c, ___, d, e___, _f) {
2933
}
34+
// ok because of underscore prefix
3035
function f2(_c) {
3136
var _a = _c._a, __b = _c.__b;
3237
}
38+
// error
39+
function f2b(_c) {
40+
var a = _c.a, b = _c.b;
41+
}
3342
function f3(_c) {
3443
var _a = _c[0], __b = _c[2];
3544
}

tests/baselines/reference/unusedParametersWithUnderscore.symbols

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,41 +12,48 @@ function f(a, _b, c, ___, d,e___, _f) {
1212
>_f : Symbol(_f, Decl(unusedParametersWithUnderscore.ts, 0, 33))
1313
}
1414

15-
15+
// ok because of underscore prefix
1616
function f2({_a, __b}) {
1717
>f2 : Symbol(f2, Decl(unusedParametersWithUnderscore.ts, 1, 1))
1818
>_a : Symbol(_a, Decl(unusedParametersWithUnderscore.ts, 4, 13))
1919
>__b : Symbol(__b, Decl(unusedParametersWithUnderscore.ts, 4, 16))
2020
}
2121

22+
// error
23+
function f2b({ a, b }) {
24+
>f2b : Symbol(f2b, Decl(unusedParametersWithUnderscore.ts, 5, 1))
25+
>a : Symbol(a, Decl(unusedParametersWithUnderscore.ts, 8, 14))
26+
>b : Symbol(b, Decl(unusedParametersWithUnderscore.ts, 8, 17))
27+
}
28+
2229
function f3([_a, ,__b]) {
23-
>f3 : Symbol(f3, Decl(unusedParametersWithUnderscore.ts, 5, 1))
24-
>_a : Symbol(_a, Decl(unusedParametersWithUnderscore.ts, 7, 13))
25-
>__b : Symbol(__b, Decl(unusedParametersWithUnderscore.ts, 7, 18))
30+
>f3 : Symbol(f3, Decl(unusedParametersWithUnderscore.ts, 9, 1))
31+
>_a : Symbol(_a, Decl(unusedParametersWithUnderscore.ts, 11, 13))
32+
>__b : Symbol(__b, Decl(unusedParametersWithUnderscore.ts, 11, 18))
2633
}
2734

2835
function f4(...arg) {
29-
>f4 : Symbol(f4, Decl(unusedParametersWithUnderscore.ts, 8, 1))
30-
>arg : Symbol(arg, Decl(unusedParametersWithUnderscore.ts, 10, 12))
36+
>f4 : Symbol(f4, Decl(unusedParametersWithUnderscore.ts, 12, 1))
37+
>arg : Symbol(arg, Decl(unusedParametersWithUnderscore.ts, 14, 12))
3138
}
3239

3340
function f5(..._arg) {
34-
>f5 : Symbol(f5, Decl(unusedParametersWithUnderscore.ts, 11, 1))
35-
>_arg : Symbol(_arg, Decl(unusedParametersWithUnderscore.ts, 13, 12))
41+
>f5 : Symbol(f5, Decl(unusedParametersWithUnderscore.ts, 15, 1))
42+
>_arg : Symbol(_arg, Decl(unusedParametersWithUnderscore.ts, 17, 12))
3643
}
3744

3845
function f6(arg?, _arg?) {
39-
>f6 : Symbol(f6, Decl(unusedParametersWithUnderscore.ts, 14, 1))
40-
>arg : Symbol(arg, Decl(unusedParametersWithUnderscore.ts, 16, 12))
41-
>_arg : Symbol(_arg, Decl(unusedParametersWithUnderscore.ts, 16, 17))
46+
>f6 : Symbol(f6, Decl(unusedParametersWithUnderscore.ts, 18, 1))
47+
>arg : Symbol(arg, Decl(unusedParametersWithUnderscore.ts, 20, 12))
48+
>_arg : Symbol(_arg, Decl(unusedParametersWithUnderscore.ts, 20, 17))
4249
}
4350

4451
var f7 = _ => undefined;
45-
>f7 : Symbol(f7, Decl(unusedParametersWithUnderscore.ts, 19, 3))
46-
>_ : Symbol(_, Decl(unusedParametersWithUnderscore.ts, 19, 8))
52+
>f7 : Symbol(f7, Decl(unusedParametersWithUnderscore.ts, 23, 3))
53+
>_ : Symbol(_, Decl(unusedParametersWithUnderscore.ts, 23, 8))
4754
>undefined : Symbol(undefined)
4855

4956
var f8 = function (_) { };
50-
>f8 : Symbol(f8, Decl(unusedParametersWithUnderscore.ts, 21, 3))
51-
>_ : Symbol(_, Decl(unusedParametersWithUnderscore.ts, 21, 19))
57+
>f8 : Symbol(f8, Decl(unusedParametersWithUnderscore.ts, 25, 3))
58+
>_ : Symbol(_, Decl(unusedParametersWithUnderscore.ts, 25, 19))
5259

tests/baselines/reference/unusedParametersWithUnderscore.types

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ function f(a, _b, c, ___, d,e___, _f) {
2020
> : ^^^
2121
}
2222

23-
23+
// ok because of underscore prefix
2424
function f2({_a, __b}) {
2525
>f2 : ({ _a, __b }: { _a: any; __b: any; }) => void
2626
> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -30,6 +30,16 @@ function f2({_a, __b}) {
3030
> : ^^^
3131
}
3232

33+
// error
34+
function f2b({ a, b }) {
35+
>f2b : ({ a, b }: { a: any; b: any; }) => void
36+
> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
37+
>a : any
38+
> : ^^^
39+
>b : any
40+
> : ^^^
41+
}
42+
3343
function f3([_a, ,__b]) {
3444
>f3 : ([_a, , __b]: [any, any, any]) => void
3545
> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^
Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
unusedTypeDeclarations.ts(1,6): error TS6196: 'T1' is declared but never used.
2-
unusedTypeDeclarations.ts(2,6): error TS6196: '_T2' is declared but never used.
32

43

5-
==== unusedTypeDeclarations.ts (2 errors) ====
4+
==== unusedTypeDeclarations.ts (1 errors) ====
65
type T1 = number; // error
76
~~
87
!!! error TS6196: 'T1' is declared but never used.
98
type _T2 = number; // ok
10-
~~~
11-
!!! error TS6196: '_T2' is declared but never used.
129

1310
export {};
1411

tests/baselines/reference/unusedVariablesWithUnderscoreInBindingElement.errors.txt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,10 +132,13 @@ unusedVariablesWithUnderscoreInBindingElement.ts(81,11): error TS6198: All destr
132132

133133
function t7() {
134134
// error
135-
const { _a1, _b1 } = { _a1: 1, _b1: 1 };
136-
~~~~~~~~~~~~
135+
const { a0, b0 } = { a0: 1, b0: 1 };
136+
~~~~~~~~~~
137137
!!! error TS6198: All destructured elements are unused.
138138

139+
// ok
140+
const { _a1, _b1 } = { _a1: 1, _b1: 1 };
141+
139142
// ok
140143
const { a2: _a2, b2: _b2 } = { a2: 1, b2: 1 };
141144

tests/baselines/reference/unusedVariablesWithUnderscoreInBindingElement.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,9 @@ function t6() {
8181

8282
function t7() {
8383
// error
84+
const { a0, b0 } = { a0: 1, b0: 1 };
85+
86+
// ok
8487
const { _a1, _b1 } = { _a1: 1, _b1: 1 };
8588

8689
// ok
@@ -130,9 +133,11 @@ function t6() {
130133
}
131134
function t7() {
132135
// error
133-
var _a = { _a1: 1, _b1: 1 }, _a1 = _a._a1, _b1 = _a._b1;
136+
var _a = { a0: 1, b0: 1 }, a0 = _a.a0, b0 = _a.b0;
137+
// ok
138+
var _b = { _a1: 1, _b1: 1 }, _a1 = _b._a1, _b1 = _b._b1;
134139
// ok
135-
var _b = { a2: 1, b2: 1 }, _a2 = _b.a2, _b2 = _b.b2;
140+
var _c = { a2: 1, b2: 1 }, _a2 = _c.a2, _b2 = _c.b2;
136141
// ok
137-
var _c = { _a3: 1, _b3: 1 }, _ignoreA3 = _c._a3, _ignoreB3 = _c._b3;
142+
var _d = { _a3: 1, _b3: 1 }, _ignoreA3 = _d._a3, _ignoreB3 = _d._b3;
138143
}

0 commit comments

Comments
 (0)