mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
This adds an adapter class that wraps Clang's lib/Edit Commit and EditedSource classes for use in the initial "syntactic" passes. Once the passes have completed, the resulting source file is then passed to the Swift compiler fix-it passes. rdar://problem/30926261
83 lines
2.6 KiB
C++
83 lines
2.6 KiB
C++
//===--- MigrationState.cpp -----------------------------------------------===//
|
|
//
|
|
// This source file is part of the Swift.org open source project
|
|
//
|
|
// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
|
|
// Licensed under Apache License v2.0 with Runtime Library Exception
|
|
//
|
|
// See https://swift.org/LICENSE.txt for license information
|
|
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "swift/Basic/SourceManager.h"
|
|
#include "swift/Migrator/MigrationState.h"
|
|
#include "llvm/Support/Path.h"
|
|
#include "llvm/ADT/SmallString.h"
|
|
#include "llvm/Support/FileSystem.h"
|
|
#include "llvm/Support/raw_ostream.h"
|
|
|
|
using llvm::StringRef;
|
|
|
|
using namespace swift;
|
|
using namespace swift::migrator;
|
|
|
|
#pragma mark - MigrationState
|
|
|
|
std::string MigrationState::getInputText() const {
|
|
return SrcMgr.getEntireTextForBuffer(InputBufferID);
|
|
}
|
|
|
|
std::string MigrationState::getOutputText() const {
|
|
return SrcMgr.getEntireTextForBuffer(OutputBufferID);
|
|
}
|
|
|
|
static bool quickDumpText(StringRef OutFilename, StringRef Text) {
|
|
std::error_code Error;
|
|
llvm::raw_fd_ostream FileOS(OutFilename,
|
|
Error, llvm::sys::fs::F_Text);
|
|
if (FileOS.has_error()) {
|
|
return true;
|
|
}
|
|
|
|
FileOS << Text;
|
|
|
|
FileOS.flush();
|
|
|
|
return FileOS.has_error();
|
|
}
|
|
|
|
bool MigrationState::print(size_t StateNumber, StringRef OutDir) const {
|
|
auto Failed = false;
|
|
|
|
SmallString<256> InputFileStatePath;
|
|
llvm::sys::path::append(InputFileStatePath, OutDir);
|
|
|
|
{
|
|
SmallString<256> InputStateFilenameScratch;
|
|
llvm::raw_svector_ostream InputStateFilenameOS(InputStateFilenameScratch);
|
|
InputStateFilenameOS << StateNumber << '-' << "FixitMigrationState";
|
|
InputStateFilenameOS << '-' << "Input";
|
|
llvm::sys::path::append(InputFileStatePath, InputStateFilenameOS.str());
|
|
llvm::sys::path::replace_extension(InputFileStatePath, ".swift");
|
|
}
|
|
|
|
Failed |= quickDumpText(InputFileStatePath, getInputText());
|
|
|
|
SmallString<256> OutputFileStatePath;
|
|
llvm::sys::path::append(OutputFileStatePath, OutDir);
|
|
|
|
{
|
|
SmallString<256> OutputStateFilenameScratch;
|
|
llvm::raw_svector_ostream OutputStateFilenameOS(OutputStateFilenameScratch);
|
|
OutputStateFilenameOS << StateNumber << '-' << "FixitMigrationState";
|
|
OutputStateFilenameOS << '-' << "Output";
|
|
llvm::sys::path::append(OutputFileStatePath, OutputStateFilenameOS.str());
|
|
llvm::sys::path::replace_extension(OutputFileStatePath, ".swift");
|
|
}
|
|
|
|
Failed |= quickDumpText(OutputFileStatePath, getOutputText());
|
|
|
|
return Failed;
|
|
}
|