jdenny added a comment.

Thanks for working on this.  I agree there's a bug.  However, this patch 
doesn't fix the bug.  It provides a workaround.
That is, the current default `ReplaceText` behavior, as revealed in the first 
test added by this patch, doesn't make sense.  
`IncludeInsertsAtBeginOfRange=true` (the default) should mean to also remove 
the text that was previously inserted before the specified range.  Instead, the 
previously inserted text confuses the implementation, so it removes extra text 
//after// the specified range.  It's hard to imagine anyone is relying on that 
broken behavior.

I see a couple of potential paths forward.  Either:

1. Change the patch summary and the new comments to make it clear that the 
default behavior is broken, so specifying `IncludeInsertsAtBeginOfRange=true` 
is the only way to ensure reasonable behavior.  `FIXME:` should prefix some of 
those comments.

2. Fix the bug.  I've added an inline comment to suggest a possible fix, but I 
haven't tested it carefully.

Either way, `RemoveText` should be addressed in the same manner as it has the 
same bug.



================
Comment at: clang/lib/Rewrite/Rewriter.cpp:132
                                 StringRef NewStr) {
   unsigned RealOffset = getMappedOffset(OrigOffset, true);
   Buffer.erase(RealOffset, OrigLength);
----------------
I think this might fix the bug, but I haven't tested thoroughly.

One problem is ensuring backward compatibility here and in callers while 
keeping a consistent interface.  That is, the previous default here was 
`IncludeInsertsAtBeginOfRange=false`, but it seems the intended default 
elsewhere is meant to be the opposite.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D107503/new/

https://reviews.llvm.org/D107503

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to