kadircet created this revision. kadircet added a reviewer: sammccall. Herald added subscribers: usaxena95, arphaman. kadircet requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
ASTContext were only passed to the StmtPrinter in some places, while it is always available in DeclPrinter. The context is used by StmtPrinter to better print statements in some cases, like printing constants as written. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D97043 Files: clang-tools-extra/clangd/unittests/HoverTests.cpp clang/lib/AST/DeclPrinter.cpp clang/unittests/AST/DeclPrinterTest.cpp
Index: clang/unittests/AST/DeclPrinterTest.cpp =================================================================== --- clang/unittests/AST/DeclPrinterTest.cpp +++ clang/unittests/AST/DeclPrinterTest.cpp @@ -20,6 +20,7 @@ #include "clang/AST/ASTContext.h" #include "clang/ASTMatchers/ASTMatchFinder.h" +#include "clang/ASTMatchers/ASTMatchers.h" #include "clang/Tooling/Tooling.h" #include "llvm/ADT/SmallString.h" #include "llvm/ADT/StringRef.h" @@ -1438,3 +1439,11 @@ namedDecl(hasName("Extension")).bind("id"), "@implementation <<error-type>>(Extension)\n@end", /*AllowError=*/true)); } + +TEST(DeclPrinter, VarDeclWithInitializer) { + ASSERT_TRUE(PrintedDeclCXX17Matches( + "int a = 0x15;", namedDecl(hasName("a")).bind("id"), "int a = 21")); + ASSERT_TRUE(PrintedDeclCXX17Matches( + "int a = 0x15;", namedDecl(hasName("a")).bind("id"), "int a = 0x15", + [](PrintingPolicy &Policy) { Policy.ConstantsAsWritten = true; })); +} Index: clang/lib/AST/DeclPrinter.cpp =================================================================== --- clang/lib/AST/DeclPrinter.cpp +++ clang/lib/AST/DeclPrinter.cpp @@ -341,7 +341,8 @@ SimpleInit = Init; if (SimpleInit) - SimpleInit->printPretty(Out, nullptr, Policy, Indentation); + SimpleInit->printPretty(Out, nullptr, Policy, Indentation, "\n", + &Context); else { for (unsigned I = 0; I != NumArgs; ++I) { assert(Args[I] != nullptr && "Expected non-null Expr"); @@ -350,7 +351,8 @@ if (I) Out << ", "; - Args[I]->printPretty(Out, nullptr, Policy, Indentation); + Args[I]->printPretty(Out, nullptr, Policy, Indentation, "\n", + &Context); } } } @@ -568,13 +570,14 @@ } static void printExplicitSpecifier(ExplicitSpecifier ES, llvm::raw_ostream &Out, - PrintingPolicy &Policy, - unsigned Indentation) { + PrintingPolicy &Policy, unsigned Indentation, + const ASTContext &Context) { std::string Proto = "explicit"; llvm::raw_string_ostream EOut(Proto); if (ES.getExpr()) { EOut << "("; - ES.getExpr()->printPretty(EOut, nullptr, Policy, Indentation); + ES.getExpr()->printPretty(EOut, nullptr, Policy, Indentation, "\n", + &Context); EOut << ")"; } EOut << " "; @@ -616,7 +619,7 @@ if (D->isConsteval()) Out << "consteval "; ExplicitSpecifier ExplicitSpec = ExplicitSpecifier::getFromDecl(D); if (ExplicitSpec.isSpecified()) - printExplicitSpecifier(ExplicitSpec, Out, Policy, Indentation); + printExplicitSpecifier(ExplicitSpec, Out, Policy, Indentation, Context); } PrintingPolicy SubPolicy(Policy); @@ -720,7 +723,7 @@ Proto += "("; llvm::raw_string_ostream EOut(Proto); FT->getNoexceptExpr()->printPretty(EOut, nullptr, SubPolicy, - Indentation); + Indentation, "\n", &Context); EOut.flush(); Proto += EOut.str(); Proto += ")"; @@ -744,7 +747,8 @@ if (Expr *TrailingRequiresClause = D->getTrailingRequiresClause()) { Out << " requires "; - TrailingRequiresClause->printPretty(Out, nullptr, SubPolicy, Indentation); + TrailingRequiresClause->printPretty(Out, nullptr, SubPolicy, Indentation, + "\n", &Context); } } else { Ty.print(Out, Policy, Proto); @@ -776,7 +780,8 @@ Out << ' '; if (D->getBody()) - D->getBody()->printPretty(Out, nullptr, SubPolicy, Indentation); + D->getBody()->printPretty(Out, nullptr, SubPolicy, Indentation, "\n", + &Context); } else { if (!Policy.TerseOutput && isa<CXXConstructorDecl>(*D)) Out << " {}"; @@ -821,7 +826,8 @@ if (D->isBitField()) { Out << " : "; - D->getBitWidth()->printPretty(Out, nullptr, Policy, Indentation); + D->getBitWidth()->printPretty(Out, nullptr, Policy, Indentation, "\n", + &Context); } Expr *Init = D->getInClassInitializer(); @@ -830,7 +836,7 @@ Out << " "; else Out << " = "; - Init->printPretty(Out, nullptr, Policy, Indentation); + Init->printPretty(Out, nullptr, Policy, Indentation, "\n", &Context); } prettyPrintAttributes(D); } @@ -895,7 +901,7 @@ PrintingPolicy SubPolicy(Policy); SubPolicy.SuppressSpecifiers = false; SubPolicy.IncludeTagDefinition = false; - Init->printPretty(Out, nullptr, SubPolicy, Indentation); + Init->printPretty(Out, nullptr, SubPolicy, Indentation, "\n", &Context); if ((D->getInitStyle() == VarDecl::CallInit) && !isa<ParenListExpr>(Init)) Out << ")"; } @@ -909,7 +915,8 @@ void DeclPrinter::VisitFileScopeAsmDecl(FileScopeAsmDecl *D) { Out << "__asm ("; - D->getAsmString()->printPretty(Out, nullptr, Policy, Indentation); + D->getAsmString()->printPretty(Out, nullptr, Policy, Indentation, "\n", + &Context); Out << ")"; } @@ -920,10 +927,11 @@ void DeclPrinter::VisitStaticAssertDecl(StaticAssertDecl *D) { Out << "static_assert("; - D->getAssertExpr()->printPretty(Out, nullptr, Policy, Indentation); + D->getAssertExpr()->printPretty(Out, nullptr, Policy, Indentation, "\n", + &Context); if (StringLiteral *SL = D->getMessage()) { Out << ", "; - SL->printPretty(Out, nullptr, Policy, Indentation); + SL->printPretty(Out, nullptr, Policy, Indentation, "\n", &Context); } Out << ")"; } @@ -1110,8 +1118,8 @@ Visit(TD); else if (const auto *Concept = dyn_cast<ConceptDecl>(D)) { Out << "concept " << Concept->getName() << " = " ; - Concept->getConstraintExpr()->printPretty(Out, nullptr, Policy, - Indentation); + Concept->getConstraintExpr()->printPretty(Out, nullptr, Policy, Indentation, + "\n", &Context); Out << ";"; } } @@ -1271,7 +1279,8 @@ if (OMD->getBody() && !Policy.TerseOutput) { Out << ' '; - OMD->getBody()->printPretty(Out, nullptr, Policy); + OMD->getBody()->printPretty(Out, nullptr, Policy, Indentation, "\n", + &Context); } else if (Policy.PolishForDeclaration) Out << ';'; @@ -1651,7 +1660,7 @@ Out << " : "; D->getType().print(Out, Policy); Out << " : "; - D->getCombiner()->printPretty(Out, nullptr, Policy, 0); + D->getCombiner()->printPretty(Out, nullptr, Policy, 0, "\n", &Context); Out << ")"; if (auto *Init = D->getInitializer()) { Out << " initializer("; @@ -1665,7 +1674,7 @@ case OMPDeclareReductionDecl::CallInit: break; } - Init->printPretty(Out, nullptr, Policy, 0); + Init->printPretty(Out, nullptr, Policy, 0, "\n", &Context); if (D->getInitializerKind() == OMPDeclareReductionDecl::DirectInit) Out << ")"; Out << ")"; @@ -1693,7 +1702,7 @@ } void DeclPrinter::VisitOMPCapturedExprDecl(OMPCapturedExprDecl *D) { - D->getInit()->printPretty(Out, nullptr, Policy, Indentation); + D->getInit()->printPretty(Out, nullptr, Policy, Indentation, "\n", &Context); } void DeclPrinter::VisitTemplateTypeParmDecl(const TemplateTypeParmDecl *TTP) { @@ -1727,6 +1736,7 @@ if (NTTP->hasDefaultArgument()) { Out << " = "; - NTTP->getDefaultArgument()->printPretty(Out, nullptr, Policy, Indentation); + NTTP->getDefaultArgument()->printPretty(Out, nullptr, Policy, Indentation, + "\n", &Context); } } Index: clang-tools-extra/clangd/unittests/HoverTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/HoverTests.cpp +++ clang-tools-extra/clangd/unittests/HoverTests.cpp @@ -523,7 +523,7 @@ )cpp", [](HoverInfo &HI) { HI.Name = "result"; - HI.Definition = "static constexpr int result = 1 + 2"; + HI.Definition = "static constexpr int result = a + b"; HI.Kind = index::SymbolKind::StaticProperty; HI.Type = "const int"; HI.NamespaceScope = "";
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits