Skip to content

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

@dominikschreiber

Description

@dominikschreiber

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?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions