13#include "clang/Config/config.h"
26#include "llvm/ADT/DenseSet.h"
27#include "llvm/Support/CrashRecoveryContext.h"
28#include "llvm/Support/FileSystem.h"
29#include "llvm/Support/Path.h"
30#include "llvm/Support/raw_ostream.h"
40std::unique_ptr<ASTConsumer>
42 if (std::unique_ptr<raw_ostream> OS =
51std::unique_ptr<ASTConsumer>
53 return std::make_unique<ASTConsumer>();
59 FixItRewriteInPlace() { InPlace =
true; }
61 std::string RewriteFilename(
const std::string &
Filename,
int &fd)
override {
62 llvm_unreachable(
"don't call RewriteFilename for inplace rewrites");
67 std::string NewSuffix;
70 FixItActionSuffixInserter(std::string NewSuffix,
bool FixWhatYouCan)
71 : NewSuffix(
std::move(NewSuffix)) {
72 this->FixWhatYouCan = FixWhatYouCan;
75 std::string RewriteFilename(
const std::string &
Filename,
int &fd)
override {
78 llvm::sys::path::replace_extension(
Path,
79 NewSuffix + llvm::sys::path::extension(
Path));
80 return std::string(
Path);
86 std::string RewriteFilename(
const std::string &
Filename,
int &fd)
override {
88 llvm::sys::fs::createTemporaryFile(llvm::sys::path::filename(
Filename),
89 llvm::sys::path::extension(
Filename).drop_front(), fd,
91 return std::string(
Path);
102 FixItOpts.reset(
new FixItRewriteInPlace);
117 std::vector<std::pair<std::string, std::string> > RewrittenFiles;
122 if (FixAction->BeginSourceFile(CI, FEOpts.
Inputs[0])) {
123 std::unique_ptr<FixItOptions> FixItOpts;
125 FixItOpts.reset(
new FixItRewriteToTemp());
127 FixItOpts.reset(
new FixItRewriteInPlace());
128 FixItOpts->Silent =
true;
133 if (llvm::Error Err = FixAction->Execute()) {
135 consumeError(std::move(Err));
139 err =
Rewriter.WriteFixedFiles(&RewrittenFiles);
141 FixAction->EndSourceFile();
155 RewrittenFiles.begin(), RewrittenFiles.end());
161#if CLANG_ENABLE_OBJC_REWRITER
163std::unique_ptr<ASTConsumer>
165 if (std::unique_ptr<raw_ostream> OS =