eslint-plugin-void
v1.0.3
Published
Eslint plugin to lint use of the void operator
Downloads
20
Readme
eslint-plugin-void
This plugin enables the rules side-effect
and arrow-body
that can be used together or separately to enforce a style of using the void-operator.
The rules are entirely --fixable so you can enforce them at any time with little effort even in a large codebase.
Usage
Install package.
npm install eslint-plugin-void --save-dev
In .eslintrc
"plugins": [
"void"
],
"rules": {
"void/side-effect": {severity},
"void/arrow-body": {severity}
}
Where severity is "error", "warn" or "off". You can omit "off" values.
side-effect
The void operator can be abused to write expressions that are nothing more than undefined
with extra steps.
const isUndefined = value => value === void 0;
This rule disallows use of void without a possible side effect.
--fix
Code can be automatically fixed with --fix
. The above example would be fixed to
const isUndefined = value => value === undefined;
If your code editor supports eslint suggestions, this rule will allow you to apply the fix through a suggestion.
Default
Examples of correct code for this rule
void functionCall();
void (object.field = value);
Examples of incorrect code for this rule
void 0;
void (() => functionCall());
allowTraps
The rule can be configured to allow arguments that may potentially trigger traps.
To allow all traps configure "allowTraps": true
.
rules: {
"void/side-effect": [{severity}, { "allowTraps": true }]
}
To allow select traps configure "allowTraps": {object}
.
rules: {
"void/side-effect": [
{severity},
{
"allowTraps": {
"get": {boolean},
"has": {boolean},
"ownKeys": {boolean}
}
}
]
}
You can omit false values from the configuration object.
Examples of correct code for this option
void object.field; // get
void 'field' in object; // has
void { ...object }; // ownKeys
arrow-body
The void operator can be used to stop arrow functions leaking return values.
const mutationCallback = value => void (object.field = value);
The same effect can be achieved with a function body.
const mutationCallback = value => { object.field = value; };
This rule enforces one or the other style.
--fix
Code can be automatically fixed with --fix
. The above examples would be fixed to
const mutationCallback = value => {object.field = value;};
and
const mutationCallback = value => void (object.field = value);
respectively.
If your code editor supports eslint suggestions, this rule will allow you to apply the fixes through a suggestion.
Default
By default this rule prefers void in all cases.
Examples of correct code for this rule
(value => void sideEffect(value));
(value => void (object.field = value));
(value => void (sideEffect(value), object.field = value));
(value => {
const input = value.trim();
sideEffect(value);
});
(value => sideEffect(value));
Examples of incorrect code for this rule
(value => { sideEffect(value); });
(value => { object.field = value; });
(value => {
sideEffect(value);
object.field = value;
});
multi
The multi
option allows you to define your preference for multiple side effects in an arrow function body.
Example of correct code for { "multi": "void" }
(value => void (sideEffect(value), object.field = value));
Example of incorrect code for { "multi": "void" }
(value => {
sideEffect(value);
object.field = value;
});
Example of correct code for { "multi": "body" }
(value => {
sideEffect(value);
object.field = value;
});
Example of incorrect code for { "multi": "body" }
(value => void (sideEffect(value), object.field = value));
{ multi: false }
Setting the multi
option to false will disable this rule for multiple side effect expressions in an arrow function body.
single
The single
option allows you to define your preference for a single side effect in an arrow function body.
Example of correct code for { "single": "void" }
(value => void sideEffect(value));
Example of incorrect code for { "single": "void" }
(value => {
sideEffect(value);
});
Example of correct code for { "single": "body" }
(value => {
sideEffect(value);
});
Example of incorrect code for { "single": "body" }
(value => void sideEffect(value));
{ single: false }
Setting the multi
option to false will disable this rule for a single side effect in an arrow function body.
Prefer body
To configure this rule to always prefer function body over the void operator configure both single
and multi
.
rules: {
"void/arrow-body": [{severity}, { "single": "body", "multi": "body" }]
}
When not to use this plugin
If you never want to use the void operator, use no-void instead.
Even though this plugin offers fixes that no-void
does not, the rules in this plugin conflict with no-void
so use of both is discouraged.