Disallow Unused Variables (no-unused-vars)
Variables that are declared and not used anywhere in the code are most likely an error due to incomplete refactoring. Such variables take up space in the code and can lead to confusion by readers.
Rule Details
This rule is aimed at eliminating unused variables, functions and variables in parameters of functions, as such, warns when one is found.
A variable is considered to be used when it:
- Represents a function that is called (
doSomething()) - Is read (
var y = x) - Is passed into a function as an argument (
doSomething(x))
A variable is not considered read if it is only ever assigned to (var x = 5) or declared.
The following patterns are considered problems:
/*eslint no-unused-vars: 2*/
/*global some_unsed_var */ /*error 'some_unsed_var' is defined but never used*/
//It checks variables you have defined as global
some_unsed_var = 42;
var x; /*error 'x' is defined but never used*/
var y = 10; /*error 'y' is defined but never used*/
y = 5;
// By default, unused arguments cause warnings.
(function(foo) { /*error 'foo' is defined but never used*/
return 5;
})();
// Unused recursive functions also cause warnings.
function fact(n) { /*error 'fact' is defined but never used*/
if (n < 2) return 1;
return n * fact(n - 1);
}
The following patterns are not considered problems:
/*eslint no-unused-vars: 2*/
var x = 10;
alert(x);
// foo is considered used here
myFunc(function foo() {
// ...
}.bind(this));
(function(foo) {
return foo;
})();
Exporting Variables
In environments outside of CommonJS or ECMAScript modules, you may use var to create a global variable that may be used by other scripts. You can use the /* exported variableName */ comment block to indicate that this variable is being exported and therefore should not be considered unused. Note that /* exported */ has no effect when used with the node or commonjs environments or when ecmaFeatures.modules or ecmaFeatures.globalReturn are true.
Options
By default this rule is enabled with all option for variables and after-used for arguments.
{
"rules": {
"no-unused-vars": [2, {"vars": "all", "args": "after-used"}]
}
}
vars
This option has two settings:
allchecks all variables for usage, including those in the global scope. This is the default setting.localchecks only that locally-declared variables are used but will allow global variables to be unused.
args
This option has three settings:
all- all named arguments must be used.after-used- only the last argument must be used. This allows you, for instance, to have two named parameters to a function and as long as you use the second argument, ESLint will not warn you about the first. This is the default setting.none- do not check arguments.
with { "args": "all" }
/*eslint no-unused-vars: [2, { "args": "all" }]*/
(function(foo, bar, baz) { /*error 'foo' is defined but never used*/ /*error 'baz' is defined but never used*/
return bar;
})();
with { "args": "after-used" }
/*eslint no-unused-vars: [2, { "args": "after-used" }]*/
(function(foo, bar, baz) { /*error 'baz' is defined but never used*/
return bar;
})();
with { "args": "none" }
/*eslint no-unused-vars: [2, { "args": "none" }]*/
(function(foo, bar, baz) {
return bar;
})();
Ignore identifiers that match specific patterns
varsIgnorePattern- all variables that match this regexp pattern will not be checked.argsIgnorePattern- all arguments that match this regexp pattern will not be checked.
Examples
-
Ignore all unused function arguments with a leading underscore
{ "rules": { "no-unused-vars": [2, {"args": "after-used", "argsIgnorePattern": "^_"}] } }With this configuration, this rule will not warn about the following code:
/*eslint no-unused-vars: [2, {"args": "after-used", "argsIgnorePattern": "^_"}]*/ function foo(x, _y) { return x + 1; } foo(); -
Ignore all unused variables which contain the term
ignoredorIgnored:{ "ecmaFeatures": { "destructuring": true }, "rules": { "no-unused-vars": [2, {"vars": "all", "varsIgnorePattern": "[iI]gnored"}] } }With this configuration, this rule will not warn about the following code:
/*eslint no-unused-vars: [2, {"args": "after-used", "varsIgnorePattern": "[iI]gnored"}]*/ var [ firstItemIgnored, secondItem ] = items; console.log(secondItem);
When Not To Use It
If you don’t want to be notified about unused variables or function arguments, you can safely turn this rule off.
Version
This rule was introduced in ESLint 0.0.9.
ESLint