@@ -146,7 +146,8 @@ export default util.createRule<Options, MessageIds>({
146
146
return false ;
147
147
}
148
148
149
- if ( node . range [ 0 ] - prevToken . range [ 1 ] > 0 ) {
149
+ const nextToken = sourceCode . getTokenAfter ( prevToken ) ;
150
+ if ( nextToken && sourceCode . isSpaceBetweenTokens ( prevToken , nextToken ) ) {
150
151
return false ;
151
152
}
152
153
@@ -168,6 +169,21 @@ export default util.createRule<Options, MessageIds>({
168
169
return 'T' ;
169
170
}
170
171
172
+ /**
173
+ * @param node the node to be evaluated
174
+ */
175
+ function getTypeOpNodeRange (
176
+ node : TSESTree . Node | null ,
177
+ ) : [ number , number ] | undefined {
178
+ if ( ! node ) {
179
+ return undefined ;
180
+ }
181
+
182
+ const firstToken = sourceCode . getFirstToken ( node ) ! ;
183
+ const nextToken = sourceCode . getTokenAfter ( firstToken ) ! ;
184
+ return [ firstToken . range [ 0 ] , nextToken . range [ 0 ] ] ;
185
+ }
186
+
171
187
return {
172
188
TSArrayType ( node ) : void {
173
189
if (
@@ -208,24 +224,27 @@ export default util.createRule<Options, MessageIds>({
208
224
type : getMessageType ( node . elementType ) ,
209
225
} ,
210
226
fix ( fixer ) {
211
- const startText = requireWhitespaceBefore ( node ) ;
212
227
const toFix = [
213
228
fixer . replaceTextRange ( [ node . range [ 1 ] - 2 , node . range [ 1 ] ] , '>' ) ,
214
- fixer . insertTextBefore (
215
- node ,
216
- `${ startText ? ' ' : '' } ${ isReadonly ? 'Readonly' : '' } Array<` ,
217
- ) ,
218
229
] ;
219
- if ( typeOpNode ) {
220
- // remove the readonly operator if it exists
221
- toFix . unshift (
222
- fixer . removeRange ( [
223
- typeOpNode . range [ 0 ] ,
224
- typeOpNode . range [ 0 ] + 'readonly ' . length ,
225
- ] ) ,
230
+ const startText = requireWhitespaceBefore ( node ) ;
231
+ const typeOpNodeRange = getTypeOpNodeRange ( typeOpNode ) ;
232
+
233
+ if ( typeOpNodeRange ) {
234
+ toFix . unshift ( fixer . removeRange ( typeOpNodeRange ) ) ;
235
+ } else {
236
+ toFix . push (
237
+ fixer . insertTextBefore ( node , `${ startText ? ' ' : '' } ` ) ,
226
238
) ;
227
239
}
228
240
241
+ toFix . push (
242
+ fixer . insertTextBefore (
243
+ node ,
244
+ `${ isReadonly ? 'Readonly' : '' } Array<` ,
245
+ ) ,
246
+ ) ;
247
+
229
248
if ( node . elementType . type === AST_NODE_TYPES . TSParenthesizedType ) {
230
249
const first = sourceCode . getFirstToken ( node . elementType ) ;
231
250
const last = sourceCode . getLastToken ( node . elementType ) ;
0 commit comments