@@ -440,7 +440,20 @@ fn test() {
440440 Some (
441441 serde_json:: json!( [ { "destructuredArrayIgnorePattern" : "^_" , "reportUsedIgnorePattern" : true } ] ) ,
442442 ) ,
443- ) , // { "ecmaVersion": 6 }
443+ ) , // { "ecmaVersion": 6 },
444+ (
445+ "using resource = getResource();
446+ resource;" ,
447+ None ,
448+ ) , // { "sourceType": "module", "ecmaVersion": 2026, },
449+ (
450+ "using resource = getResource();" ,
451+ Some ( serde_json:: json!( [ { "ignoreUsingDeclarations" : true } ] ) ) ,
452+ ) , // { "sourceType": "module", "ecmaVersion": 2026, },
453+ (
454+ "await using resource = getResource();" ,
455+ Some ( serde_json:: json!( [ { "ignoreUsingDeclarations" : true } ] ) ) ,
456+ ) , // { "sourceType": "module", "ecmaVersion": 2026, }
444457 ] ;
445458
446459 let fail = vec ! [
@@ -589,6 +602,8 @@ fn test() {
589602 ( "(function(obj) { var name; for ( name in obj ) { i(); return; } })({});" , None ) ,
590603 ( "(function(obj) { var name; for ( name in obj ) { } })({});" , None ) ,
591604 ( "(function(obj) { for ( var name in obj ) { } })({});" , None ) ,
605+ ( "for ( var { foo } in bar ) { }" , None ) , // { "ecmaVersion": 6 },
606+ ( "for ( var [ foo ] in bar ) { }" , None ) , // { "ecmaVersion": 6 },
592607 ( "(function(iter) { var name; for ( name of iter ) { i(); return; } })({});" , None ) , // { "ecmaVersion": 6 },
593608 ( "(function(iter) { var name; for ( name of iter ) { } })({});" , None ) , // { "ecmaVersion": 6 },
594609 ( "(function(iter) { for ( var name of iter ) { } })({});" , None ) , // { "ecmaVersion": 6 },
@@ -725,6 +740,7 @@ fn test() {
725740 ( "var a = 2, b = 4; a = a * 2 + b;" , None ) ,
726741 // https://github.com/oxc-project/oxc/issues/4436
727742 ( "function foo(cb) { cb = function(a) { cb(1 + a); }; bar(not_cb); } foo();" , None ) ,
743+ // ("function foo(cb) { cb = function(a) { return cb(1 + a); }(); } foo();", None),
728744 ( "function foo(cb) { cb = (function(a) { cb(1 + a); }, cb); } foo();" , None ) ,
729745 // ("function foo(cb) { cb = (0, function(a) { cb(1 + a); }); } foo();", None),
730746 (
@@ -975,6 +991,139 @@ fn test() {
975991 " ,
976992 Some ( serde_json:: json!( [ { "argsIgnorePattern" : "ignored" , "varsIgnorePattern" : "_" } ] ) ) ,
977993 ) , // { "ecmaVersion": 2015 }
994+ ( "const [a, b, c] = foo; alert(a + c);" , None ) , // { "ecmaVersion": 6 },
995+ ( "const [a = aDefault] = foo;" , None ) , // { "ecmaVersion": 6 },
996+ ( "const [[a = aDefault]]= foo;" , None ) , // { "ecmaVersion": 6 },
997+ ( "const [[a = aDefault], b]= foo;" , None ) , // { "ecmaVersion": 6 },
998+ ( "const [a = aDefault, b] = foo; alert(b);" , None ) , // { "ecmaVersion": 6 },
999+ ( "function a([a = aDefault]) { } a();" , None ) , // { "ecmaVersion": 6 },
1000+ ( "function a([[a = aDefault]]) { } a();" , None ) , // { "ecmaVersion": 6 },
1001+ ( "function a([a = aDefault, b]) { alert(b); } a();" , None ) , // { "ecmaVersion": 6 },
1002+ ( "function a([[a = aDefault, b]]) { alert(b); } a();" , None ) , // { "ecmaVersion": 6 },
1003+ ( "const { a: a1 } = foo" , None ) , // { "ecmaVersion": 6 },
1004+ ( "const { a: a1, b: b1 } = foo; alert(b1);" , None ) , // { "ecmaVersion": 6 },
1005+ ( "const { a: a1, b: b1 } = foo; alert(a1);" , None ) , // { "ecmaVersion": 6 },
1006+ ( "function a({ a: a1 }) {} a();" , None ) , // { "ecmaVersion": 6 },
1007+ ( "const { a: a1 = aDefault } = foo;" , None ) , // { "ecmaVersion": 6 },
1008+ ( "const [{ a: a1 = aDefault }] = foo;" , None ) , // { "ecmaVersion": 6 },
1009+ ( "const { a = aDefault } = foo;" , None ) , // { "ecmaVersion": 6 },
1010+ ( "const { a = aDefault, b } = foo; alert(b);" , None ) , // { "ecmaVersion": 6 },
1011+ ( "const { a, b = bDefault } = foo; alert(a);" , None ) , // { "ecmaVersion": 6 },
1012+ ( "const { a, b = bDefault, c } = foo; alert(a + c);" , None ) , // { "ecmaVersion": 6 },
1013+ ( "const { [key]: a } = foo;" , None ) , // { "ecmaVersion": 6 },
1014+ ( "const [...{ a, b }] = array; alert(a);" , None ) , // { "ecmaVersion": 2023 },
1015+ ( "function foo (...rest) {} foo();" , None ) , // { "ecmaVersion": 2023 },
1016+ ( "function foo (a, ...rest) { alert(a); } foo();" , None ) , // { "ecmaVersion": 2023 },
1017+ ( "const {...rest} = foo;" , None ) , // { "ecmaVersion": 2023 },
1018+ ( "const {a, ...rest} = foo; alert(a);" , None ) , // { "ecmaVersion": 2023 },
1019+ ( "const {...rest} = foo, a = bar; alert(a);" , None ) , // { "ecmaVersion": 2023 },
1020+ ( "const a = bar, {...rest} = foo; alert(a);" , None ) , // { "ecmaVersion": 2023 },
1021+ ( "function foo ({...rest}) { } foo();" , None ) , // { "ecmaVersion": 2023 },
1022+ ( "function foo (a, {...rest}) { alert(a); } foo();" , None ) , // { "ecmaVersion": 2023 },
1023+ ( "function foo ({...rest}, a) { alert(a); } foo();" , None ) , // { "ecmaVersion": 2023 },
1024+ ( "const [...rest] = foo;" , None ) , // { "ecmaVersion": 2023 },
1025+ ( "const [[...rest]] = foo;" , None ) , // { "ecmaVersion": 2023 },
1026+ ( "const [a, ...rest] = foo; alert(a);" , None ) , // { "ecmaVersion": 2023 },
1027+ ( "function foo ([...rest]) { } foo();" , None ) , // { "ecmaVersion": 2023 },
1028+ ( "const [a, ...{ b }] = array; alert(a);" , None ) , // { "ecmaVersion": 2023 },
1029+ ( "const [[a, ...{ b }]] = array; alert(a);" , None ) , // { "ecmaVersion": 2023 },
1030+ ( "const [...[a]] = array;" , None ) , // { "ecmaVersion": 2023 },
1031+ ( "const [[...[a]]] = array;" , None ) , // { "ecmaVersion": 2023 },
1032+ ( "const [...[a, b]] = array; alert(a);" , None ) , // { "ecmaVersion": 2023 },
1033+ ( "const [a, ...[b]] = array; alert(a);" , None ) , // { "ecmaVersion": 2023 },
1034+ ( "const [[a, ...[b]]] = array; alert(a);" , None ) , // { "ecmaVersion": 2023 },
1035+ ( "const [a, ...[b]] = array; alert(b);" , None ) , // { "ecmaVersion": 2023 },
1036+ ( "const [a, ...[[ b ]]] = array; alert(a);" , None ) , // { "ecmaVersion": 2023 },
1037+ ( "const [a, ...[{ b }]] = array; alert(a);" , None ) , // { "ecmaVersion": 2023 },
1038+ ( "function foo([a, ...[[ b ]]]) {} foo();" , None ) , // { "ecmaVersion": 2023 },
1039+ ( "function foo([a, ...[{ b }]]) {} foo();" , None ) , // { "ecmaVersion": 2023 },
1040+ ( "function foo(...[[ a ]]) {} foo();" , None ) , // { "ecmaVersion": 2023 },
1041+ ( "function foo(...[{ a }]) {} foo();" , None ) , // { "ecmaVersion": 2023 },
1042+ ( "function foo(a, ...[b]) { alert(a); } foo();" , None ) , // { "ecmaVersion": 2023 },
1043+ ( "const [a, [b]] = array; alert(a);" , None ) , // { "ecmaVersion": 2023 },
1044+ ( "const [[a, [b]]] = array; alert(a);" , None ) , // { "ecmaVersion": 2023 },
1045+ ( "const [a, [[b]]] = array; alert(a);" , None ) , // { "ecmaVersion": 2023 },
1046+ ( "function a([[b]]) {} a();" , None ) , // { "ecmaVersion": 2023 },
1047+ ( "function a([[b], c]) { alert(c); } a();" , None ) , // { "ecmaVersion": 2023 },
1048+ ( "const [{b}, a] = array; alert(a);" , None ) , // { "ecmaVersion": 2023 },
1049+ ( "const [[{b}, a]] = array; alert(a);" , None ) , // { "ecmaVersion": 2023 },
1050+ ( "const [[[{b}], a]] = array; alert(a);" , None ) , // { "ecmaVersion": 2023 },
1051+ ( "function a([{b}]) {} a();" , None ) , // { "ecmaVersion": 2023 },
1052+ ( "function a([{b}, c]) { alert(c); } a();" , None ) , // { "ecmaVersion": 2023 },
1053+ ( "const { a: { b }, c } = foo; alert(c);" , None ) , // { "ecmaVersion": 2023 },
1054+ ( "const { c, a: { b } } = foo; alert(c);" , None ) , // { "ecmaVersion": 2023 },
1055+ ( "const { a: { b: { c }, d } } = foo; alert(d);" , None ) , // { "ecmaVersion": 2023 },
1056+ ( "const { a: { b: { c: { e } }, d } } = foo; alert(d);" , None ) , // { "ecmaVersion": 2023 },
1057+ ( "const [{ a: { b }, c }] = foo; alert(c);" , None ) , // { "ecmaVersion": 2023 },
1058+ ( "const { a: [{ b }]} = foo;" , None ) , // { "ecmaVersion": 2023 },
1059+ ( "const { a: [[ b ]]} = foo;" , None ) , // { "ecmaVersion": 2023 },
1060+ ( "const [{ a: [{ b }]}] = foo;" , None ) , // { "ecmaVersion": 2023 },
1061+ ( "const { a: [{ b }], c} = foo; alert(c);" , None ) , // { "ecmaVersion": 2023 },
1062+ ( "function foo({ a: [{ b }]}) {} foo();" , None ) , // { "ecmaVersion": 2023 },
1063+ ( "function foo({ a: [[ b ]]}) {} foo();" , None ) , // { "ecmaVersion": 2023 },
1064+ ( "let a = foo, b = 'bar'; alert(b);" , None ) , // { "ecmaVersion": 2023 },
1065+ ( "let a = foo, b = 'bar'; alert(a);" , None ) , // { "ecmaVersion": 2023 },
1066+ ( "let { a } = foo, bar = 'hello'; alert(bar);" , None ) , // { "ecmaVersion": 2023 },
1067+ ( "let bar = 'hello', { a } = foo; alert(bar);" , None ) , // { "ecmaVersion": 2023 },
1068+ ( "import a from 'module';" , None ) , // { "ecmaVersion": 6, "sourceType": "module" },
1069+ ( "import * as foo from 'module';" , None ) , // { "ecmaVersion": 6, "sourceType": "module" },
1070+ ( "import a, * as foo from 'module'; a();" , None ) , // { "ecmaVersion": 6, "sourceType": "module" },
1071+ ( "import a, * as foo from 'module'; foo.hello;" , None ) , // { "ecmaVersion": 6, "sourceType": "module" },
1072+ ( "import { a } from 'module';" , None ) , // { "ecmaVersion": 6, "sourceType": "module" },
1073+ ( "import { a, b } from 'module'; alert(b);" , None ) , // { "ecmaVersion": 6, "sourceType": "module" },
1074+ ( "import { a, b } from 'module'; alert(a);" , None ) , // { "ecmaVersion": 6, "sourceType": "module" },
1075+ ( "import { a as foo } from 'module';" , None ) , // { "ecmaVersion": 6, "sourceType": "module" },
1076+ ( "import { a as foo, b } from 'module'; alert(b);" , None ) , // { "ecmaVersion": 6, "sourceType": "module" },
1077+ ( "import { a, b as foo } from 'module'; alert(a);" , None ) , // { "ecmaVersion": 6, "sourceType": "module" },
1078+ ( "import { default as foo, a } from 'module'; alert(a);" , None ) , // { "ecmaVersion": 6, "sourceType": "module" },
1079+ ( "import foo, { a } from 'module'; alert(a);" , None ) , // { "ecmaVersion": 6, "sourceType": "module" },
1080+ ( "import foo, { a } from 'module'; foo();" , None ) , // { "ecmaVersion": 6, "sourceType": "module" },
1081+ ( "let a; a = foo;" , None ) , // { "ecmaVersion": 6 },
1082+ ( "array.forEach(a => {})" , None ) , // { "ecmaVersion": 6 },
1083+ ( "if (foo()) var bar;" , None ) , // { "ecmaVersion": 6 },
1084+ ( "for (;;) var foo;" , None ) , // { "ecmaVersion": 6 },
1085+ ( "for (a in b) var foo;" , None ) , // { "ecmaVersion": 6 },
1086+ ( "for (a of b) var foo;" , None ) , // { "ecmaVersion": 6 },
1087+ ( "while (a) var foo;" , None ) , // { "ecmaVersion": 6 },
1088+ ( "do var foo; while (b);" , None ) , // { "ecmaVersion": 6 },
1089+ ( "with (a) var foo;" , None ) , // { "ecmaVersion": 6 },
1090+ ( "var a;'use strict';b(00);" , None ) ,
1091+ ( "var [a] = foo;'use strict';b(00);" , None ) , // { "ecmaVersion": 6 },
1092+ ( "var [...a] = foo;'use strict';b(00);" , None ) , // { "ecmaVersion": 6 },
1093+ ( "var {a} = foo;'use strict';b(00);" , None ) , // { "ecmaVersion": 6 },
1094+ (
1095+ "console.log('foo')
1096+ var a
1097+ +b > 0 ? bar() : baz()" ,
1098+ None ,
1099+ ) ,
1100+ (
1101+ "console.log('foo')
1102+ var [a] = foo;
1103+ +b > 0 ? bar() : baz()" ,
1104+ None ,
1105+ ) , // { "ecmaVersion": 6 },
1106+ (
1107+ "console.log('foo')
1108+ var {a} = foo;
1109+ +b > 0 ? bar() : baz()" ,
1110+ None ,
1111+ ) , // { "ecmaVersion": 6 },
1112+ (
1113+ "let x;
1114+ () => x = 1;" ,
1115+ None ,
1116+ ) , // { "ecmaVersion": 6 },
1117+ (
1118+ "let [a = 1] = arr;
1119+ a = 2;" ,
1120+ None ,
1121+ ) , // { "ecmaVersion": 6 },
1122+ // ("function foo(a = 1, b){alert(b);} foo();", None), // { "ecmaVersion": 6 },
1123+ ( "function foo(a = 1) {a = 2;} foo();" , None ) , // { "ecmaVersion": 6 },
1124+ ( "function foo(a = 1, b) {a = 2;} foo();" , None ) , // { "ecmaVersion": 6 },
1125+ ( "using resource = getResource();" , None ) , // { "sourceType": "module", "ecmaVersion": 2026, },
1126+ ( "await using resource = getResource();" , None ) , // { "sourceType": "module", "ecmaVersion": 2026, }
9781127 ] ;
9791128
9801129 Tester :: new ( NoUnusedVars :: NAME , NoUnusedVars :: PLUGIN , pass, fail)
0 commit comments