[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
This commit is contained in:
parent
596e4ab97a
commit
80b0cdde0f
|
|
@ -9,6 +9,7 @@
|
||||||
// Some of these are fairly clang-specific and hidden (e.g. textual AST dumps).
|
// 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.
|
// Others are more generally useful (class layout) and are exposed by default.
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
#include "XRefs.h"
|
||||||
#include "refactor/Tweak.h"
|
#include "refactor/Tweak.h"
|
||||||
#include "clang/AST/ASTTypeTraits.h"
|
#include "clang/AST/ASTTypeTraits.h"
|
||||||
#include "clang/AST/Type.h"
|
#include "clang/AST/Type.h"
|
||||||
|
|
@ -94,6 +95,32 @@ public:
|
||||||
};
|
};
|
||||||
REGISTER_TWEAK(ShowSelectionTree)
|
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.
|
/// Shows the layout of the RecordDecl under the cursor.
|
||||||
/// Input:
|
/// Input:
|
||||||
/// struct X { int foo; };
|
/// struct X { int foo; };
|
||||||
|
|
|
||||||
|
|
@ -133,6 +133,15 @@ TEST_F(DumpASTTest, Test) {
|
||||||
HasSubstr("<col:13> 'int' 2")));
|
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);
|
TWEAK_TEST(ShowSelectionTree);
|
||||||
TEST_F(ShowSelectionTreeTest, Test) {
|
TEST_F(ShowSelectionTreeTest, Test) {
|
||||||
EXPECT_AVAILABLE("^int f^oo() { re^turn 2 ^+ 2; }");
|
EXPECT_AVAILABLE("^int f^oo() { re^turn 2 ^+ 2; }");
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue