kadircet added inline comments.

================
Comment at: clang-tools-extra/clangd/XRefs.cpp:1338
+
+    auto ReferencedInclude = convertIncludes(SM, Inc);
+    include_cleaner::walkUsed(
----------------
can we put the rest into a separate function (I know this function is already 
quite long, but I think we shouldn't make it worse, and probably refactor 
soon). I believe something like below should work?
```
std::vector<Reference> getIncludeUsages(const ParsedAST &AST, const Inclusion 
&Include);
```


================
Comment at: clang-tools-extra/clangd/XRefs.cpp:1347
+
+          auto Loc = SM.getFileLoc(Ref.RefLocation);
+          for (const auto &H : Providers) {
----------------
nit: no need to calculate the file location, if we're not going to emit a 
reference. so maybe move this into the place where we're going to use the `Loc`.


================
Comment at: clang-tools-extra/clangd/XRefs.cpp:1347
+
+          auto Loc = SM.getFileLoc(Ref.RefLocation);
+          for (const auto &H : Providers) {
----------------
kadircet wrote:
> nit: no need to calculate the file location, if we're not going to emit a 
> reference. so maybe move this into the place where we're going to use the 
> `Loc`.
this file location might fall outside of the main file when they get expanded 
through `#include` directives, so we need something like 
https://reviews.llvm.org/D147139


================
Comment at: clang-tools-extra/clangd/XRefs.cpp:1348
+          auto Loc = SM.getFileLoc(Ref.RefLocation);
+          for (const auto &H : Providers) {
+            auto MatchingIncludes = ConvertedMainFileIncludes.match(H);
----------------
we're implementing and testing this logic twice now, once in here and once in 
hover. can we instead have a helper in `IncludeCleaner.h` that looks like:
```
std::optional<include_cleaner::Header> firstSatisfiedProvider(const 
include_cleaner::Includes& Includes, llvm::ArrayRef<include_cleaner::Header> 
Providers);
// I'd actually return the matching `std::vector<const Include*>` (the highest 
ranked provider that matched some includes in main file), and check if the 
include of interest is part of that set for rest of the operations.
// Since it represents both the provider and the include in the main file. 
whereas the provider on it's own doesn't say anything about which include in 
main file triggered satisfaction.
```
and turn these call sites into
```
auto Provider = firstSatisfiedProvider(ConvertedMainFileIncludes, Providers);
if(!Provider || ReferencedInclude.match(Provider).empty())
  return;
// Include in question provides the symbol, do magic.
```


================
Comment at: clang-tools-extra/clangd/XRefs.cpp:1358
+              auto TokLen =
+                  Lexer::MeasureTokenLength(Loc, SM, AST.getLangOpts());
+              Result.Loc.range =
----------------
no need to re-run the lexer, these references are inside the main file for 
sure, so you can use token buffer instead.


================
Comment at: clang-tools-extra/clangd/XRefs.cpp:1381
+    Result.Loc.uri = URIMainFile;
+    Results.References.push_back(std::move(Result));
+  }
----------------
we can return Results directly here, no need to run rest of the logic


================
Comment at: clang-tools-extra/clangd/XRefs.cpp:2004
 
-// Given a type targeted by the cursor, return one or more types that are more 
interesting
-// to target.
-static void unwrapFindType(
-    QualType T, const HeuristicResolver* H, llvm::SmallVector<QualType>& Out) {
+// Given a type targeted by the cursor, return one or more types that are more
+// interesting to target.
----------------
can you revert changes below? I feel like they're unrelated formatting changes


================
Comment at: clang-tools-extra/clangd/unittests/XRefsTests.cpp:1909
   TU.ExtraArgs.push_back("-std=c++20");
+  TU.AdditionalFiles["bar.h"] = guard(R"cpp(
+    #define BAR 5
----------------
rather than introducing these into all tests, can we have our own TestTU and 
whatnot in the relevant test? something like MainFileReferencesOnly test


================
Comment at: clang-tools-extra/clangd/unittests/XRefsTests.cpp:2322
+  const char *Tests[] = {
+      R"cpp([[#include ^"bar.h"]]
+        int fstBar = [[bar1]]();
----------------
can you also have a second include header that provides some other symbols and 
make sure references of those don't get highlighted?


================
Comment at: clang-tools-extra/clangd/unittests/XRefsTests.cpp:2329
+
+      R"cpp([[#in^clude <vector>]]
+        std::[[vector]]<int> vec;
----------------
we don't really need rest of these tests, they're testing the "symbol is 
provided by first provider included in the main file" logic


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D147044

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

Reply via email to