This revision was automatically updated to reflect the committed changes. Closed by commit rG80b0cdde0ffc: [clangd] Add a hidden tweak to dump symbol under the cursor. (authored by hokein).
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D69517/new/ https://reviews.llvm.org/D69517 Files: clang-tools-extra/clangd/refactor/tweaks/DumpAST.cpp clang-tools-extra/clangd/unittests/TweakTests.cpp Index: clang-tools-extra/clangd/unittests/TweakTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/TweakTests.cpp +++ clang-tools-extra/clangd/unittests/TweakTests.cpp @@ -133,6 +133,15 @@ 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; }"); Index: clang-tools-extra/clangd/refactor/tweaks/DumpAST.cpp =================================================================== --- clang-tools-extra/clangd/refactor/tweaks/DumpAST.cpp +++ 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 @@ }; 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; };
Index: clang-tools-extra/clangd/unittests/TweakTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/TweakTests.cpp +++ clang-tools-extra/clangd/unittests/TweakTests.cpp @@ -133,6 +133,15 @@ 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; }"); Index: clang-tools-extra/clangd/refactor/tweaks/DumpAST.cpp =================================================================== --- clang-tools-extra/clangd/refactor/tweaks/DumpAST.cpp +++ 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 @@ }; 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; };
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits