14 #include "clang/Basic/IdentifierTable.h" 15 #include "clang/Basic/SourceManager.h" 16 #include "clang/Lex/MacroInfo.h" 17 #include "clang/Lex/Token.h" 18 #include "llvm/Support/Path.h" 21 namespace find_all_symbols {
23 llvm::Optional<SymbolInfo>
24 FindAllMacros::CreateMacroSymbol(
const Token &MacroNameTok,
25 const MacroInfo *info) {
26 std::string FilePath =
30 return SymbolInfo(MacroNameTok.getIdentifierInfo()->getName(),
35 const MacroDirective *MD) {
36 if (
auto Symbol = CreateMacroSymbol(MacroNameTok, MD->getMacroInfo()))
37 ++FileSymbols[*Symbol].Seen;
40 void FindAllMacros::MacroUsed(
const Token &
Name,
const MacroDefinition &MD) {
41 if (!MD || !SM->isInMainFile(SM->getExpansionLoc(Name.getLocation())))
43 if (
auto Symbol = CreateMacroSymbol(Name, MD.getMacroInfo()))
44 ++FileSymbols[*Symbol].Used;
48 const MacroDefinition &MD, SourceRange
Range,
49 const MacroArgs *Args) {
50 MacroUsed(MacroNameTok, MD);
54 const MacroDefinition &MD) {
55 MacroUsed(MacroNameTok, MD);
59 const MacroDefinition &MD) {
60 MacroUsed(MacroNameTok, MD);
64 Reporter->
reportSymbols(SM->getFileEntryForID(SM->getMainFileID())->getName(),
SourceLocation Loc
'#' location in the include directive
void Ifdef(SourceLocation Loc, const Token &MacroNameTok, const MacroDefinition &MD) override
virtual void reportSymbols(llvm::StringRef FileName, const SymbolInfo::SignalMap &Symbols)=0
void MacroExpands(const Token &MacroNameTok, const MacroDefinition &MD, SourceRange Range, const MacroArgs *Args) override
std::string getIncludePath(const SourceManager &SM, SourceLocation Loc, const HeaderMapCollector *Collector)
This calculates the include path for Loc.
void EndOfMainFile() override
void Ifndef(SourceLocation Loc, const Token &MacroNameTok, const MacroDefinition &MD) override
clang::find_all_symbols::SymbolInfo SymbolInfo
void MacroDefined(const Token &MacroNameTok, const MacroDirective *MD) override
===– Representation.cpp - ClangDoc Representation --------—*- C++ -*-===//
CharSourceRange Range
SourceRange for the file name.