@@ -913,10 +913,12 @@ class PrintAST : public ASTVisitor<PrintAST> {
913913 void printPatternType (const Pattern *P);
914914 void printAccessors (const AbstractStorageDecl *ASD);
915915 void printSelfAccessKindModifiersIfNeeded (const FuncDecl *FD);
916- void printMembersOfDecl (Decl * NTD, bool needComma = false ,
917- bool openBracket = true , bool closeBracket = true );
916+ void printMembersOfDecl (Decl *NTD, bool needComma = false ,
917+ bool openBracket = true , bool closeBracket = true ,
918+ bool doIndent = true );
918919 void printMembers (ArrayRef<Decl *> members, bool needComma = false ,
919- bool openBracket = true , bool closeBracket = true );
920+ bool openBracket = true , bool closeBracket = true ,
921+ bool doIndent = true );
920922 void printGenericDeclGenericParams (GenericContext *decl);
921923 void printDeclGenericRequirements (GenericContext *decl);
922924 void printPrimaryAssociatedTypes (ProtocolDecl *decl);
@@ -2378,9 +2380,8 @@ static void addNamespaceMembers(Decl *decl,
23782380 }
23792381}
23802382
2381- void PrintAST::printMembersOfDecl (Decl *D, bool needComma,
2382- bool openBracket,
2383- bool closeBracket) {
2383+ void PrintAST::printMembersOfDecl (Decl *D, bool needComma, bool openBracket,
2384+ bool closeBracket, bool doIndent) {
23842385 llvm::SmallVector<Decl *, 16 > Members;
23852386 auto AddMembers = [&](IterableDeclContext *idc) {
23862387 if (Options.PrintCurrentMembersOnly ) {
@@ -2413,18 +2414,19 @@ void PrintAST::printMembersOfDecl(Decl *D, bool needComma,
24132414 if (isa_and_nonnull<clang::NamespaceDecl>(D->getClangDecl ()))
24142415 addNamespaceMembers (D, Members);
24152416 }
2416- printMembers (Members, needComma, openBracket, closeBracket);
2417+ printMembers (Members, needComma, openBracket, closeBracket, doIndent );
24172418}
24182419
24192420void PrintAST::printMembers (ArrayRef<Decl *> members, bool needComma,
2420- bool openBracket, bool closeBracket) {
2421+ bool openBracket, bool closeBracket,
2422+ bool doIndent) {
24212423 if (openBracket) {
24222424 Printer << " {" ;
24232425 if (!Options.PrintEmptyMembersOnSameLine || !members.empty ())
24242426 Printer.printNewline ();
24252427 }
24262428 {
2427- IndentRAII indentMore (*this );
2429+ IndentRAII indentMore (*this , /* DoIndent= */ doIndent );
24282430 for (auto i = members.begin (), iEnd = members.end (); i != iEnd; ++i) {
24292431 auto member = *i;
24302432
@@ -3713,6 +3715,13 @@ void PrintAST::visitEnumDecl(EnumDecl *decl) {
37133715 if (!Printer.shouldPrintRedeclaredClangDecl (
37143716 namespaceDecl->getOriginalNamespace ()))
37153717 return ;
3718+
3719+ if (Options.SkipInlineCXXNamespace && namespaceDecl->isInline ()) {
3720+ // Print members directly if this is an inline namespace.
3721+ printMembersOfDecl (decl, false , /* openBracket=*/ false ,
3722+ /* closeBracket=*/ false , /* doIndent=*/ false );
3723+ return ;
3724+ }
37163725 }
37173726 printDocumentationComment (decl);
37183727 printAttributes (decl);
@@ -6003,6 +6012,20 @@ class TypePrinter : public TypeVisitor<TypePrinter> {
60036012 return ;
60046013 }
60056014 }
6015+ if (Options.SkipInlineCXXNamespace ) {
6016+ // Don't print the parent type if it's a reference to an inline C++
6017+ // namespace.
6018+ if (auto *enumTy = T->getAs <EnumType>()) {
6019+ if (const auto *namespaceDecl = dyn_cast_or_null<clang::NamespaceDecl>(
6020+ enumTy->getDecl ()->getClangDecl ())) {
6021+ if (namespaceDecl->isInline ()) {
6022+ if (auto parent = enumTy->getParent ())
6023+ visitParentType (parent);
6024+ return ;
6025+ }
6026+ }
6027+ }
6028+ }
60066029 PrintOptions innerOptions = Options;
60076030 innerOptions.SynthesizeSugarOnTypes = false ;
60086031
0 commit comments