WebStorm does a very good job of resolving functions which are returned from CommonJS modules as methods (and reads JsDoc associated with them), like for instance:
// utils/valid.js
/**
* Returns true no matter what.
* @param {HTMLElement} element
* @return {boolean}
*/
function isValid(element) {
return true;
}
module.exports.isValid = isValid; // exports property
Such a function is then correctly provided in code completion and inline documentation mechanisms when such a module is required in another file.
// main.js
var isValid = require('./utils/isValid').isValid; // works well
However, this fails when the function is returned directly as module exports
// utils/valid.js
module.exports = isValid; // exports object is a function
So when such a module is required, WebStorm seems to not know what it is:
// main.js
var isValid = require('./utils/isValid'); // doesn't work
This is very common in our project and changing all module.exports
to plain objects is not an option. Is there any way for fix this issue in WebStorm?