mirror of
https://git.proxmox.com/git/pve-eslint
synced 2025-10-04 15:48:21 +00:00

includes a (minimal) working wrapper Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
348 lines
5.8 KiB
Markdown
348 lines
5.8 KiB
Markdown
# Disallow empty functions (no-empty-function)
|
|
|
|
Empty functions can reduce readability because readers need to guess whether it's intentional or not.
|
|
So writing a clear comment for empty functions is a good practice.
|
|
|
|
```js
|
|
function foo() {
|
|
// do nothing.
|
|
}
|
|
```
|
|
|
|
Especially, the empty block of arrow functions might be confusing developers.
|
|
It's very similar to an empty object literal.
|
|
|
|
```js
|
|
list.map(() => {}); // This is a block, would return undefined.
|
|
list.map(() => ({})); // This is an empty object.
|
|
```
|
|
|
|
## Rule Details
|
|
|
|
This rule is aimed at eliminating empty functions.
|
|
A function will not be considered a problem if it contains a comment.
|
|
|
|
Examples of **incorrect** code for this rule:
|
|
|
|
```js
|
|
/*eslint no-empty-function: "error"*/
|
|
/*eslint-env es6*/
|
|
|
|
function foo() {}
|
|
|
|
var foo = function() {};
|
|
|
|
var foo = () => {};
|
|
|
|
function* foo() {}
|
|
|
|
var foo = function*() {};
|
|
|
|
var obj = {
|
|
foo: function() {},
|
|
|
|
foo: function*() {},
|
|
|
|
foo() {},
|
|
|
|
*foo() {},
|
|
|
|
get foo() {},
|
|
|
|
set foo(value) {}
|
|
};
|
|
|
|
class A {
|
|
constructor() {}
|
|
|
|
foo() {}
|
|
|
|
*foo() {}
|
|
|
|
get foo() {}
|
|
|
|
set foo(value) {}
|
|
|
|
static foo() {}
|
|
|
|
static *foo() {}
|
|
|
|
static get foo() {}
|
|
|
|
static set foo(value) {}
|
|
}
|
|
```
|
|
|
|
Examples of **correct** code for this rule:
|
|
|
|
```js
|
|
/*eslint no-empty-function: "error"*/
|
|
/*eslint-env es6*/
|
|
|
|
function foo() {
|
|
// do nothing.
|
|
}
|
|
|
|
var foo = function() {
|
|
// any clear comments.
|
|
};
|
|
|
|
var foo = () => {
|
|
bar();
|
|
};
|
|
|
|
function* foo() {
|
|
// do nothing.
|
|
}
|
|
|
|
var foo = function*() {
|
|
// do nothing.
|
|
};
|
|
|
|
var obj = {
|
|
foo: function() {
|
|
// do nothing.
|
|
},
|
|
|
|
foo: function*() {
|
|
// do nothing.
|
|
},
|
|
|
|
foo() {
|
|
// do nothing.
|
|
},
|
|
|
|
*foo() {
|
|
// do nothing.
|
|
},
|
|
|
|
get foo() {
|
|
// do nothing.
|
|
},
|
|
|
|
set foo(value) {
|
|
// do nothing.
|
|
}
|
|
};
|
|
|
|
class A {
|
|
constructor() {
|
|
// do nothing.
|
|
}
|
|
|
|
foo() {
|
|
// do nothing.
|
|
}
|
|
|
|
*foo() {
|
|
// do nothing.
|
|
}
|
|
|
|
get foo() {
|
|
// do nothing.
|
|
}
|
|
|
|
set foo(value) {
|
|
// do nothing.
|
|
}
|
|
|
|
static foo() {
|
|
// do nothing.
|
|
}
|
|
|
|
static *foo() {
|
|
// do nothing.
|
|
}
|
|
|
|
static get foo() {
|
|
// do nothing.
|
|
}
|
|
|
|
static set foo(value) {
|
|
// do nothing.
|
|
}
|
|
}
|
|
```
|
|
|
|
## Options
|
|
|
|
This rule has an option to allow specific kinds of functions to be empty.
|
|
|
|
* `allow` (`string[]`) - A list of kind to allow empty functions. List items are some of the following strings. An empty array (`[]`) by default.
|
|
* `"functions"` - Normal functions.
|
|
* `"arrowFunctions"` - Arrow functions.
|
|
* `"generatorFunctions"` - Generator functions.
|
|
* `"methods"` - Class methods and method shorthands of object literals.
|
|
* `"generatorMethods"` - Class methods and method shorthands of object literals with generator.
|
|
* `"getters"` - Getters.
|
|
* `"setters"` - Setters.
|
|
* `"constructors"` - Class constructors.
|
|
* `"asyncFunctions"` - Async functions.
|
|
* `"asyncMethods"` - Async class methods and method shorthands of object literals.
|
|
|
|
#### allow: functions
|
|
|
|
Examples of **correct** code for the `{ "allow": ["functions"] }` option:
|
|
|
|
```js
|
|
/*eslint no-empty-function: ["error", { "allow": ["functions"] }]*/
|
|
|
|
function foo() {}
|
|
|
|
var foo = function() {};
|
|
|
|
var obj = {
|
|
foo: function() {}
|
|
};
|
|
```
|
|
|
|
#### allow: arrowFunctions
|
|
|
|
Examples of **correct** code for the `{ "allow": ["arrowFunctions"] }` option:
|
|
|
|
```js
|
|
/*eslint no-empty-function: ["error", { "allow": ["arrowFunctions"] }]*/
|
|
/*eslint-env es6*/
|
|
|
|
var foo = () => {};
|
|
```
|
|
|
|
#### allow: generatorFunctions
|
|
|
|
Examples of **correct** code for the `{ "allow": ["generatorFunctions"] }` option:
|
|
|
|
```js
|
|
/*eslint no-empty-function: ["error", { "allow": ["generatorFunctions"] }]*/
|
|
/*eslint-env es6*/
|
|
|
|
function* foo() {}
|
|
|
|
var foo = function*() {};
|
|
|
|
var obj = {
|
|
foo: function*() {}
|
|
};
|
|
```
|
|
|
|
#### allow: methods
|
|
|
|
Examples of **correct** code for the `{ "allow": ["methods"] }` option:
|
|
|
|
```js
|
|
/*eslint no-empty-function: ["error", { "allow": ["methods"] }]*/
|
|
/*eslint-env es6*/
|
|
|
|
var obj = {
|
|
foo() {}
|
|
};
|
|
|
|
class A {
|
|
foo() {}
|
|
static foo() {}
|
|
}
|
|
```
|
|
|
|
#### allow: generatorMethods
|
|
|
|
Examples of **correct** code for the `{ "allow": ["generatorMethods"] }` option:
|
|
|
|
```js
|
|
/*eslint no-empty-function: ["error", { "allow": ["generatorMethods"] }]*/
|
|
/*eslint-env es6*/
|
|
|
|
var obj = {
|
|
*foo() {}
|
|
};
|
|
|
|
class A {
|
|
*foo() {}
|
|
static *foo() {}
|
|
}
|
|
```
|
|
|
|
#### allow: getters
|
|
|
|
Examples of **correct** code for the `{ "allow": ["getters"] }` option:
|
|
|
|
```js
|
|
/*eslint no-empty-function: ["error", { "allow": ["getters"] }]*/
|
|
/*eslint-env es6*/
|
|
|
|
var obj = {
|
|
get foo() {}
|
|
};
|
|
|
|
class A {
|
|
get foo() {}
|
|
static get foo() {}
|
|
}
|
|
```
|
|
|
|
#### allow: setters
|
|
|
|
Examples of **correct** code for the `{ "allow": ["setters"] }` option:
|
|
|
|
```js
|
|
/*eslint no-empty-function: ["error", { "allow": ["setters"] }]*/
|
|
/*eslint-env es6*/
|
|
|
|
var obj = {
|
|
set foo(value) {}
|
|
};
|
|
|
|
class A {
|
|
set foo(value) {}
|
|
static set foo(value) {}
|
|
}
|
|
```
|
|
|
|
#### allow: constructors
|
|
|
|
Examples of **correct** code for the `{ "allow": ["constructors"] }` option:
|
|
|
|
```js
|
|
/*eslint no-empty-function: ["error", { "allow": ["constructors"] }]*/
|
|
/*eslint-env es6*/
|
|
|
|
class A {
|
|
constructor() {}
|
|
}
|
|
```
|
|
|
|
#### allow: asyncFunctions
|
|
|
|
Examples of **correct** code for the `{ "allow": ["asyncFunctions"] }` options:
|
|
|
|
```js
|
|
/*eslint no-empty-function: ["error", { "allow": ["asyncFunctions"] }]*/
|
|
/*eslint-env es2017*/
|
|
|
|
async function a(){}
|
|
```
|
|
|
|
#### allow: asyncMethods
|
|
|
|
Examples of **correct** code for the `{ "allow": ["asyncMethods"] }` options:
|
|
|
|
```js
|
|
/*eslint no-empty-function: ["error", { "allow": ["asyncMethods"] }]*/
|
|
/*eslint-env es2017*/
|
|
|
|
var obj = {
|
|
async foo() {}
|
|
};
|
|
|
|
class A {
|
|
async foo() {}
|
|
static async foo() {}
|
|
}
|
|
```
|
|
|
|
## When Not To Use It
|
|
|
|
If you don't want to be notified about empty functions, then it's safe to disable this rule.
|
|
|
|
## Related Rules
|
|
|
|
* [no-empty](./no-empty.md)
|