================
@@ -599,10 +607,22 @@ Expected<Tweak::Effect> ExtractVariable::apply(const 
Selection &Inputs) {
   // FIXME: get variable name from user or suggest based on type
   std::string VarName = "placeholder";
   SourceRange Range = Target->getExtractionChars();
+
+  const SelectionTree::Node &OuterImplicit =
+      Target->getExprNode()->outerImplicit();
+  assert(OuterImplicit.Parent);
+  bool IsStmtExpr = llvm::isa_and_nonnull<CompoundStmt>(
+      OuterImplicit.Parent->ASTNode.get<Stmt>());
+
   // insert new variable declaration
-  if (auto Err = Result.add(Target->insertDeclaration(VarName, Range)))
+  if (auto Err =
+          Result.add(Target->insertDeclaration(VarName, Range, !IsStmtExpr)))
----------------
HighCommander4 wrote:

The reason for needing `AddSemicolon: false` here for expression statements is 
a bit subtle:

 * The source range of an expression statement does not include the semicolon, 
so the text we're **inserting** as the initializer will not include the 
semicolon
 * However, the text we're **removing** below does not include the semicolon 
either (i.e. it's left behind), so we don't want to add another one

Could you add a comment clarifying this a bit?

https://github.com/llvm/llvm-project/pull/112525
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to