@@ -148,7 +148,33 @@ module.exports = {
148
148
* @returns {boolean } Whether or not there is a newline between the tokens.
149
149
*/
150
150
function isMultiline ( left , right ) {
151
- return left . loc . start . line !== right . loc . start . line ;
151
+ return left . loc . end . line !== right . loc . start . line ;
152
+ }
153
+
154
+ /**
155
+ * Trims text of whitespace between two ranges
156
+ * @param {Fixer } fixer - the eslint fixer object
157
+ * @param {Location } fromLoc - the start location
158
+ * @param {Location } toLoc - the end location
159
+ * @param {string } mode - either 'start' or 'end'
160
+ * @param {string= } spacing - a spacing value that will optionally add a space to the removed text
161
+ * @returns {Object|*|{range, text} }
162
+ */
163
+ function fixByTrimmingWhitespace ( fixer , fromLoc , toLoc , mode , spacing ) {
164
+ let replacementText = sourceCode . text . slice ( fromLoc , toLoc ) ;
165
+ if ( mode === 'start' ) {
166
+ replacementText = replacementText . replace ( / ^ \s + / gm, '' ) ;
167
+ } else {
168
+ replacementText = replacementText . replace ( / \s + $ / gm, '' ) ;
169
+ }
170
+ if ( spacing === SPACING . always ) {
171
+ if ( mode === 'start' ) {
172
+ replacementText += ' ' ;
173
+ } else {
174
+ replacementText = ` ${ replacementText } ` ;
175
+ }
176
+ }
177
+ return fixer . replaceTextRange ( [ fromLoc , toLoc ] , replacementText ) ;
152
178
}
153
179
154
180
/**
@@ -164,7 +190,7 @@ module.exports = {
164
190
message : `There should be no newline after '${ token . value } '` ,
165
191
fix : function ( fixer ) {
166
192
const nextToken = sourceCode . getTokenAfter ( token ) ;
167
- return fixer . replaceTextRange ( [ token . range [ 1 ] , nextToken . range [ 0 ] ] , spacing === SPACING . always ? ' ' : '' ) ;
193
+ return fixByTrimmingWhitespace ( fixer , token . range [ 1 ] , nextToken . range [ 0 ] , 'start' , spacing ) ;
168
194
}
169
195
} ) ;
170
196
}
@@ -182,7 +208,7 @@ module.exports = {
182
208
message : `There should be no newline before '${ token . value } '` ,
183
209
fix : function ( fixer ) {
184
210
const previousToken = sourceCode . getTokenBefore ( token ) ;
185
- return fixer . replaceTextRange ( [ previousToken . range [ 1 ] , token . range [ 0 ] ] , spacing === SPACING . always ? ' ' : '' ) ;
211
+ return fixByTrimmingWhitespace ( fixer , previousToken . range [ 1 ] , token . range [ 0 ] , 'end' , spacing ) ;
186
212
}
187
213
} ) ;
188
214
}
@@ -200,10 +226,7 @@ module.exports = {
200
226
message : `There should be no space after '${ token . value } '` ,
201
227
fix : function ( fixer ) {
202
228
const nextToken = sourceCode . getTokenAfter ( token ) ;
203
- const nextNode = sourceCode . getNodeByRangeIndex ( nextToken . range [ 0 ] ) ;
204
- const leadingComments = sourceCode . getComments ( nextNode ) . leading ;
205
- const rangeEndRef = leadingComments . length ? leadingComments [ 0 ] : nextToken ;
206
- return fixer . removeRange ( [ token . range [ 1 ] , rangeEndRef . range [ 0 ] ] ) ;
229
+ return fixByTrimmingWhitespace ( fixer , token . range [ 1 ] , nextToken . range [ 0 ] , 'start' ) ;
207
230
}
208
231
} ) ;
209
232
}
@@ -221,10 +244,7 @@ module.exports = {
221
244
message : `There should be no space before '${ token . value } '` ,
222
245
fix : function ( fixer ) {
223
246
const previousToken = sourceCode . getTokenBefore ( token ) ;
224
- const previousNode = sourceCode . getNodeByRangeIndex ( previousToken . range [ 0 ] ) ;
225
- const trailingComments = sourceCode . getComments ( previousNode ) . trailing ;
226
- const rangeStartRef = trailingComments . length ? trailingComments [ trailingComments . length - 1 ] : previousToken ;
227
- return fixer . removeRange ( [ rangeStartRef . range [ 1 ] , token . range [ 0 ] ] ) ;
247
+ return fixByTrimmingWhitespace ( fixer , previousToken . range [ 1 ] , token . range [ 0 ] , 'end' ) ;
228
248
}
229
249
} ) ;
230
250
}
0 commit comments