@@ -63,7 +63,8 @@ module.exports = {
63
63
}
64
64
interface MakeFixFunctionArrayParams {
65
65
tokens : TSESTree . Token [ ] | null
66
- preferBoolean ?: Boolean
66
+ preferBoolean ?: boolean
67
+ callExpression ?: boolean
67
68
}
68
69
69
70
type MakeFixFunctionReturnType =
@@ -77,32 +78,36 @@ module.exports = {
77
78
const makeFixFunctionArray = ( {
78
79
tokens,
79
80
preferBoolean,
81
+ callExpression,
80
82
} : MakeFixFunctionArrayParams ) : MakeFixFunctionArrayReturnType => {
81
83
if ( ! tokens ) {
82
84
return null
83
85
}
84
86
85
87
if ( preferBoolean ) {
86
88
return ( fixer : TSESLint . RuleFixer ) : TSESLint . RuleFix [ ] => {
87
- return tokens . map ( token => {
88
- if ( token . value === '!' ) {
89
- return fixer . remove ( token )
90
- } else {
91
- return fixer . replaceText ( token , `Boolean(${ token . value } )` )
92
- }
93
- } )
89
+ const rest = tokens
90
+ . filter ( ( t , i ) => ! ( i < 2 && t . value === '!' ) )
91
+ . map ( x => x . value )
92
+ . join ( '' )
93
+ const lastToken = tokens . pop ( )
94
+ const newText = `Boolean(${ rest } )`
95
+ if ( ! lastToken ) {
96
+ throw new Error ( 'Error occurred during auto-fix' )
97
+ }
98
+ return [
99
+ ...tokens . map ( t => fixer . remove ( t ) ) ,
100
+ fixer . replaceText ( lastToken , newText ) ,
101
+ ]
94
102
}
95
103
} else {
96
104
return ( fixer : TSESLint . RuleFixer ) : TSESLint . RuleFix [ ] => {
97
105
return tokens
98
106
. map ( token => {
99
- if ( token . value === '(' || token . value === ')' ) {
100
- return fixer . remove ( token )
101
- }
102
- if ( token . value === 'Boolean' ) {
103
- return fixer . remove ( token )
104
- }
105
- if ( token . type === AST_TOKEN_TYPES . Identifier ) {
107
+ if (
108
+ token . type === AST_TOKEN_TYPES . Identifier &&
109
+ token . value !== 'Boolean'
110
+ ) {
106
111
return fixer . insertTextBefore ( token , '!!' )
107
112
}
108
113
} )
@@ -141,7 +146,10 @@ module.exports = {
141
146
)
142
147
) {
143
148
const token = sourceCode . getFirstToken ( exp . left )
144
-
149
+ let tokens : TSESTree . Token [ ] | null = null
150
+ if ( exp . left . type === AST_NODE_TYPES . CallExpression ) {
151
+ tokens = sourceCode . getTokens ( exp . left )
152
+ }
145
153
context . report ( {
146
154
node,
147
155
loc : {
@@ -155,10 +163,16 @@ module.exports = {
155
163
} ,
156
164
} ,
157
165
messageId : 'someId' ,
158
- fix : makeFixFunction ( {
159
- token,
160
- preferBoolean : options ?. preferBoolean ,
161
- } ) ,
166
+ fix : tokens
167
+ ? makeFixFunctionArray ( {
168
+ tokens,
169
+ preferBoolean : options ?. preferBoolean ,
170
+ callExpression : true ,
171
+ } )
172
+ : makeFixFunction ( {
173
+ token,
174
+ preferBoolean : options ?. preferBoolean ,
175
+ } ) ,
162
176
} )
163
177
}
164
178
0 commit comments