[PATCH] D81720: [clangd] Change prepareCompilerInstance to take an FSProvider

Sam McCall via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Jun 17 07:31:35 PDT 2020


sammccall added a comment.

Yay for getting rid of more VFSes passed around. Not sure about some of the other signature changes to prepareCompilerInstance. It seems a bit harder to call now.

In particular I'm not sure whether moving the preamble-stat-cache across setup from caller to callee is really an improvement once we modify that to wrap a ThreadsafeFS instead of a FS.
It's just... a reminder to use the cache, I guess? But the , nullptr, nullptr is annoying where we don't care about that.



================
Comment at: clang-tools-extra/clangd/Compiler.cpp:104
+    const PreambleFileStatusCache *FSCache) {
+  assert(FSProvider && "FSProvider is null");
   assert(!CI->getPreprocessorOpts().RetainRemappedFileBuffers &&
----------------
why is this a reference if it can't be null?

(otherwise, remove the assert message - just repeats the assertion)


================
Comment at: clang-tools-extra/clangd/Compiler.h:78
 std::unique_ptr<CompilerInstance> prepareCompilerInstance(
-    std::unique_ptr<clang::CompilerInvocation>, const PrecompiledPreamble *,
-    std::unique_ptr<llvm::MemoryBuffer> MainFile,
-    IntrusiveRefCntPtr<llvm::vfs::FileSystem>, DiagnosticConsumer &);
+    std::unique_ptr<clang::CompilerInvocation> CI,
+    std::unique_ptr<llvm::MemoryBuffer> Buffer, DiagnosticConsumer &DiagsClient,
----------------
none of the new parameter names say anything beyond repeating the types, can we drop them?


================
Comment at: clang-tools-extra/clangd/Compiler.h:79
+    std::unique_ptr<clang::CompilerInvocation> CI,
+    std::unique_ptr<llvm::MemoryBuffer> Buffer, DiagnosticConsumer &DiagsClient,
+    const tooling::CompileCommand &Cmd, const FileSystemProvider *FSProvider,
----------------
nit: grouping of parameters seems a bit confusing, preamble + mainfile together (in either order) was clearer I think. DiagnosticConsumer is logically an output param, nice to keep it at the end. Why split the FSProvider and the FS cache, etc.


================
Comment at: clang-tools-extra/clangd/Compiler.h:80
+    std::unique_ptr<llvm::MemoryBuffer> Buffer, DiagnosticConsumer &DiagsClient,
+    const tooling::CompileCommand &Cmd, const FileSystemProvider *FSProvider,
+    const PrecompiledPreamble *Preamble,
----------------
It doesn't seem reasonable to require both CompilerInvocation and CompileCommand. We can pass working dir in if we must...

(CompilerInvocation actually has a working directory field, but it looks like it potentially changes behavior. We could consider setting it in buildCompilerInvocation() in future...)


================
Comment at: clang-tools-extra/clangd/ParsedAST.cpp:356
   llvm::Optional<IncludeFixer> FixIncludes;
-  auto BuildDir = VFS->getCurrentWorkingDirectory();
-  if (Inputs.Opts.SuggestMissingIncludes && Inputs.Index &&
-      !BuildDir.getError()) {
-    auto Style = getFormatStyleForFile(Filename, Inputs.Contents, VFS.get());
+  // FIXME: Why not use CompileCommand.Directory instead?
+  if (Inputs.Opts.SuggestMissingIncludes && Inputs.Index) {
----------------
you appear to have added the fixme and... also fixed it


================
Comment at: clang-tools-extra/clangd/index/Background.cpp:273
+                              /*Preamble=*/nullptr,
+                              /*FSCache=*/nullptr);
   if (!Clang)
----------------
hmm!


================
Comment at: clang-tools-extra/clangd/unittests/PreambleTests.cpp:78
+      Diags, PI.CompileCommand, PI.FSProvider, &BaselinePreamble->Preamble,
+      BaselinePreamble->StatCache.get());
   PreprocessOnlyAction Action;
----------------
why this change?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D81720





More information about the cfe-commits mailing list