mirror of
https://git.proxmox.com/git/pve-eslint
synced 2025-10-12 21:58:07 +00:00

includes a (minimal) working wrapper Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
109 lines
3.0 KiB
Markdown
109 lines
3.0 KiB
Markdown
# Require IIFEs to be Wrapped (wrap-iife)
|
|
|
|
You can immediately invoke function expressions, but not function declarations. A common technique to create an immediately-invoked function expression (IIFE) is to wrap a function declaration in parentheses. The opening parentheses causes the contained function to be parsed as an expression, rather than a declaration.
|
|
|
|
```js
|
|
// function expression could be unwrapped
|
|
var x = function () { return { y: 1 };}();
|
|
|
|
// function declaration must be wrapped
|
|
function () { /* side effects */ }(); // SyntaxError
|
|
```
|
|
|
|
## Rule Details
|
|
|
|
This rule requires all immediately-invoked function expressions to be wrapped in parentheses.
|
|
|
|
## Options
|
|
|
|
This rule has two options, a string option and an object option.
|
|
|
|
String option:
|
|
|
|
* `"outside"` enforces always wrapping the *call* expression. The default is `"outside"`.
|
|
* `"inside"` enforces always wrapping the *function* expression.
|
|
* `"any"` enforces always wrapping, but allows either style.
|
|
|
|
Object option:
|
|
|
|
* `"functionPrototypeMethods": true` additionally enforces wrapping function expressions invoked using `.call` and `.apply`. The default is `false`.
|
|
|
|
### outside
|
|
|
|
Examples of **incorrect** code for the default `"outside"` option:
|
|
|
|
```js
|
|
/*eslint wrap-iife: ["error", "outside"]*/
|
|
|
|
var x = function () { return { y: 1 };}(); // unwrapped
|
|
var x = (function () { return { y: 1 };})(); // wrapped function expression
|
|
```
|
|
|
|
Examples of **correct** code for the default `"outside"` option:
|
|
|
|
```js
|
|
/*eslint wrap-iife: ["error", "outside"]*/
|
|
|
|
var x = (function () { return { y: 1 };}()); // wrapped call expression
|
|
```
|
|
|
|
### inside
|
|
|
|
Examples of **incorrect** code for the `"inside"` option:
|
|
|
|
```js
|
|
/*eslint wrap-iife: ["error", "inside"]*/
|
|
|
|
var x = function () { return { y: 1 };}(); // unwrapped
|
|
var x = (function () { return { y: 1 };}()); // wrapped call expression
|
|
```
|
|
|
|
Examples of **correct** code for the `"inside"` option:
|
|
|
|
```js
|
|
/*eslint wrap-iife: ["error", "inside"]*/
|
|
|
|
var x = (function () { return { y: 1 };})(); // wrapped function expression
|
|
```
|
|
|
|
### any
|
|
|
|
Examples of **incorrect** code for the `"any"` option:
|
|
|
|
```js
|
|
/*eslint wrap-iife: ["error", "any"]*/
|
|
|
|
var x = function () { return { y: 1 };}(); // unwrapped
|
|
```
|
|
|
|
Examples of **correct** code for the `"any"` option:
|
|
|
|
```js
|
|
/*eslint wrap-iife: ["error", "any"]*/
|
|
|
|
var x = (function () { return { y: 1 };}()); // wrapped call expression
|
|
var x = (function () { return { y: 1 };})(); // wrapped function expression
|
|
```
|
|
|
|
### functionPrototypeMethods
|
|
|
|
Examples of **incorrect** code for this rule with the `"inside", { "functionPrototypeMethods": true }` options:
|
|
|
|
```js
|
|
/* eslint wrap-iife: [2, "inside", { functionPrototypeMethods: true }] */
|
|
|
|
var x = function(){ foo(); }()
|
|
var x = (function(){ foo(); }())
|
|
var x = function(){ foo(); }.call(bar)
|
|
var x = (function(){ foo(); }.call(bar))
|
|
```
|
|
|
|
Examples of **correct** code for this rule with the `"inside", { "functionPrototypeMethods": true }` options:
|
|
|
|
```js
|
|
/* eslint wrap-iife: [2, "inside", { functionPrototypeMethods: true }] */
|
|
|
|
var x = (function(){ foo(); })()
|
|
var x = (function(){ foo(); }).call(bar)
|
|
```
|