Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit365331a

Browse files
bradzacherilyavolodin
authored andcommitted
Fix: object-shorthand providing invalid fixes for typescript (#12260)
* Fix: object-shorthand providing invalid fixes for typescript* Chore: refactor to not rely on async modifier check* Chore: ensure return type isn't wiped for no arguments* Chore: add ts code test to prevent regressions
1 parent1c921c6 commit365331a

File tree

3 files changed

+9062
-9
lines changed

3 files changed

+9062
-9
lines changed

‎lib/rules/object-shorthand.js‎

Lines changed: 35 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,7 @@ module.exports = {
244244
constkeyText=sourceCode.text.slice(firstKeyToken.range[0],lastKeyToken.range[1]);
245245
letkeyPrefix="";
246246

247+
// key: /* */ () => {}
247248
if(sourceCode.commentsExistBetween(lastKeyToken,node.value)){
248249
returnnull;
249250
}
@@ -255,24 +256,49 @@ module.exports = {
255256
keyPrefix+="*";
256257
}
257258

259+
constfixRange=[firstKeyToken.range[0],node.range[1]];
260+
constmethodPrefix=keyPrefix+keyText;
261+
258262
if(node.value.type==="FunctionExpression"){
259263
constfunctionToken=sourceCode.getTokens(node.value).find(token=>token.type==="Keyword"&&token.value==="function");
260264
consttokenBeforeParams=node.value.generator ?sourceCode.getTokenAfter(functionToken) :functionToken;
261265

262266
returnfixer.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-
constarrowToken=sourceCode.getTokenBefore(node.value.body,{filter:token=>token.value==="=>"});
268-
consttokenBeforeArrow=sourceCode.getTokenBefore(arrowToken);
269-
consthasParensAroundParameters=tokenBeforeArrow.type==="Punctuator"&&tokenBeforeArrow.value===")";
270-
constoldParamText=sourceCode.text.slice(sourceCode.getFirstToken(node.value,node.value.async ?1 :0).range[0],tokenBeforeArrow.range[1]);
271-
constnewParamText=hasParensAroundParameters ?oldParamText :`(${oldParamText})`;
271+
272+
constarrowToken=sourceCode.getTokenBefore(node.value.body,astUtils.isArrowToken);
273+
constfnBody=sourceCode.text.slice(arrowToken.range[1],node.value.range[1]);
274+
275+
letshouldAddParensAroundParameters=false;
276+
lettokenBeforeParams;
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+
consthasParen=astUtils.isOpeningParenToken(tokenBeforeParams);
286+
constisTokenOutsideNode=tokenBeforeParams.range[0]<node.range[0];
287+
288+
shouldAddParensAroundParameters=!hasParen||isTokenOutsideNode;
289+
}
290+
291+
constsliceStart=shouldAddParensAroundParameters
292+
?node.value.params[0].range[0]
293+
:tokenBeforeParams.range[0];
294+
constsliceEnd=sourceCode.getTokenBefore(arrowToken).range[1];
295+
296+
constoldParamText=sourceCode.text.slice(sliceStart,sliceEnd);
297+
constnewParamText=shouldAddParensAroundParameters ?`(${oldParamText})` :oldParamText;
272298

273299
returnfixer.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
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp