[PATCH] D41991: [clangd] Always use preamble (even stale) for code completion

Sam McCall via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Jan 17 08:13:46 PST 2018

sammccall accepted this revision.
sammccall added a comment.
This revision is now accepted and ready to land.
Herald added a reviewer: jkorous-apple.

Big +1 to the change here.
Just suggestions for the comments.

Comment at: clangd/CodeComplete.cpp:522
-  // Attempt to reuse the PCH from precompiled preamble, if it was built.
-  if (Preamble) {
-    auto Bounds =
-        ComputePreambleBounds(*CI->getLangOpts(), ContentsBuffer.get(), 0);
-    if (!Preamble->CanReuse(*CI, ContentsBuffer.get(), Bounds, VFS.get()))
-      Preamble = nullptr;
-  }
+  // Note that we delibirately don't check if preamble is up-to-date. This
+  // operation is very expensive and we feel the right trade-off here is to
delibirately -> deliberately

Thanks for adding the motivation here! I think this can be a bit terser, but up to you.
  // We reuse the preamble whether it's valid or not. This is a correctness/performance 
  // tradeoff: building without a preamble is slow, and completion is latency-sensitive.

Comment at: clangd/Compiler.h:39
+/// be consumed by the FrontendAction as it will have a pointer to the MainFile
+/// buffer that will only be deleted if BeginSourceFile is called.
 std::unique_ptr<CompilerInstance> prepareCompilerInstance(
bkramer wrote:
> This comment is somewhat messy now. Can you rephrase it a bit?
+1, this has grown a bit unwieldy. Maybe:
  /// Creates a compiler which will build the provided file.
  /// The preamble will not be checked for validity - caller should do that if needed.
  /// The returned compiler's VFS may differ due to command-line flags.
  /// The returned value must be consumed by a FrontendAction to avoid leaking MainFile.
  /// May return null in error cases.

  rCTE Clang Tools Extra


More information about the cfe-commits mailing list