[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).
 | 
			
		||||
// 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; };
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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; }");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue