[PATCH] D75479: [clangd] go-to-def on names in comments etc that are used nearby.

Nathan Ridge via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Mar 3 16:07:42 PST 2020


nridge added a comment.

Thanks for putting this together, this is really neat and will indeed complement D72874 <https://reviews.llvm.org/D72874> nicely!

I have one high-level comment about the interface, the rest are nits.



================
Comment at: clang-tools-extra/clangd/XRefs.cpp:337
+  const SourceManager &SM = TB.sourceManager();
+  auto Pos = SM.getDecomposedLoc(SpellingLoc);
+  llvm::StringRef Code = SM.getBufferData(Pos.first);
----------------
nit: I think separate names for the `FileID` and the position would read better


================
Comment at: clang-tools-extra/clangd/XRefs.cpp:369
+  auto Consider = [&](const syntax::Token &Tok) {
+    if(!(Tok.kind() == tok::identifier && Tok.text(SM) == Word))
+      return false;
----------------
nit: space after `if`


================
Comment at: clang-tools-extra/clangd/XRefs.h:56
 
+// If SpellingLoc points at a "word" that does not correspond to an expanded
+// token (e.g. in a comment, a string, or a PP disabled region), then try to
----------------
Do we want to bake this condition into the interface of this function, or would it be more appropriate to just tell the caller whether it's a real identifier token or not?

In particular, given our [plan for handling some dependent cases](https://reviews.llvm.org/D72874#1901722), the caller may want to do something along the lines of `if (notRealIdentifier || isDependent) { /* use the textual heuristic */ }`.


================
Comment at: clang-tools-extra/clangd/unittests/XRefsTests.cpp:871
+TEST(LocateSymbol, NearbyIdentifier) {
+  const char *Tests[] = {
+    R"cpp(
----------------
Tangentially related, but what do you think about the issue I raised in [this mailing list thread](https://lists.llvm.org/pipermail/clangd-dev/2019-November/000579.html) about testcase style?


================
Comment at: clang-tools-extra/clangd/unittests/XRefsTests.cpp:903
+    R"cpp(
+      // prefer nearest occurrence
+      int hello;
----------------
// (taking into account the penalty for going backwards)


================
Comment at: clang-tools-extra/clangd/unittests/XRefsTests.cpp:930
+    llvm::Optional<Range> Nearby;
+    if (const auto*Tok = findNearbyIdentifier(
+        cantFail(sourceLocationInMainFile(SM, T.point())), AST.getTokens()))
----------------
nit: space after `*`


================
Comment at: clang-tools-extra/clangd/unittests/XRefsTests.cpp:937
+    else
+      EXPECT_THAT(Nearby, T.range()) << Test;
+  }
----------------
`EXPECT_EQ`?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D75479





More information about the cfe-commits mailing list