diff --git a/src/services/refactors/convertToOptionalChainExpression.ts b/src/services/refactors/convertToOptionalChainExpression.ts index 333e200f6a0b4..d3e00431c20c8 100644 --- a/src/services/refactors/convertToOptionalChainExpression.ts +++ b/src/services/refactors/convertToOptionalChainExpression.ts @@ -138,6 +138,11 @@ function getInfo(context: RefactorContext, considerEmptySpans = true): OptionalC const expression = parent && isValidExpressionOrStatement(parent) ? getExpression(parent) : undefined; if (!expression) return { error: getLocaleSpecificMessage(Diagnostics.Could_not_find_convertible_access_expression) }; + // do not offer refactor inside complex expressions like concatenations... + if (expression.parent && isBinaryExpression(expression.parent)) { + return { error: getLocaleSpecificMessage(Diagnostics.Could_not_find_convertible_access_expression) }; + } + const checker = program.getTypeChecker(); return isConditionalExpression(expression) ? getConditionalInfo(expression, checker) : getBinaryInfo(expression); } diff --git a/tests/cases/fourslash/refactorConvertToOptionalChainExpression_SubexpressionWithSuffix1.ts b/tests/cases/fourslash/refactorConvertToOptionalChainExpression_SubexpressionWithSuffix1.ts index ab48eb8c85dec..2447db929e2cb 100644 --- a/tests/cases/fourslash/refactorConvertToOptionalChainExpression_SubexpressionWithSuffix1.ts +++ b/tests/cases/fourslash/refactorConvertToOptionalChainExpression_SubexpressionWithSuffix1.ts @@ -7,13 +7,16 @@ // verify that we stop at an invalid suffix sequence. goTo.select("a", "b"); -edit.applyRefactor({ - refactorName: "Convert to optional chain expression", - actionName: "Convert to optional chain expression", - actionDescription: "Convert to optional chain expression", - newContent: -`let a = { b: { c: 0 } }; -let foo; -let bar; -a?.b?.c && foo && bar;` -}); \ No newline at end of file +// edit.applyRefactor({ +// refactorName: "Convert to optional chain expression", +// actionName: "Convert to optional chain expression", +// actionDescription: "Convert to optional chain expression", +// newContent: +// `let a = { b: { c: 0 } }; +// let foo; +// let bar; +// a?.b?.c && foo && bar;` +// }); + +// the refactor should NOT be available +verify.not.refactorAvailable("Convert to optional chain expression"); \ No newline at end of file