@@ -1028,42 +1028,6 @@ module.exports.prototype = {
10281028 check : function ( file , errors ) {
10291029 var operators = this . _operatorIndex ;
10301030
1031- // 2 + 2, 2 == 2
1032- file . iterateNodesByType (
1033- [ 'BinaryExpression' , 'AssignmentExpression' , 'LogicalExpression' ] ,
1034- function ( node ) {
1035- if ( operators [ node . operator ] ) {
1036- var indent ;
1037- var range = node . right . range [ 0 ] ;
1038-
1039- if ( tokenHelper . isTokenParenthesis ( file , range - 1 , true ) ) {
1040- indent = node . operator . length + 1 ;
1041- } else {
1042- indent = node . operator . length ;
1043- }
1044-
1045- var part = tokenHelper . getTokenByRangeStartIfPunctuator (
1046- file ,
1047- range - indent ,
1048- node . operator ,
1049- true
1050- ) ;
1051-
1052- if ( ! part ) {
1053- var loc = tokenHelper . findOperatorByRangeStart (
1054- file , node . right . range [ 0 ] , node . operator , true
1055- ) . loc . start ;
1056-
1057- errors . add (
1058- 'Operator ' + node . operator + ' should stick to following expression' ,
1059- loc . line ,
1060- tokenHelper . getPointerEntities ( loc . column , node . operator . length )
1061- ) ;
1062- }
1063- }
1064- }
1065- ) ;
1066-
10671031 function errorIfApplicable ( token , i , tokens , operator ) {
10681032 var nextToken = tokens [ i + 1 ] ;
10691033
@@ -1078,7 +1042,7 @@ module.exports.prototype = {
10781042 }
10791043 }
10801044
1081- // ":" for object property only but not for ternar
1045+ // ":" for object property only but not for ternar
10821046 if ( operators [ ':' ] ) {
10831047 file . iterateNodesByType ( [ 'ObjectExpression' ] , function ( node ) {
10841048 node . properties . forEach ( function ( prop ) {
@@ -1101,6 +1065,44 @@ module.exports.prototype = {
11011065 errorIfApplicable ( token , i , tokens , operator ) ;
11021066 } ) ;
11031067 }
1068+
1069+ // For everything else
1070+ file . iterateNodesByType (
1071+ [ 'BinaryExpression' , 'AssignmentExpression' , 'VariableDeclarator' , 'LogicalExpression' ] ,
1072+ function ( node ) {
1073+ var isDec = node . type === 'VariableDeclarator' ;
1074+ var operator = isDec ? '=' : node . operator ;
1075+
1076+ if ( ! operators [ operator ] || node . init === null ) {
1077+ return ;
1078+ }
1079+
1080+ var range = ( isDec ? node . init : node . right ) . range [ 0 ] ;
1081+
1082+ var indent = tokenHelper . isTokenParenthesis ( file , range - 1 , true ) ?
1083+ operator . length + 1 :
1084+ operator . length ;
1085+
1086+ var part = tokenHelper . getTokenByRangeStartIfPunctuator (
1087+ file ,
1088+ range - indent ,
1089+ operator ,
1090+ true
1091+ ) ;
1092+
1093+ if ( ! part ) {
1094+ var loc = tokenHelper . findOperatorByRangeStart (
1095+ file , range , operator , true
1096+ ) . loc . start ;
1097+
1098+ errors . add (
1099+ 'Operator ' + operator + ' should stick to following expression' ,
1100+ loc . line ,
1101+ tokenHelper . getPointerEntities ( loc . column , operator . length )
1102+ ) ;
1103+ }
1104+ }
1105+ ) ;
11041106 }
11051107
11061108} ;
@@ -1335,23 +1337,26 @@ module.exports.prototype = {
13351337
13361338 // For everything else
13371339 file . iterateNodesByType (
1338- [ 'BinaryExpression' , 'AssignmentExpression' , 'LogicalExpression' ] ,
1340+ [ 'BinaryExpression' , 'AssignmentExpression' , 'VariableDeclarator' , ' LogicalExpression'] ,
13391341 function ( node ) {
1340- if ( operators [ node . operator ] ) {
1341- var part = tokenHelper . getTokenByRangeStartIfPunctuator (
1342- file ,
1343- node . left . range [ 1 ] ,
1344- node . operator
1345- ) ;
1342+ var isDec = node . type === 'VariableDeclarator' ;
1343+ var operator = isDec ? '=' : node . operator ;
13461344
1347- if ( ! part ) {
1348- errors . add (
1349- 'Operator ' + node . operator + ' should stick to preceding expression' ,
1350- tokenHelper . findOperatorByRangeStart (
1351- file , node . right . range [ 0 ] , node . operator , true
1352- ) . loc . start
1353- ) ;
1354- }
1345+ // !node.init is it's an empty assignment
1346+ if ( ! operators [ operator ] || node . init === null ) {
1347+ return ;
1348+ }
1349+
1350+ var range = ( isDec ? node . id : node . left ) . range ;
1351+ var part = tokenHelper . getTokenByRangeStartIfPunctuator ( file , range [ 1 ] , operator ) ;
1352+
1353+ if ( ! part ) {
1354+ errors . add (
1355+ 'Operator ' + node . operator + ' should stick to preceding expression' ,
1356+ tokenHelper . findOperatorByRangeStart (
1357+ file , range [ 0 ] , operator
1358+ ) . loc . start
1359+ ) ;
13551360 }
13561361 }
13571362 ) ;
@@ -3152,34 +3157,36 @@ module.exports.prototype = {
31523157
31533158 // For everything else
31543159 file . iterateNodesByType (
3155- [ 'BinaryExpression' , 'AssignmentExpression' , 'LogicalExpression' ] ,
3160+ [ 'BinaryExpression' , 'AssignmentExpression' , 'VariableDeclarator' , ' LogicalExpression'] ,
31563161 function ( node ) {
3157- if ( operators [ node . operator ] ) {
3158- var indent ;
3159- var range = node . right . range [ 0 ] ;
3162+ var isDec = node . type === 'VariableDeclarator' ;
3163+ var operator = isDec ? '=' : node . operator ;
31603164
3161- if ( tokenHelper . isTokenParenthesis ( file , range - 1 , true ) ) {
3162- indent = node . operator . length + 1 ;
3163- } else {
3164- indent = node . operator . length ;
3165- }
3165+ if ( ! operators [ operator ] || node . init === null ) {
3166+ return ;
3167+ }
31663168
3167- var part = tokenHelper . getTokenByRangeStartIfPunctuator (
3168- file ,
3169- range - indent ,
3170- node . operator ,
3171- true
3172- ) ;
3169+ var range = ( isDec ? node . init : node . right ) . range [ 0 ] ;
31733170
3174- if ( part ) {
3175- var loc = part . loc . start ;
3171+ var indent = tokenHelper . isTokenParenthesis ( file , range - 1 , true ) ?
3172+ operator . length + 1 :
3173+ operator . length ;
31763174
3177- errors . add (
3178- 'Operator ' + node . operator + ' should not stick to following expression' ,
3179- loc . line ,
3180- tokenHelper . getPointerEntities ( loc . column , node . operator . length )
3181- ) ;
3182- }
3175+ var part = tokenHelper . getTokenByRangeStartIfPunctuator (
3176+ file ,
3177+ range - indent ,
3178+ operator ,
3179+ true
3180+ ) ;
3181+
3182+ if ( part ) {
3183+ var loc = part . loc . start ;
3184+
3185+ errors . add (
3186+ 'Operator ' + operator + ' should not stick to following expression' ,
3187+ loc . line ,
3188+ tokenHelper . getPointerEntities ( loc . column , operator . length )
3189+ ) ;
31833190 }
31843191 }
31853192 ) ;
@@ -3452,23 +3459,25 @@ module.exports.prototype = {
34523459
34533460 // For everything else
34543461 file . iterateNodesByType (
3455- [ 'BinaryExpression' , 'AssignmentExpression' , 'LogicalExpression' ] ,
3462+ [ 'BinaryExpression' , 'AssignmentExpression' , 'VariableDeclarator' , ' LogicalExpression'] ,
34563463 function ( node ) {
3457- if ( operators [ node . operator ] ) {
3458- var part = tokenHelper . getTokenByRangeStartIfPunctuator (
3459- file ,
3460- node . left . range [ 1 ] ,
3461- node . operator
3462- ) ;
3464+ var isDec = node . type === 'VariableDeclarator' ;
3465+ var operator = isDec ? '=' : node . operator ;
34633466
3464- if ( part ) {
3465- var loc = part . loc . start ;
3466- errors . add (
3467- 'Operator ' + node . operator + ' should not stick to following expression' ,
3468- loc . line ,
3469- tokenHelper . getPointerEntities ( loc . column , node . operator . length )
3470- ) ;
3471- }
3467+ if ( ! operators [ operator ] ) {
3468+ return ;
3469+ }
3470+
3471+ var range = ( isDec ? node . id : node . left ) . range [ 1 ] ;
3472+ var part = tokenHelper . getTokenByRangeStartIfPunctuator ( file , range , operator ) ;
3473+
3474+ if ( part ) {
3475+ var loc = part . loc . start ;
3476+ errors . add (
3477+ 'Operator ' + operator + ' should not stick to following expression' ,
3478+ loc . line ,
3479+ tokenHelper . getPointerEntities ( loc . column , operator . length )
3480+ ) ;
34723481 }
34733482 }
34743483 ) ;
0 commit comments