[clang-tools-extra] cb2d04d - [clangd] Hide inlay hints when using a macro as a calling argument that with a param comment

Younan Zhang via cfe-commits cfe-commits at lists.llvm.org
Sun Feb 26 03:06:52 PST 2023


Author: Younan Zhang
Date: 2023-02-26T19:06:44+08:00
New Revision: cb2d04d41e47e65812434f775215247bfe19b3dd

URL: https://github.com/llvm/llvm-project/commit/cb2d04d41e47e65812434f775215247bfe19b3dd
DIFF: https://github.com/llvm/llvm-project/commit/cb2d04d41e47e65812434f775215247bfe19b3dd.diff

LOG: [clangd] Hide inlay hints when using a macro as a calling argument that with a param comment

We don't want to produce inlay hints for arguments for which
user has left param name comments. But we're not decomposing
location of the parameter correctly at the moment because the
location we've passed into `SM.getDecomposedLoc` is not always
FileID.

Fixes clangd/clangd#1495

Reviewed By: nridge

Differential Revision: https://reviews.llvm.org/D144074

Added: 
    

Modified: 
    clang-tools-extra/clangd/InlayHints.cpp
    clang-tools-extra/clangd/unittests/InlayHintTests.cpp

Removed: 
    


################################################################################
diff  --git a/clang-tools-extra/clangd/InlayHints.cpp b/clang-tools-extra/clangd/InlayHints.cpp
index a009f84d448ae..aa85551b1cedb 100644
--- a/clang-tools-extra/clangd/InlayHints.cpp
+++ b/clang-tools-extra/clangd/InlayHints.cpp
@@ -516,8 +516,8 @@ class InlayHintVisitor : public RecursiveASTVisitor<InlayHintVisitor> {
   // at the end.
   bool isPrecededByParamNameComment(const Expr *E, StringRef ParamName) {
     auto &SM = AST.getSourceManager();
-    auto ExprStartLoc = SM.getTopMacroCallerLoc(E->getBeginLoc());
-    auto Decomposed = SM.getDecomposedLoc(ExprStartLoc);
+    auto FileLoc = SM.getFileLoc(E->getBeginLoc());
+    auto Decomposed = SM.getDecomposedLoc(FileLoc);
     if (Decomposed.first != MainFileID)
       return false;
 

diff  --git a/clang-tools-extra/clangd/unittests/InlayHintTests.cpp b/clang-tools-extra/clangd/unittests/InlayHintTests.cpp
index da9073c77f7c9..cda86f30c3da6 100644
--- a/clang-tools-extra/clangd/unittests/InlayHintTests.cpp
+++ b/clang-tools-extra/clangd/unittests/InlayHintTests.cpp
@@ -1050,9 +1050,15 @@ TEST(ParameterHints, ParamNameComment) {
     void bar() {
       foo(/*param*/42);
       foo( /* param = */ 42);
+#define X 42
+#define Y X
+#define Z(...) Y
+      foo(/*param=*/Z(a));
+      foo($macro[[Z(a)]]);
       foo(/* the answer */$param[[42]]);
     }
   )cpp",
+                       ExpectedHint{"param: ", "macro"},
                        ExpectedHint{"param: ", "param"});
 }
 


        


More information about the cfe-commits mailing list