[docs] Add LICENSE.txt to the root of the mono-repo
[llvm-project.git] / clang-tools-extra / clang-include-fixer / find-all-symbols / FindAllMacros.h
blob0a51ab192e8de75f20a5df1b1476eea0e9a12bbe
1 //===-- FindAllMacros.h - find all macros -----------------------*- C++ -*-===//
2 //
3 //
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
7 //
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"
17 namespace clang {
18 class MacroInfo;
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 {
27 public:
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;
46 private:
47 llvm::Optional<SymbolInfo> CreateMacroSymbol(const Token &MacroNameTok,
48 const MacroInfo *MD);
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
57 // header.
58 HeaderMapCollector *const Collector;
61 } // namespace find_all_symbols
62 } // namespace clang
64 #endif // LLVM_CLANG_TOOLS_EXTRA_FIND_ALL_SYMBOLS_FIND_ALL_MACROS_H