1 //===-- FindAllMacros.h - find all macros -----------------------*- C++ -*-===//
4 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5 // See https://llvm.org/LICENSE.txt for license information.
6 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
8 //===----------------------------------------------------------------------===//
10 #ifndef LLVM_CLANG_TOOLS_EXTRA_FIND_ALL_SYMBOLS_FIND_ALL_MACROS_H
11 #define LLVM_CLANG_TOOLS_EXTRA_FIND_ALL_SYMBOLS_FIND_ALL_MACROS_H
13 #include "SymbolInfo.h"
14 #include "SymbolReporter.h"
15 #include "clang/Lex/PPCallbacks.h"
19 namespace find_all_symbols
{
21 class HeaderMapCollector
;
23 /// A preprocessor that collects all macro symbols.
24 /// The contexts of a macro will be ignored since they are not available during
25 /// preprocessing period.
26 class FindAllMacros
: public clang::PPCallbacks
{
28 explicit FindAllMacros(SymbolReporter
*Reporter
, SourceManager
*SM
,
29 HeaderMapCollector
*Collector
= nullptr)
30 : Reporter(Reporter
), SM(SM
), Collector(Collector
) {}
32 void MacroDefined(const Token
&MacroNameTok
,
33 const MacroDirective
*MD
) override
;
35 void MacroExpands(const Token
&MacroNameTok
, const MacroDefinition
&MD
,
36 SourceRange Range
, const MacroArgs
*Args
) override
;
38 void Ifdef(SourceLocation Loc
, const Token
&MacroNameTok
,
39 const MacroDefinition
&MD
) override
;
41 void Ifndef(SourceLocation Loc
, const Token
&MacroNameTok
,
42 const MacroDefinition
&MD
) override
;
44 void EndOfMainFile() override
;
47 llvm::Optional
<SymbolInfo
> CreateMacroSymbol(const Token
&MacroNameTok
,
49 // Not a callback, just a common path for all usage types.
50 void MacroUsed(const Token
&Name
, const MacroDefinition
&MD
);
52 SymbolInfo::SignalMap FileSymbols
;
53 // Reporter for SymbolInfo.
54 SymbolReporter
*const Reporter
;
55 SourceManager
*const SM
;
56 // A remapping header file collector allowing clients to include a different
58 HeaderMapCollector
*const Collector
;
61 } // namespace find_all_symbols
64 #endif // LLVM_CLANG_TOOLS_EXTRA_FIND_ALL_SYMBOLS_FIND_ALL_MACROS_H