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//===----------------------------------------------------------------------===//
9
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
12
13#include "SymbolInfo.h"
14#include "SymbolReporter.h"
15#include "clang/Lex/PPCallbacks.h"
16#include <optional>
17
18namespace clang {
19class MacroInfo;
20namespace find_all_symbols {
21
22class HeaderMapCollector;
23
24/// A preprocessor that collects all macro symbols.
25/// The contexts of a macro will be ignored since they are not available during
26/// preprocessing period.
27class FindAllMacros : public clang::PPCallbacks {
28public:
29 explicit FindAllMacros(SymbolReporter *Reporter, SourceManager *SM,
30 HeaderMapCollector *Collector = nullptr)
31 : Reporter(Reporter), SM(SM), Collector(Collector) {}
32
33 void MacroDefined(const Token &MacroNameTok,
34 const MacroDirective *MD) override;
35
36 void MacroExpands(const Token &MacroNameTok, const MacroDefinition &MD,
37 SourceRange Range, const MacroArgs *Args) override;
38
39 void Ifdef(SourceLocation Loc, const Token &MacroNameTok,
40 const MacroDefinition &MD) override;
41
42 void Ifndef(SourceLocation Loc, const Token &MacroNameTok,
43 const MacroDefinition &MD) override;
44
45 void EndOfMainFile() override;
46
47private:
48 std::optional<SymbolInfo> CreateMacroSymbol(const Token &MacroNameTok,
49 const MacroInfo *MD);
50 // Not a callback, just a common path for all usage types.
51 void MacroUsed(const Token &Name, const MacroDefinition &MD);
52
53 SymbolInfo::SignalMap FileSymbols;
54 // Reporter for SymbolInfo.
55 SymbolReporter *const Reporter;
56 SourceManager *const SM;
57 // A remapping header file collector allowing clients to include a different
58 // header.
59 HeaderMapCollector *const Collector;
60};
61
62} // namespace find_all_symbols
63} // namespace clang
64
65#endif // LLVM_CLANG_TOOLS_EXTRA_FIND_ALL_SYMBOLS_FIND_ALL_MACROS_H
66

source code of clang-tools-extra/clang-include-fixer/find-all-symbols/FindAllMacros.h