summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/clangd
diff options
context:
space:
mode:
authorHaojian Wu <hokein.wu@gmail.com>2019-10-28 16:27:42 +0100
committerHaojian Wu <hokein.wu@gmail.com>2019-10-29 13:06:34 +0100
commit80b0cdde0ffc4ca59e99fed3dcb18412ff97568c (patch)
tree5199a1eedda40cca82ac6fc2782679ddb8b6f341 /clang-tools-extra/clangd
parent596e4ab97a1637d2c7781aed20e3d62bcf07ef5d (diff)
downloadbcm5719-llvm-80b0cdde0ffc4ca59e99fed3dcb18412ff97568c.tar.gz
bcm5719-llvm-80b0cdde0ffc4ca59e99fed3dcb18412ff97568c.zip
[clangd] Add a hidden tweak to dump symbol under the cursor.
Summary: This provides a convenient way to see the SymbolID/USR of the symbol, mainly for debugging purpose. Reviewers: ilya-biryukov Subscribers: MaskRay, jkorous, arphaman, kadircet, usaxena95, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D69517
Diffstat (limited to 'clang-tools-extra/clangd')
-rw-r--r--clang-tools-extra/clangd/refactor/tweaks/DumpAST.cpp27
-rw-r--r--clang-tools-extra/clangd/unittests/TweakTests.cpp9
2 files changed, 36 insertions, 0 deletions
diff --git a/clang-tools-extra/clangd/refactor/tweaks/DumpAST.cpp b/clang-tools-extra/clangd/refactor/tweaks/DumpAST.cpp
index 9baa8fa4ad6..ed3725bf7ea 100644
--- a/clang-tools-extra/clangd/refactor/tweaks/DumpAST.cpp
+++ b/clang-tools-extra/clangd/refactor/tweaks/DumpAST.cpp
@@ -9,6 +9,7 @@
// Some of these are fairly clang-specific and hidden (e.g. textual AST dumps).
// Others are more generally useful (class layout) and are exposed by default.
//===----------------------------------------------------------------------===//
+#include "XRefs.h"
#include "refactor/Tweak.h"
#include "clang/AST/ASTTypeTraits.h"
#include "clang/AST/Type.h"
@@ -94,6 +95,32 @@ public:
};
REGISTER_TWEAK(ShowSelectionTree)
+/// Dumps the symbol under the cursor.
+/// Inputs:
+/// void foo();
+/// ^^^
+/// Message:
+/// foo -
+/// {"containerName":null,"id":"CA2EBE44A1D76D2A","name":"foo","usr":"c:@F@foo#"}
+class DumpSymbol : public Tweak {
+ const char *id() const override final;
+ bool prepare(const Selection &Inputs) override { return true; }
+ Expected<Effect> apply(const Selection &Inputs) override {
+ std::string Storage;
+ llvm::raw_string_ostream Out(Storage);
+
+ for (auto &Sym : getSymbolInfo(
+ Inputs.AST,
+ sourceLocToPosition(Inputs.AST.getSourceManager(), Inputs.Cursor)))
+ Out << Sym;
+ return Effect::showMessage(Out.str());
+ }
+ std::string title() const override { return "Dump symbol under the cursor"; }
+ Intent intent() const override { return Info; }
+ bool hidden() const override { return true; }
+};
+REGISTER_TWEAK(DumpSymbol)
+
/// Shows the layout of the RecordDecl under the cursor.
/// Input:
/// struct X { int foo; };
diff --git a/clang-tools-extra/clangd/unittests/TweakTests.cpp b/clang-tools-extra/clangd/unittests/TweakTests.cpp
index f68dff131d9..f14383b2408 100644
--- a/clang-tools-extra/clangd/unittests/TweakTests.cpp
+++ b/clang-tools-extra/clangd/unittests/TweakTests.cpp
@@ -133,6 +133,15 @@ TEST_F(DumpASTTest, Test) {
HasSubstr("<col:13> 'int' 2")));
}
+TWEAK_TEST(DumpSymbol);
+TEST_F(DumpSymbolTest, Test) {
+ std::string ID = R"("id":"CA2EBE44A1D76D2A")";
+ std::string USR = R"("usr":"c:@F@foo#")";
+ EXPECT_THAT(apply("void f^oo();"),
+ AllOf(StartsWith("message:"), testing::HasSubstr(ID),
+ testing::HasSubstr(USR)));
+}
+
TWEAK_TEST(ShowSelectionTree);
TEST_F(ShowSelectionTreeTest, Test) {
EXPECT_AVAILABLE("^int f^oo() { re^turn 2 ^+ 2; }");
OpenPOWER on IntegriCloud