Files
swift-mirror/include/swift/Migrator/ASTMigratorPass.h
David Farler 0774db030f [Migrator] Separate AST Pass implementations
The SyntacticMigratorPass is getting Too Big To Fail and covers
multiple migrations. There was already an early exit to not run
the pass if APIDigesterDataStorePath wasn't supplied, so SE-0110
tuple splat fix-its weren't getting run. This manifested in Migrator
tests not printing migrated contents on Linux.

New: ASTMigratorPass
Renamed: SyntacticMigratorPass -> APIDiffMigratorPass
New: TupleSplatMigratorPass

These implementations are entirely hidden and can only be invoked
by a swift::migrator function.

rdar://problem/32025974
2017-05-05 23:35:13 -07:00

67 lines
2.3 KiB
C++

//===--- ASTMigratorPass.h --------------------------------------*- C++ -*-===//
//
// 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
//
//===----------------------------------------------------------------------===//
//
// A base class for a syntactic migrator pass that uses the temporary
// swift::migrator::EditorAdapter infrastructure.
//
//===----------------------------------------------------------------------===//
#ifndef SWIFT_MIGRATOR_ASTMIGRATORPASS_H
#define SWIFT_MIGRATOR_ASTMIGRATORPASS_H
#include "swift/AST/ASTContext.h"
#include "swift/Migrator/EditorAdapter.h"
namespace swift {
class SourceManager;
struct MigratorOptions;
namespace migrator {
class ASTMigratorPass {
protected:
EditorAdapter &Editor;
SourceFile *SF;
const MigratorOptions &Opts;
const StringRef Filename;
const unsigned BufferID;
SourceManager &SM;
ASTMigratorPass(EditorAdapter &Editor, SourceFile *SF,
const MigratorOptions &Opts)
: Editor(Editor), SF(SF), Opts(Opts), Filename(SF->getFilename()),
BufferID(SF->getBufferID().getValue()),
SM(SF->getASTContext().SourceMgr) {}
};
/// Run a general pass to migrate code based on SDK differences in the previous
/// release.
void runAPIDiffMigratorPass(EditorAdapter &Editor,
SourceFile *SF,
const MigratorOptions &Opts);
/// Run a pass to fix up new tuple interpretation in SE-0110.
void runTupleSplatMigratorPass(EditorAdapter &Editor,
SourceFile *SF,
const MigratorOptions &Opts);
/// Run a pass to prepend 'Swift.' to `type(of:)` expressions if they will
/// be shadowed in Swift 4, as these are now resolved by normal overload
/// resolution.
void runTypeOfMigratorPass(EditorAdapter &Editor,
SourceFile *SF,
const MigratorOptions &Opts);
} // end namespace migrator
} // end namespace swift
#endif // SWIFT_MIGRATOR_ASTMIGRATORPASS_H