@@ -244,6 +244,7 @@ module.exports = {
244244const keyText = sourceCode . text . slice ( firstKeyToken . range [ 0 ] , lastKeyToken . range [ 1 ] ) ;
245245let keyPrefix = "" ;
246246
247+ // key: /* */ () => {}
247248if ( sourceCode . commentsExistBetween ( lastKeyToken , node . value ) ) {
248249return null ;
249250}
@@ -255,24 +256,49 @@ module.exports = {
255256keyPrefix += "*" ;
256257}
257258
259+ const fixRange = [ firstKeyToken . range [ 0 ] , node . range [ 1 ] ] ;
260+ const methodPrefix = keyPrefix + keyText ;
261+
258262if ( node . value . type === "FunctionExpression" ) {
259263const functionToken = sourceCode . getTokens ( node . value ) . find ( token => token . type === "Keyword" && token . value === "function" ) ;
260264const tokenBeforeParams = node . value . generator ?sourceCode . getTokenAfter ( functionToken ) :functionToken ;
261265
262266return fixer . replaceTextRange (
263- [ firstKeyToken . range [ 0 ] , node . range [ 1 ] ] ,
264- keyPrefix + keyText + sourceCode . text . slice ( tokenBeforeParams . range [ 1 ] , node . value . range [ 1 ] )
267+ fixRange ,
268+ methodPrefix + sourceCode . text . slice ( tokenBeforeParams . range [ 1 ] , node . value . range [ 1 ] )
265269) ;
266270}
267- const arrowToken = sourceCode . getTokenBefore ( node . value . body , { filter :token => token . value === "=>" } ) ;
268- const tokenBeforeArrow = sourceCode . getTokenBefore ( arrowToken ) ;
269- const hasParensAroundParameters = tokenBeforeArrow . type === "Punctuator" && tokenBeforeArrow . value === ")" ;
270- const oldParamText = sourceCode . text . slice ( sourceCode . getFirstToken ( node . value , node . value . async ?1 :0 ) . range [ 0 ] , tokenBeforeArrow . range [ 1 ] ) ;
271- const newParamText = hasParensAroundParameters ?oldParamText :`(${ oldParamText } )` ;
271+
272+ const arrowToken = sourceCode . getTokenBefore ( node . value . body , astUtils . isArrowToken ) ;
273+ const fnBody = sourceCode . text . slice ( arrowToken . range [ 1 ] , node . value . range [ 1 ] ) ;
274+
275+ let shouldAddParensAroundParameters = false ;
276+ let tokenBeforeParams ;
277+
278+ if ( node . value . params . length === 0 ) {
279+ tokenBeforeParams = sourceCode . getFirstToken ( node . value , astUtils . isOpeningParenToken ) ;
280+ } else {
281+ tokenBeforeParams = sourceCode . getTokenBefore ( node . value . params [ 0 ] ) ;
282+ }
283+
284+ if ( node . value . params . length === 1 ) {
285+ const hasParen = astUtils . isOpeningParenToken ( tokenBeforeParams ) ;
286+ const isTokenOutsideNode = tokenBeforeParams . range [ 0 ] < node . range [ 0 ] ;
287+
288+ shouldAddParensAroundParameters = ! hasParen || isTokenOutsideNode ;
289+ }
290+
291+ const sliceStart = shouldAddParensAroundParameters
292+ ?node . value . params [ 0 ] . range [ 0 ]
293+ :tokenBeforeParams . range [ 0 ] ;
294+ const sliceEnd = sourceCode . getTokenBefore ( arrowToken ) . range [ 1 ] ;
295+
296+ const oldParamText = sourceCode . text . slice ( sliceStart , sliceEnd ) ;
297+ const newParamText = shouldAddParensAroundParameters ?`(${ oldParamText } )` :oldParamText ;
272298
273299return fixer . replaceTextRange (
274- [ firstKeyToken . range [ 0 ] , node . range [ 1 ] ] ,
275- keyPrefix + keyText + newParamText + sourceCode . text . slice ( arrowToken . range [ 1 ] , node . value . range [ 1 ] )
300+ fixRange ,
301+ methodPrefix + newParamText + fnBody
276302) ;
277303
278304}