Add an interface mode getter/setter in PrintOptions and ModuleInterfaceOptions

Update args parsing
This commit is contained in:
Ellie Shin
2023-11-13 13:47:30 -08:00
parent e5ca8e5c0b
commit 9d716394b1
7 changed files with 62 additions and 43 deletions

View File

@@ -71,9 +71,9 @@ static void printToolVersionAndFlagsComment(raw_ostream &out,
ModuleDecl::ImportFilter filter = {ModuleDecl::ImportFilterKind::Default,
ModuleDecl::ImportFilterKind::Exported};
if (Opts.InterfaceContentMode != InterfaceMode::Public)
if (!Opts.printPublicInterface())
filter |= ModuleDecl::ImportFilterKind::SPIOnly;
if (Opts.InterfaceContentMode == InterfaceMode::Package)
if (Opts.printPackageInterface())
filter |= ModuleDecl::ImportFilterKind::PackageOnly;
SmallVector<ImportedModule> imports;
@@ -101,7 +101,7 @@ static void printToolVersionAndFlagsComment(raw_ostream &out,
<< Opts.IgnorableFlags << "\n";
}
auto hasPrivateIgnorableFlags = Opts.InterfaceContentMode != InterfaceMode::Public && !Opts.IgnorablePrivateFlags.empty();
auto hasPrivateIgnorableFlags = !Opts.printPublicInterface() && !Opts.IgnorablePrivateFlags.empty();
if (hasPrivateIgnorableFlags) {
out << "// " SWIFT_MODULE_FLAGS_IGNORABLE_PRIVATE_KEY ": "
<< Opts.IgnorablePrivateFlags << "\n";
@@ -247,7 +247,7 @@ static void printImports(raw_ostream &out,
// imports only if they are also SPI. First, list all implementation-only imports and
// filter them later.
llvm::SmallSet<ImportedModule, 4, ImportedModule::Order> ioiImportSet;
if (Opts.InterfaceContentMode != InterfaceMode::Public && Opts.ExperimentalSPIImports) {
if (!Opts.printPublicInterface() && Opts.ExperimentalSPIImports) {
SmallVector<ImportedModule, 4> ioiImports, allImports;
M->getImportedModules(ioiImports,
@@ -268,7 +268,7 @@ static void printImports(raw_ostream &out,
/// Collect @_spiOnly imports that are not imported elsewhere publicly.
llvm::SmallSet<ImportedModule, 4, ImportedModule::Order> spiOnlyImportSet;
if (Opts.InterfaceContentMode != InterfaceMode::Public) {
if (!Opts.printPublicInterface()) {
SmallVector<ImportedModule, 4> spiOnlyImports, otherImports;
M->getImportedModules(spiOnlyImports,
ModuleDecl::ImportFilterKind::SPIOnly);
@@ -335,7 +335,7 @@ static void printImports(raw_ostream &out,
if (publicImportSet.count(import))
out << "@_exported ";
if (Opts.InterfaceContentMode != InterfaceMode::Public) {
if (!Opts.printPublicInterface()) {
// An import visible in the private or package swiftinterface only.
//
// In the long term, we want to print this attribute for consistency and
@@ -623,7 +623,7 @@ public:
return;
// Skip SPI extensions in the public interface.
if (printOptions.InterfaceContentMode == InterfaceMode::Public && extension->isSPI())
if (printOptions.printPublicInterface() && extension->isSPI())
return;
const NominalTypeDecl *nominal = extension->getExtendedNominal();
@@ -704,7 +704,7 @@ public:
inherited->isSpecificProtocol(KnownProtocolKind::Actor))
return TypeWalker::Action::SkipChildren;
if (inherited->isSPI() && printOptions.InterfaceContentMode == InterfaceMode::Public)
if (inherited->isSPI() && printOptions.printPublicInterface())
return TypeWalker::Action::Continue;
if (isPublicOrUsableFromInline(inherited) &&
@@ -784,7 +784,7 @@ public:
return false;
assert(nominal->isGenericContext());
if (printOptions.InterfaceContentMode != InterfaceMode::Public)
if (!printOptions.printPublicInterface())
out << "@_spi(" << DummyProtocolName << ")\n";
out << "@available(*, unavailable)\nextension ";
nominal->getDeclaredType().print(out, printOptions);
@@ -825,7 +825,7 @@ bool swift::emitSwiftInterface(raw_ostream &out,
printImports(out, Opts, M, aliasModuleNamesTargets);
bool useExportedModuleNames = Opts.InterfaceContentMode == InterfaceMode::Public;
bool useExportedModuleNames = Opts.printPublicInterface();
const PrintOptions printOptions = PrintOptions::printSwiftInterfaceFile(
M, Opts.PreserveTypesAsWritten, Opts.PrintFullConvention,