summaryrefslogtreecommitdiff
path: root/clang-r353983e/include/clang/Rewrite/Frontend
diff options
context:
space:
mode:
Diffstat (limited to 'clang-r353983e/include/clang/Rewrite/Frontend')
-rw-r--r--clang-r353983e/include/clang/Rewrite/Frontend/ASTConsumers.h48
-rw-r--r--clang-r353983e/include/clang/Rewrite/Frontend/FixItRewriter.h134
-rw-r--r--clang-r353983e/include/clang/Rewrite/Frontend/FrontendActions.h85
-rw-r--r--clang-r353983e/include/clang/Rewrite/Frontend/Rewriters.h34
4 files changed, 301 insertions, 0 deletions
diff --git a/clang-r353983e/include/clang/Rewrite/Frontend/ASTConsumers.h b/clang-r353983e/include/clang/Rewrite/Frontend/ASTConsumers.h
new file mode 100644
index 00000000..618b3805
--- /dev/null
+++ b/clang-r353983e/include/clang/Rewrite/Frontend/ASTConsumers.h
@@ -0,0 +1,48 @@
+//===--- ASTConsumers.h - ASTConsumer implementations -----------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// AST Consumers.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_REWRITE_FRONTEND_ASTCONSUMERS_H
+#define LLVM_CLANG_REWRITE_FRONTEND_ASTCONSUMERS_H
+
+#include "clang/Basic/LLVM.h"
+#include <memory>
+#include <string>
+
+namespace clang {
+
+class ASTConsumer;
+class DiagnosticsEngine;
+class LangOptions;
+class Preprocessor;
+
+// ObjC rewriter: attempts to rewrite ObjC constructs into pure C code.
+// This is considered experimental, and only works with Apple's ObjC runtime.
+std::unique_ptr<ASTConsumer>
+CreateObjCRewriter(const std::string &InFile, std::unique_ptr<raw_ostream> OS,
+ DiagnosticsEngine &Diags, const LangOptions &LOpts,
+ bool SilenceRewriteMacroWarning);
+std::unique_ptr<ASTConsumer>
+CreateModernObjCRewriter(const std::string &InFile,
+ std::unique_ptr<raw_ostream> OS,
+ DiagnosticsEngine &Diags, const LangOptions &LOpts,
+ bool SilenceRewriteMacroWarning, bool LineInfo);
+
+/// CreateHTMLPrinter - Create an AST consumer which rewrites source code to
+/// HTML with syntax highlighting suitable for viewing in a web-browser.
+std::unique_ptr<ASTConsumer> CreateHTMLPrinter(std::unique_ptr<raw_ostream> OS,
+ Preprocessor &PP,
+ bool SyntaxHighlight = true,
+ bool HighlightMacros = true);
+
+} // end clang namespace
+
+#endif
diff --git a/clang-r353983e/include/clang/Rewrite/Frontend/FixItRewriter.h b/clang-r353983e/include/clang/Rewrite/Frontend/FixItRewriter.h
new file mode 100644
index 00000000..f514f362
--- /dev/null
+++ b/clang-r353983e/include/clang/Rewrite/Frontend/FixItRewriter.h
@@ -0,0 +1,134 @@
+//===- FixItRewriter.h - Fix-It Rewriter Diagnostic Client ------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This is a diagnostic client adaptor that performs rewrites as
+// suggested by code modification hints attached to diagnostics. It
+// then forwards any diagnostics to the adapted diagnostic client.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_REWRITE_FRONTEND_FIXITREWRITER_H
+#define LLVM_CLANG_REWRITE_FRONTEND_FIXITREWRITER_H
+
+#include "clang/Basic/Diagnostic.h"
+#include "clang/Basic/LLVM.h"
+#include "clang/Basic/SourceLocation.h"
+#include "clang/Edit/EditedSource.h"
+#include "clang/Rewrite/Core/Rewriter.h"
+#include <memory>
+#include <string>
+#include <utility>
+#include <vector>
+
+namespace clang {
+
+class LangOptions;
+class SourceManager;
+
+class FixItOptions {
+public:
+ FixItOptions() = default;
+ virtual ~FixItOptions();
+
+ /// This file is about to be rewritten. Return the name of the file
+ /// that is okay to write to.
+ ///
+ /// \param fd out parameter for file descriptor. After the call it may be set
+ /// to an open file descriptor for the returned filename, or it will be -1
+ /// otherwise.
+ virtual std::string RewriteFilename(const std::string &Filename, int &fd) = 0;
+
+ /// True if files should be updated in place. RewriteFilename is only called
+ /// if this is false.
+ bool InPlace = false;
+
+ /// Whether to abort fixing a file when not all errors could be fixed.
+ bool FixWhatYouCan = false;
+
+ /// Whether to only fix warnings and not errors.
+ bool FixOnlyWarnings = false;
+
+ /// If true, only pass the diagnostic to the actual diagnostic consumer
+ /// if it is an error or a fixit was applied as part of the diagnostic.
+ /// It basically silences warnings without accompanying fixits.
+ bool Silent = false;
+};
+
+class FixItRewriter : public DiagnosticConsumer {
+ /// The diagnostics machinery.
+ DiagnosticsEngine &Diags;
+
+ edit::EditedSource Editor;
+
+ /// The rewriter used to perform the various code
+ /// modifications.
+ Rewriter Rewrite;
+
+ /// The diagnostic client that performs the actual formatting
+ /// of error messages.
+ DiagnosticConsumer *Client;
+ std::unique_ptr<DiagnosticConsumer> Owner;
+
+ /// Turn an input path into an output path. NULL implies overwriting
+ /// the original.
+ FixItOptions *FixItOpts;
+
+ /// The number of rewriter failures.
+ unsigned NumFailures = 0;
+
+ /// Whether the previous diagnostic was not passed to the consumer.
+ bool PrevDiagSilenced = false;
+
+public:
+ /// Initialize a new fix-it rewriter.
+ FixItRewriter(DiagnosticsEngine &Diags, SourceManager &SourceMgr,
+ const LangOptions &LangOpts, FixItOptions *FixItOpts);
+
+ /// Destroy the fix-it rewriter.
+ ~FixItRewriter() override;
+
+ /// Check whether there are modifications for a given file.
+ bool IsModified(FileID ID) const {
+ return Rewrite.getRewriteBufferFor(ID) != nullptr;
+ }
+
+ using iterator = Rewriter::buffer_iterator;
+
+ // Iteration over files with changes.
+ iterator buffer_begin() { return Rewrite.buffer_begin(); }
+ iterator buffer_end() { return Rewrite.buffer_end(); }
+
+ /// Write a single modified source file.
+ ///
+ /// \returns true if there was an error, false otherwise.
+ bool WriteFixedFile(FileID ID, raw_ostream &OS);
+
+ /// Write the modified source files.
+ ///
+ /// \returns true if there was an error, false otherwise.
+ bool WriteFixedFiles(
+ std::vector<std::pair<std::string, std::string>> *RewrittenFiles = nullptr);
+
+ /// IncludeInDiagnosticCounts - This method (whose default implementation
+ /// returns true) indicates whether the diagnostics handled by this
+ /// DiagnosticConsumer should be included in the number of diagnostics
+ /// reported by DiagnosticsEngine.
+ bool IncludeInDiagnosticCounts() const override;
+
+ /// HandleDiagnostic - Handle this diagnostic, reporting it to the user or
+ /// capturing it to a log as needed.
+ void HandleDiagnostic(DiagnosticsEngine::Level DiagLevel,
+ const Diagnostic &Info) override;
+
+ /// Emit a diagnostic via the adapted diagnostic client.
+ void Diag(SourceLocation Loc, unsigned DiagID);
+};
+
+} // namespace clang
+
+#endif // LLVM_CLANG_REWRITE_FRONTEND_FIXITREWRITER_H
diff --git a/clang-r353983e/include/clang/Rewrite/Frontend/FrontendActions.h b/clang-r353983e/include/clang/Rewrite/Frontend/FrontendActions.h
new file mode 100644
index 00000000..4e9d1941
--- /dev/null
+++ b/clang-r353983e/include/clang/Rewrite/Frontend/FrontendActions.h
@@ -0,0 +1,85 @@
+//===-- FrontendActions.h - Useful Frontend Actions -------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_REWRITE_FRONTEND_FRONTENDACTIONS_H
+#define LLVM_CLANG_REWRITE_FRONTEND_FRONTENDACTIONS_H
+
+#include "clang/Frontend/FrontendAction.h"
+#include "llvm/Support/raw_ostream.h"
+
+namespace clang {
+class FixItRewriter;
+class FixItOptions;
+
+//===----------------------------------------------------------------------===//
+// AST Consumer Actions
+//===----------------------------------------------------------------------===//
+
+class HTMLPrintAction : public ASTFrontendAction {
+protected:
+ std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
+ StringRef InFile) override;
+};
+
+class FixItAction : public ASTFrontendAction {
+protected:
+ std::unique_ptr<FixItRewriter> Rewriter;
+ std::unique_ptr<FixItOptions> FixItOpts;
+
+ std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
+ StringRef InFile) override;
+
+ bool BeginSourceFileAction(CompilerInstance &CI) override;
+
+ void EndSourceFileAction() override;
+
+ bool hasASTFileSupport() const override { return false; }
+
+public:
+ FixItAction();
+ ~FixItAction() override;
+};
+
+/// Emits changes to temporary files and uses them for the original
+/// frontend action.
+class FixItRecompile : public WrapperFrontendAction {
+public:
+ FixItRecompile(std::unique_ptr<FrontendAction> WrappedAction)
+ : WrapperFrontendAction(std::move(WrappedAction)) {}
+
+protected:
+ bool BeginInvocation(CompilerInstance &CI) override;
+};
+
+class RewriteObjCAction : public ASTFrontendAction {
+protected:
+ std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
+ StringRef InFile) override;
+};
+
+class RewriteMacrosAction : public PreprocessorFrontendAction {
+protected:
+ void ExecuteAction() override;
+};
+
+class RewriteTestAction : public PreprocessorFrontendAction {
+protected:
+ void ExecuteAction() override;
+};
+
+class RewriteIncludesAction : public PreprocessorFrontendAction {
+ std::shared_ptr<raw_ostream> OutputStream;
+ class RewriteImportsListener;
+protected:
+ bool BeginSourceFileAction(CompilerInstance &CI) override;
+ void ExecuteAction() override;
+};
+
+} // end namespace clang
+
+#endif
diff --git a/clang-r353983e/include/clang/Rewrite/Frontend/Rewriters.h b/clang-r353983e/include/clang/Rewrite/Frontend/Rewriters.h
new file mode 100644
index 00000000..3f933221
--- /dev/null
+++ b/clang-r353983e/include/clang/Rewrite/Frontend/Rewriters.h
@@ -0,0 +1,34 @@
+//===--- Rewriters.h - Rewriter implementations -------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This header contains miscellaneous utilities for various front-end actions.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_REWRITE_FRONTEND_REWRITERS_H
+#define LLVM_CLANG_REWRITE_FRONTEND_REWRITERS_H
+
+#include "clang/Basic/LLVM.h"
+
+namespace clang {
+class Preprocessor;
+class PreprocessorOutputOptions;
+
+/// RewriteMacrosInInput - Implement -rewrite-macros mode.
+void RewriteMacrosInInput(Preprocessor &PP, raw_ostream *OS);
+
+/// DoRewriteTest - A simple test for the TokenRewriter class.
+void DoRewriteTest(Preprocessor &PP, raw_ostream *OS);
+
+/// RewriteIncludesInInput - Implement -frewrite-includes mode.
+void RewriteIncludesInInput(Preprocessor &PP, raw_ostream *OS,
+ const PreprocessorOutputOptions &Opts);
+
+} // end namespace clang
+
+#endif