11module . exports = enforceExistence ;
22module . exports . scopes = [ 'function' ] ;
33module . exports . options = {
4- enforceExistence : { allowedValues : [ true ] }
4+ enforceExistence : { allowedValues : [ true , 'exceptExports' ] }
55} ;
66
77/**
@@ -10,15 +10,28 @@ module.exports.options = {
1010 * @param {Function } err
1111 */
1212function enforceExistence ( node , err ) {
13+ var reportExports = this . _options . enforceExistence !== 'exceptExports' ;
14+
1315 // if function is not anonymous or in variabledeclarator or in assignmentexpression
1416 var parentNode = node . parentNode || { } ;
1517 var needCheck = node . id ||
1618 parentNode . type === 'VariableDeclarator' ||
1719 parentNode . type === 'Property' ||
1820 parentNode . type === 'AssignmentExpression' && parentNode . operator === '=' ;
1921
20- // and report unless jsdoc exists
21- if ( needCheck && ! node . jsdoc ) {
22- err ( 'jsdoc definition required' , node . loc . start ) ;
22+ if ( ! reportExports && needCheck && parentNode . type === 'AssignmentExpression' ) {
23+ var left = parentNode . left ;
24+ if ( ( left . object && left . object . name ) === 'module' &&
25+ ( left . property && left . property . name ) === 'exports' ) {
26+ needCheck = false ;
27+ }
28+ }
29+
30+ // skip unless jsdoc exists and check is needed
31+ if ( node . jsdoc || ! needCheck ) {
32+ return ;
2333 }
34+
35+ // report absence
36+ err ( 'jsdoc definition required' , node . loc . start ) ;
2437}
0 commit comments