njames93 added a comment.

In D93978#2479440 <https://reviews.llvm.org/D93978#2479440>, @sammccall wrote:
> Ah, thanks for working on this!
>
> A few thoughts:
>
> - when we're pseudoparsing the file we're going to modify as we do here, 
> using the new content is strictly better, no downside :-)
> - the old method here of accessing the content through the FS attached to the 
> AST is a hack
> - however I think DraftStore is the wrong abstraction here and VFS is the 
> right one.
>   - each tweak shouldn't have to deal with falling back from DraftStore to 
> VFS (and rename also has an implementation of this!)
>   - C++ embedders don't have a DraftStore lying around
>   - bug: this code won't find a named but unsaved implementation file (since 
> getCorrespondingHeaderOrSource uses VFS)
> - (also Tweak::Selection isn't a pure abstraction, we can jam the FS in there 
> instead of passing it around as a separate param everywhere)
>
> So I think the right way to expose this to tweaks is to add a 
> `vfs::FileSystem *` member to `Tweak::Selection`, that allows accessing the 
> current FS (as opposed to the one used for building).
> The simplest implementation uses OverlayVFS + InMemoryFS + 
> TUScheduler::getAllFileContents(). This isn't as expensive as it sounds as we 
> need only set the FS pointer for `apply()`.
> (We can also implement a FS that copies more lazily, though I suspect it's 
> not worth it)

I'm getting a little stuck here. I've made a OverlayFS which has the a 
TFS::view as the base, and an InMemoryFS containing the contents of the 
TUScheduler. I Passed that in the Selection and it all worked.
However once I changed the `getSourceFile` function to also use that same FS, 
it would find the file ok, but then clangd would crash(with no visible trace) 
when it tried to open the file.

  auto Buffer = FS.getBufferForFile(*CCFile); // Here

From what I can getCorrespondingSourceOrHeader is querying the InMemoryFS and 
maybe those calls to FS::exists are somehow corrupting something.
Whatever it is, it all seems a bit messed up to me.

I'm gonna try with a debug build (and possibly asan) to see If I could possibly 
get anything more.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D93978

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

Reply via email to