[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
Mon Apr 20 23:18:19 PDT 2020


nridge accepted this revision.
nridge added a comment.
This revision is now accepted and ready to land.

Thanks, Sam, this looks great!



================
Comment at: clang-tools-extra/clangd/SourceCode.cpp:883
 
+static bool isLikelyIdentifier(llvm::StringRef Word, StringRef Before,
+                               StringRef After) {
----------------
nit: qualify StringRef or not consistently


================
Comment at: clang-tools-extra/clangd/SourceCode.cpp:891
+    return true;
+  // Doxygen tags like \c foo indicate identifiers.
+  // Don't search too far back.
----------------
It's interesting to note that clang has a lexer and parser for doxygen comments (see e.g. `RawComment::parse()`), so we could conceivably do something more structured, but it's probably not worth the effort.


================
Comment at: clang-tools-extra/clangd/SourceCode.cpp:938
+          TB.expandedTokens(SM.getMacroArgExpandedLocation(T.location()));
+      if (!Expanded.empty() && Expanded.size() == 1 &&
+          Expanded.front().text(SM) == Result.Text)
----------------
`Expanded.size() == 1` implies `!Expanded.empty()`


================
Comment at: clang-tools-extra/clangd/SourceCode.h:244
+  // - Text is identifier-like (e.g. "foo_bar")
+  // - Text is surrounded by quotes (e.g. Foo in "// returns `Foo`")
+  bool LikelyIdentifier = false;
----------------
quotes --> backticks?


================
Comment at: clang-tools-extra/clangd/XRefs.cpp:451
+    assert(SM.getFileID(Loc) == File && "spelled token in wrong file?");
+    unsigned Line = SM.getLineNumber(File, SM.getFileOffset(Loc));
+    if (Line > WordLine)
----------------
Is this any different from `getSpellingLineNumber(Loc)`?


================
Comment at: clang-tools-extra/clangd/unittests/SourceCodeTests.cpp:392
+  EXPECT_TRUE(word("// bar::[[f^oo]] ").LikelyIdentifier);
+  EXPECT_TRUE(word("// [[f^oo]]::bar ").LikelyIdentifier);
+}
----------------
Maybe test the initialism thing with `EXPECT_FALSE(word("// [[H^TTP]] ").LikelyIdentifier);`


================
Comment at: clang-tools-extra/clangd/unittests/XRefsTests.cpp:1028
+      int [[hello]];
+      const char* greeting = "h^ello, world";
+    )cpp",
----------------
What's the rationale for supporting string literals for the nearby-ident heuristic, but not the index heuristic?


================
Comment at: clang-tools-extra/clangd/unittests/XRefsTests.cpp:1032
+      R"cpp(
+      // can refer to macro invocations (even if they expand to nothing)
+      #define INT int
----------------
(Did you mean to write a test case where the macro invocation expands to nothing?)


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