Skip to content

Not every requestIdleCallback() reported as not supported in Safari #648

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
dominikschreiber opened this issue Mar 6, 2025 · 0 comments

Comments

@dominikschreiber
Copy link

dominikschreiber commented Mar 6, 2025

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.

// window.requestIdleCallback()
{
  "type": "CallExpression",
  "callee": {
    "type": "MemberExpression",
    "object": {"type": "Identifier", "name": "window"},
    "property": {"type": "Identifier", "name": "requestIdleCallback"}
  }
}

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?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant