Prevent JSHint warning that 'functionName is defined but never used'
Solution 1
To avoid the warning
defined but never used
in jslint in your javascript add comments like:
/*exported formValidationSetup, refreshErrorMessages */
In jshint and jslint you can set the unused option to false:
/*jshint unused:false*/
See Options
Solution 2
I had this problem with should
and expect
in Chai tests. I ended up with this pattern:
'use strict';
var request = require('supertest');
var should = require('chai').should(); // jshint ignore:line
var expect = require('chai').expect; // jshint ignore:line
process.env.NODE_ENV = 'test';
var appPromise = require('./index');
describe('GET /r_u_up', function() {
it('respond with 204', function(done) {
appPromise.then(function(app) {
request(app)
.get('/r_u_up')
.expect(204, done);
});
});
});
Solution 3
You can simply use
"unused": false,
in your .jshintrc
Solution 4
Interestingly, adding 'use strict';
inside the IIFE suppresses the error. Not sure why though.
Solution 5
A better way not touching the Gruntfile.js
in a typical Yoeman setup is to edit the .jshintrc
file (a hidden file in Unix system). And update the content as the following:
{
"curly": true,
"eqeqeq": true,
"immed": true,
"latedef": true,
"newcap": true,
"noarg": true,
"sub": true,
"undef": true,
"unused": false, // the change is here
"boss": true,
"eqnull": true,
"node": true
}
set the "unused"
to false
.
Related videos on Youtube
Undistraction
Updated on March 20, 2020Comments
-
Undistraction about 4 years
I have just started using JSHint (through the Sublime-Linter package for Sublime Text 2). I would like to suppress its warnings regarding functions that are used before they are defined, as I see no problem with using function definitions like this. For example, the following code generates warnings:
(function($){ $(document).ready(function() { formValidationSetup(); refreshErrorMessages(); }); function formValidationSetup() { } function refreshErrorMessages() { } })(jQuery);
The warnings:
- formValidationSetup is defined but never used
- refreshErrorMessages is defined but never used
I've tried setting undef to false in the JSHint options, but I'm still getting these errors. Is there another option I should be setting? Form the JSLint docs for undef:
true if variables and functions need not be declared before used. This is not available in strict mode.
-
Markus Unterwaditzer over 11 yearsYou should take that as a hint to define the functions before the event. Not that it matters technically, but it's easier to understand the code that way.
-
Undistraction over 11 yearsSurely that's just a matter of preference. I find it easier to understand like this as there is less code.
-
Markus Unterwaditzer over 11 yearsHow is there more code if you just move the function definitions to the top?
-
Undistraction over 11 yearsSorry. Misunderstood you. You're right. Same amount of code. Just more logical to me to have the initialiser first.
-
Mohamed Bana almost 10 yearsWhat about all the other unused variables?
unused:false
from my understanding will cause it to ignore all unused behaviour. I don't think this is what's trying to be achieved. -
sampathsris over 9 yearsWelcome to Stack Overflow. Consider formatting code elements in your answer using indented code blocks or preformatted text: stackoverflow.com/editing-help#code
-
Michael Cole about 9 years
// jshint ignore:line
will ignore that one line. -
Ken Ingram over 7 yearsSuperior answer. Thank you.
-
DPM over 6 yearsunused is not valid in jslint