ioeric added inline comments.

================
Comment at: clangd/FileDistance.cpp:9
+//===----------------------------------------------------------------------===//
+//
+//
----------------
Is this intentionally reserved?


================
Comment at: clangd/FileDistance.cpp:51
+    for (StringRef Rest = Canonical; !Rest.empty();) {
+      Rest = parent_path(Rest, sys::path::Style::posix);
+      auto NextHash = hash_value(Rest);
----------------
nit: this probably deserve a comment or a better formatting. It looks like part 
of the loop incremental.


================
Comment at: clangd/FileDistance.cpp:86
+  auto Canonical = canonicalize(Path);
+  unsigned Cost = kUnreachable;
+  SmallVector<hash_code, 16> Ancestors;
----------------
Should we also check the cache here?


================
Comment at: unittests/clangd/FileDistanceTests.cpp:36
+  // Ancestor (up+up+up+up)
+  EXPECT_EQ(D.distance("/"), 22u);
+  // Sibling (up+down)
----------------
sammccall wrote:
> ioeric wrote:
> > I think this is an interesting case. IIUC, 22u is contributed by 4 ups 
> > (4*5) and 1 include (1*2, via `llvm/ADT/StringRef.h`). 
> > 
> > Suppose `a/b/c/d/e/f.cc` includes `base/x.h`, then the shortest path into 
> > directory `other/` is likely to go via `base/x.h`. This might become a 
> > problem if `base/x.h` is very commonly used. One solution is probably to 
> > penalize edits that hit the root.
> Yeah, this could be a weakness. I don't think this is specific to #includes, 
> or to root directories.
> I think the generalization is that there exist directories (like 
> /usr/include) whose siblings are unrelated. Down-traversals in these 
> directories should be more expensive. I've added a Caveats section to the 
> FileDistance documentation, but I would like to avoid adding special cases 
> until we can see how much difference they make.
As chatted offline, this could be still concerning as it's not uncommon for 
files to include headers from top-level directories. I think the idea you 
proposed - restricting up traversals from included files, could address the 
problem.


Repository:
  rCTE Clang Tools Extra

https://reviews.llvm.org/D48441



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

Reply via email to