Skip to content

Commit 5e8ed8d

Browse files
committed
[AST Printer] Avoid synthesizing decls when printing for diagnostics.
1 parent 5897dbe commit 5e8ed8d

File tree

2 files changed

+19
-7
lines changed

2 files changed

+19
-7
lines changed

include/swift/AST/PrintOptions.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,11 @@ struct PrintOptions {
304304
/// such as _silgen_name, transparent, etc.
305305
bool PrintUserInaccessibleAttrs = true;
306306

307+
/// Whether to limit ourselves to printing only the "current" set of members
308+
/// in a nominal type or extension, which is semantically unstable but can
309+
/// prevent printing from doing "extra" work.
310+
bool PrintCurrentMembersOnly = false;
311+
307312
/// List of attribute kinds that should not be printed.
308313
std::vector<AnyAttrKind> ExcludeAttrList = {DAK_Transparent, DAK_Effects,
309314
DAK_FixedLayout,
@@ -517,6 +522,7 @@ struct PrintOptions {
517522
result.ShouldQualifyNestedDeclarations =
518523
QualifyNestedDeclarations::TypesOnly;
519524
result.PrintDocumentationComments = false;
525+
result.PrintCurrentMembersOnly = true;
520526
return result;
521527
}
522528

@@ -538,6 +544,7 @@ struct PrintOptions {
538544
result.SkipUnderscoredKeywords = true;
539545
result.EnumRawValues = EnumRawValueMode::PrintObjCOnly;
540546
result.MapCrossImportOverlaysToDeclaringModule = true;
547+
result.PrintCurrentMembersOnly = false;
541548
return result;
542549
}
543550

lib/AST/ASTPrinter.cpp

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2050,24 +2050,29 @@ void PrintAST::printMembersOfDecl(Decl *D, bool needComma,
20502050
bool openBracket,
20512051
bool closeBracket) {
20522052
llvm::SmallVector<Decl *, 3> Members;
2053-
auto AddDeclFunc = [&](ArrayRef<Decl *> Range) {
2054-
for (auto RD : Range)
2055-
Members.push_back(RD);
2053+
auto AddMembers = [&](IterableDeclContext *idc) {
2054+
if (Options.PrintCurrentMembersOnly) {
2055+
for (auto RD : idc->getMembers())
2056+
Members.push_back(RD);
2057+
} else {
2058+
for (auto RD : idc->getAllMembers())
2059+
Members.push_back(RD);
2060+
}
20562061
};
20572062

20582063
if (auto Ext = dyn_cast<ExtensionDecl>(D)) {
2059-
AddDeclFunc(Ext->getAllMembers());
2064+
AddMembers(Ext);
20602065
} else if (auto NTD = dyn_cast<NominalTypeDecl>(D)) {
2061-
AddDeclFunc(NTD->getAllMembers());
2066+
AddMembers(NTD);
20622067
for (auto Ext : NTD->getExtensions()) {
20632068
if (Options.printExtensionContentAsMembers(Ext))
2064-
AddDeclFunc(Ext->getAllMembers());
2069+
AddMembers(Ext);
20652070
}
20662071
if (Options.PrintExtensionFromConformingProtocols) {
20672072
for (auto Conf : NTD->getAllConformances()) {
20682073
for (auto Ext : Conf->getProtocol()->getExtensions()) {
20692074
if (Options.printExtensionContentAsMembers(Ext))
2070-
AddDeclFunc(Ext->getAllMembers());
2075+
AddMembers(Ext);
20712076
}
20722077
}
20732078
}

0 commit comments

Comments
 (0)