-
-
Notifications
You must be signed in to change notification settings - Fork 115
Description
After #588 (which closed #554), eslint-plugin-compat correctly detects some usages of requestIdleCallback() (which is still not supported in Safari 18.3), but not all:
// ✓ correctly detected as not supported:
window.requestIdleCallback();
// ⨉ not detected
requestIdleCallback();
// ⨉ not detected
const mywindow = window;
mywindow.requestIdleCallback();
// ⨉ not detected
document.querySelector('iframe').contentWindow.requestIdleCallback()I can only speculate that it is a performance optimization to match only CallExpressions where the callee is a MemberExpression with the object being an Identifier named "window" and the property also being an Identifier named "requestIdleCallback", i.e.
Matching, on the one hand, CallExpressions with an Identifier named "window" being the direct callee, like
// requestIdleCallback()
{
"type": "CallExpression",
"callee": {"type": "Identifier", "name": "requestIdleCallback"}
}or, on the other hand, CallExpressions where the callee is a MemberExpression with the property being an Identifier named "requestIdleCallback", no matter what the object is, like
// mywindow.requestIdleCallback()
// document.querySelector('iframe').contentWindow.requestIdleCallback();
{
"type": "CallExpression",
"callee": {
"type": "MemberExpression",
"property": {"type": "Identifier", "name": "requestIdleCallback"}
}
}or, maybe too broad, just matching the Identifier "requestIdleCallback" in general, without considering CallExpressions, like
// requestIdleCallback
{"type": "Identifier", "name": "requestIdleCallback"}could solve this.
(On a side note: what an awesome project, thank you so much for this effort!)
Edit: should this issue have been directly reported for ast-metadata-inferer instead?