hokein added a comment.

this change looks good to me, I will leave the final stamp for @ymandel.



================
Comment at: 
clang-tools-extra/clang-apply-replacements/lib/Tooling/ApplyReplacements.cpp:159
     // automatically canonicalized.
+    auto &WorkingDir = SM.getFileManager().getFileSystemOpts().WorkingDir;
+    auto PrevWorkingDir = WorkingDir;
----------------
ymandel wrote:
> avogelsgesang wrote:
> > ymandel wrote:
> > > Why are you capturing this as a reference? This is a subtle and IMO error 
> > > prone pattern, since it's not obvious in the code below that you're 
> > > mutating a deeply nested element of the filesystem.  Can  you instead use 
> > > a local variable and just set this right before you need it?
> > > Why are you capturing this as a reference?
> > 
> > Mostly to keep the code shorter. Otherwise, I would have to write
> > 
> > ```
> >     auto PrevWorkingDir = 
> > SM.getFileManager().getFileSystemOpts().WorkingDir;
> >     if (buildDir)
> >       SM.getFileManager().getFileSystemOpts().WorkingDir = *buildDir;
> >     // [...]
> >     WorkingDir = SM.getFileManager().getFileSystemOpts().WorkingDir;
> > ```
> > 
> > which isn't really DRY.
> > 
> > > Can you instead use a local variable and just set this right before you 
> > > need it?
> > 
> > I think I don't understand the alternative you are proposing here. Can you 
> > provide an example?
> What you wrote is what I had in mind, though the last line, i think, would be:
> `SM.getFileManager().getFileSystemOpts().WorkingDir = PrevWorkingDir;`
> ?
> 
> That said, I see your point.  The problem is not in your code so much as in 
> the underlying (lack of) API for setting and restoring the working directory. 
> Honestly, the need to manually restore bothers me more than the reference, 
> now that I consider it in more detail. Perhaps another reviewer will have a 
> better suggestion.
rather than keeping the code short, I would be more explicit on setting and 
restoring the working directory, it is easier for readers to understand the 
intention (the FileManager's getter API which returns a mutable reference seems 
a bit weird to me).


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D112647

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

Reply via email to