eslint: wrap-iife doesn't catch .call / .apply. JSCS does

Tell us about your environment

  • ESLint Version: 3.5.0
  • Node Version: N/A
  • npm Version: N/A

What parser (default, Babel-ESLint, etc.) are you using? Default

Please show your full configuration:

/* global window */
/* eslint wrap-iife: ["error", "inside"] */
window.foo = (function() { return 1; })();
window.bar = function() { return 3; }.call(this, arg1);
window.baz = function() { return d; }.apply(this, args);

The following passes. window.foo is fine because it is wrapped in parens, but the others don’t require it.

I’d expect that the functions that are called using .call and .apply should also be wrapped in parens. That is the behavior of the corresponding rule in JSCS and I’d like to keep that behavior while converting: http://jscs.info/rule/requireParenthesesAroundIIFE

Proposal

The current proposal is to add a new boolean option called functionPrototypeMethods that will lint call and apply using the same inside or outside value. For example:

/* eslint wrap-iife: [2, "outside", { functionPrototypeMethods: true }] */

(function(){ foo(); }()) // ok
(function(){ foo(); }.call(bar)) // ok

(function(){ foo(); }).call(bar) // error, expected parens to be outside but they were inside

About this issue

  • Original URL
  • State: closed
  • Created 8 years ago
  • Reactions: 3
  • Comments: 21 (21 by maintainers)

Commits related to this issue

Most upvoted comments

@TheSavior This issue is accepted now, so feel free to start implementing this (assuming you’re still interested in doing so).

Updated the initial post with the current proposal