1 //===-- FrontendActions.h - Useful Frontend Actions -------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef LLVM_CLANG_REWRITE_FRONTEND_FRONTENDACTIONS_H
10 #define LLVM_CLANG_REWRITE_FRONTEND_FRONTENDACTIONS_H
11 
12 #include "clang/Frontend/FrontendAction.h"
13 #include "llvm/Support/raw_ostream.h"
14 
15 namespace clang {
16 class FixItRewriter;
17 class FixItOptions;
18 
19 //===----------------------------------------------------------------------===//
20 // AST Consumer Actions
21 //===----------------------------------------------------------------------===//
22 
23 class HTMLPrintAction : public ASTFrontendAction {
24 protected:
25   std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
26                                                  StringRef InFile) override;
27 };
28 
29 class FixItAction : public ASTFrontendAction {
30 protected:
31   std::unique_ptr<FixItRewriter> Rewriter;
32   std::unique_ptr<FixItOptions> FixItOpts;
33 
34   std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
35                                                  StringRef InFile) override;
36 
37   bool BeginSourceFileAction(CompilerInstance &CI) override;
38 
39   void EndSourceFileAction() override;
40 
41   bool hasASTFileSupport() const override { return false; }
42 
43 public:
44   FixItAction();
45   ~FixItAction() override;
46 };
47 
48 /// Emits changes to temporary files and uses them for the original
49 /// frontend action.
50 class FixItRecompile : public WrapperFrontendAction {
51 public:
52   FixItRecompile(std::unique_ptr<FrontendAction> WrappedAction)
53     : WrapperFrontendAction(std::move(WrappedAction)) {}
54 
55 protected:
56   bool BeginInvocation(CompilerInstance &CI) override;
57 };
58 
59 class RewriteObjCAction : public ASTFrontendAction {
60 protected:
61   std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
62                                                  StringRef InFile) override;
63 };
64 
65 class RewriteMacrosAction : public PreprocessorFrontendAction {
66 protected:
67   void ExecuteAction() override;
68 };
69 
70 class RewriteTestAction : public PreprocessorFrontendAction {
71 protected:
72   void ExecuteAction() override;
73 };
74 
75 class RewriteIncludesAction : public PreprocessorFrontendAction {
76   std::shared_ptr<raw_ostream> OutputStream;
77   class RewriteImportsListener;
78 protected:
79   bool BeginSourceFileAction(CompilerInstance &CI) override;
80   void ExecuteAction() override;
81 };
82 
83 }  // end namespace clang
84 
85 #endif
86