Home | History | Annotate | Line # | Download | only in Frontend
      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