@@ -101,7 +101,7 @@ function validateBeforeSelfClosing(context, node, option) {
101
101
const leftToken = getTokenBeforeClosingBracket ( node ) ;
102
102
const closingSlash = sourceCode . getTokenAfter ( leftToken ) ;
103
103
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' ) {
105
105
if ( leftToken . loc . end . line === closingSlash . loc . start . line ) {
106
106
report ( context , messages . beforeSelfCloseNeedNewline , 'beforeSelfCloseNeedNewline' , {
107
107
node,
@@ -110,22 +110,25 @@ function validateBeforeSelfClosing(context, node, option) {
110
110
return fixer . insertTextBefore ( closingSlash , '\n' ) ;
111
111
} ,
112
112
} ) ;
113
+ return ;
113
114
}
114
115
}
115
116
116
117
if ( leftToken . loc . end . line !== closingSlash . loc . start . line ) {
117
118
return ;
118
119
}
119
120
120
- if ( option === 'always' && ! sourceCode . isSpaceBetweenTokens ( leftToken , closingSlash ) ) {
121
+ const adjacent = ! sourceCode . isSpaceBetweenTokens ( leftToken , closingSlash ) ;
122
+
123
+ if ( ( option === 'always' || option === 'proportional-always' ) && adjacent ) {
121
124
report ( context , messages . beforeSelfCloseNeedSpace , 'beforeSelfCloseNeedSpace' , {
122
125
node,
123
126
loc : closingSlash . loc . start ,
124
127
fix ( fixer ) {
125
128
return fixer . insertTextBefore ( closingSlash , ' ' ) ;
126
129
} ,
127
130
} ) ;
128
- } else if ( option === 'never' && sourceCode . isSpaceBetweenTokens ( leftToken , closingSlash ) ) {
131
+ } else if ( option === 'never' && ! adjacent ) {
129
132
report ( context , messages . beforeSelfCloseNoSpace , 'beforeSelfCloseNoSpace' , {
130
133
node,
131
134
loc : closingSlash . loc . start ,
@@ -180,11 +183,12 @@ function validateBeforeClosing(context, node, option) {
180
183
// Don't enforce this rule for self closing tags
181
184
if ( ! node . selfClosing ) {
182
185
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 ) ;
186
190
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' ) {
188
192
if ( leftToken . loc . end . line === closingToken . loc . start . line ) {
189
193
report ( context , messages . beforeCloseNeedNewline , 'beforeCloseNeedNewline' , {
190
194
node,
@@ -193,6 +197,7 @@ function validateBeforeClosing(context, node, option) {
193
197
return fixer . insertTextBefore ( closingToken , '\n' ) ;
194
198
} ,
195
199
} ) ;
200
+ return ;
196
201
}
197
202
}
198
203
@@ -224,6 +229,17 @@ function validateBeforeClosing(context, node, option) {
224
229
return fixer . insertTextBefore ( closingToken , ' ' ) ;
225
230
} ,
226
231
} ) ;
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
+ } ) ;
227
243
}
228
244
}
229
245
}
@@ -259,13 +275,13 @@ module.exports = {
259
275
enum : [ 'always' , 'never' , 'allow' ] ,
260
276
} ,
261
277
beforeSelfClosing : {
262
- enum : [ 'always' , 'multiline -always' , 'never' , 'allow' ] ,
278
+ enum : [ 'always' , 'proportional -always' , 'never' , 'allow' ] ,
263
279
} ,
264
280
afterOpening : {
265
281
enum : [ 'always' , 'allow-multiline' , 'never' , 'allow' ] ,
266
282
} ,
267
283
beforeClosing : {
268
- enum : [ 'always' , 'multiline -always' , 'never' , 'allow' ] ,
284
+ enum : [ 'always' , 'proportional -always' , 'never' , 'allow' ] ,
269
285
} ,
270
286
} ,
271
287
default : optionDefaults ,
0 commit comments