@@ -34,9 +34,13 @@ describe("prefer-number-isnan", () => {
3434 valid : [
3535 `function isNaN(value) { return false; } isNaN(value);` ,
3636 `const isNaN = Number.isNaN; isNaN(value);` ,
37+ `import { isNaN } from "lodash"; isNaN(value);` ,
3738 `const globalThis = { isNaN(value) { return value; } }; globalThis.isNaN(value);` ,
3839 `const window = { isNaN(value) { return value; } }; window["isNaN"](value);` ,
3940 `const global = { isNaN(value) { return value; } }; global.isNaN(value);` ,
41+ `import { globalThis } from "./global-shim"; globalThis.isNaN(value);` ,
42+ `import { window } from "./browser-shim"; window.isNaN(value);` ,
43+ `import { global } from "./server-shim"; global["isNaN"](value);` ,
4044 // Dynamic computed access — identifier property reference, not string literal "isNaN"
4145 `globalThis[isNaN](value);` ,
4246 ] ,
@@ -99,4 +103,20 @@ describe("prefer-number-isnan", () => {
99103 ] ,
100104 } ) ;
101105 } ) ;
106+
107+ it ( "invalid: global isNaN() is still flagged in ESM mode without a shadow" , ( ) => {
108+ esmRuleTester . run ( "prefer-number-isnan" , preferNumberIsNanRule , {
109+ valid : [ ] ,
110+ invalid : [
111+ {
112+ code : `isNaN(value);` ,
113+ errors : [ { messageId : "preferNumberIsNaN" , suggestions : [ { messageId : "replaceWithNumberIsNaN" , output : `Number.isNaN(value);` } ] } ] ,
114+ } ,
115+ {
116+ code : `window.isNaN(value);` ,
117+ errors : [ { messageId : "preferNumberIsNaN" , suggestions : [ { messageId : "replaceWithNumberIsNaN" , output : `Number.isNaN(value);` } ] } ] ,
118+ } ,
119+ ] ,
120+ } ) ;
121+ } ) ;
102122} ) ;
0 commit comments