@@ -101,7 +101,7 @@ function validateBeforeSelfClosing(context, node, option) {
101101 const leftToken = getTokenBeforeClosingBracket ( node ) ;
102102 const closingSlash = sourceCode . getTokenAfter ( leftToken ) ;
103103
104- if ( node . loc . start . line !== node . loc . end . line && option === 'multiline -always' ) {
104+ if ( node . loc . start . line !== node . loc . end . line && option === 'proportional -always' ) {
105105 if ( leftToken . loc . end . line === closingSlash . loc . start . line ) {
106106 report ( context , messages . beforeSelfCloseNeedNewline , 'beforeSelfCloseNeedNewline' , {
107107 node,
@@ -110,22 +110,25 @@ function validateBeforeSelfClosing(context, node, option) {
110110 return fixer . insertTextBefore ( closingSlash , '\n' ) ;
111111 } ,
112112 } ) ;
113+ return ;
113114 }
114115 }
115116
116117 if ( leftToken . loc . end . line !== closingSlash . loc . start . line ) {
117118 return ;
118119 }
119120
120- if ( option === 'always' && ! sourceCode . isSpaceBetweenTokens ( leftToken , closingSlash ) ) {
121+ const adjacent = ! sourceCode . isSpaceBetweenTokens ( leftToken , closingSlash ) ;
122+
123+ if ( ( option === 'always' || option === 'proportional-always' ) && adjacent ) {
121124 report ( context , messages . beforeSelfCloseNeedSpace , 'beforeSelfCloseNeedSpace' , {
122125 node,
123126 loc : closingSlash . loc . start ,
124127 fix ( fixer ) {
125128 return fixer . insertTextBefore ( closingSlash , ' ' ) ;
126129 } ,
127130 } ) ;
128- } else if ( option === 'never' && sourceCode . isSpaceBetweenTokens ( leftToken , closingSlash ) ) {
131+ } else if ( option === 'never' && ! adjacent ) {
129132 report ( context , messages . beforeSelfCloseNoSpace , 'beforeSelfCloseNoSpace' , {
130133 node,
131134 loc : closingSlash . loc . start ,
@@ -180,11 +183,12 @@ function validateBeforeClosing(context, node, option) {
180183 // Don't enforce this rule for self closing tags
181184 if ( ! node . selfClosing ) {
182185 const sourceCode = context . getSourceCode ( ) ;
183- const lastTokens = sourceCode . getLastTokens ( node , 2 ) ;
184- const closingToken = lastTokens [ 1 ] ;
185- const leftToken = lastTokens [ 0 ] ;
186+ const leftToken = option === 'proportional-always'
187+ ? getTokenBeforeClosingBracket ( node )
188+ : sourceCode . getLastTokens ( node , 2 ) [ 0 ] ;
189+ const closingToken = sourceCode . getTokenAfter ( leftToken ) ;
186190
187- if ( node . loc . start . line !== node . loc . end . line && option === 'multiline -always' ) {
191+ if ( node . loc . start . line !== node . loc . end . line && option === 'proportional -always' ) {
188192 if ( leftToken . loc . end . line === closingToken . loc . start . line ) {
189193 report ( context , messages . beforeCloseNeedNewline , 'beforeCloseNeedNewline' , {
190194 node,
@@ -193,6 +197,7 @@ function validateBeforeClosing(context, node, option) {
193197 return fixer . insertTextBefore ( closingToken , '\n' ) ;
194198 } ,
195199 } ) ;
200+ return ;
196201 }
197202 }
198203
@@ -224,6 +229,17 @@ function validateBeforeClosing(context, node, option) {
224229 return fixer . insertTextBefore ( closingToken , ' ' ) ;
225230 } ,
226231 } ) ;
232+ } else if ( option === 'proportional-always' && node . type === 'JSXOpeningElement' && adjacent !== ( node . loc . start . line === node . loc . end . line ) ) {
233+ report ( context , messages . beforeCloseNeedSpace , 'beforeCloseNeedSpace' , {
234+ node,
235+ loc : {
236+ start : leftToken . loc . end ,
237+ end : closingToken . loc . start ,
238+ } ,
239+ fix ( fixer ) {
240+ return fixer . insertTextBefore ( closingToken , ' ' ) ;
241+ } ,
242+ } ) ;
227243 }
228244 }
229245}
@@ -259,13 +275,13 @@ module.exports = {
259275 enum : [ 'always' , 'never' , 'allow' ] ,
260276 } ,
261277 beforeSelfClosing : {
262- enum : [ 'always' , 'multiline -always' , 'never' , 'allow' ] ,
278+ enum : [ 'always' , 'proportional -always' , 'never' , 'allow' ] ,
263279 } ,
264280 afterOpening : {
265281 enum : [ 'always' , 'allow-multiline' , 'never' , 'allow' ] ,
266282 } ,
267283 beforeClosing : {
268- enum : [ 'always' , 'multiline -always' , 'never' , 'allow' ] ,
284+ enum : [ 'always' , 'proportional -always' , 'never' , 'allow' ] ,
269285 } ,
270286 } ,
271287 default : optionDefaults ,
0 commit comments