Files
swift-mirror/include/swift/Migrator/ASTMigratorPass.h
Doug Gregor 49aa0e966f Ensure that SourceFiles always have a backing buffer in the SourceManager
The "buffer ID" in a SourceFile, which is used to find the source file's
contents in the SourceManager, has always been optional. However, the
effectively every SourceFile actually does have a buffer ID, and the
vast majority of accesses to this information dereference the optional
without checking.

Update the handful of call sites that provided `nullopt` as the buffer
ID to provide a proper buffer instead. These were mostly unit tests
and testing programs, with a few places that passed a never-empty
optional through to the SourceFile constructor.

Then, remove optionality from the representation and accessors. It is
now the case that every SourceFile has a buffer ID, simplying a bunch
of code.
2024-09-16 21:46:42 -07:00

64 lines
2.1 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/AST/SourceFile.h"
#include "swift/Migrator/EditorAdapter.h"
namespace swift {
class SourceManager;
struct MigratorOptions;
class DiagnosticEngine;
namespace migrator {
class ASTMigratorPass {
protected:
EditorAdapter &Editor;
SourceFile *SF;
const MigratorOptions &Opts;
const StringRef Filename;
const unsigned BufferID;
SourceManager &SM;
DiagnosticEngine &Diags;
ASTMigratorPass(EditorAdapter &Editor, SourceFile *SF,
const MigratorOptions &Opts)
: Editor(Editor), SF(SF), Opts(Opts), Filename(SF->getFilename()),
BufferID(SF->getBufferID()),
SM(SF->getASTContext().SourceMgr), Diags(SF->getASTContext().Diags) {}
};
/// 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 the new type of 'try?' in Swift 4
void runOptionalTryMigratorPass(EditorAdapter &Editor,
SourceFile *SF,
const MigratorOptions &Opts);
} // end namespace migrator
} // end namespace swift
#endif // SWIFT_MIGRATOR_ASTMIGRATORPASS_H