[PATCH] D40261: Add default argument AST matcher
aaron.ballman closed this revision. aaron.ballman added a comment. I've commit in r318794, thank you! https://reviews.llvm.org/D40261 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D40261: Add default argument AST matcher
juliehockett added a comment. It'd be great if you could commit it -- I don't have commit privileges. Much appreciated! https://reviews.llvm.org/D40261 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D40261: Add default argument AST matcher
juliehockett updated this revision to Diff 123701. juliehockett marked an inline comment as done. https://reviews.llvm.org/D40261 Files: docs/LibASTMatchersReference.html include/clang/ASTMatchers/ASTMatchers.h lib/ASTMatchers/Dynamic/Registry.cpp unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp Index: unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp === --- unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp +++ unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp @@ -1991,5 +1991,12 @@ namedDecl(hasExternalFormalLinkage(; } +TEST(HasDefaultArgument, Basic) { + EXPECT_TRUE(matches("void x(int val = 0) {}", + parmVarDecl(hasDefaultArgument(; + EXPECT_TRUE(notMatches("void x(int val) {}", + parmVarDecl(hasDefaultArgument(; +} + } // namespace ast_matchers } // namespace clang Index: lib/ASTMatchers/Dynamic/Registry.cpp === --- lib/ASTMatchers/Dynamic/Registry.cpp +++ lib/ASTMatchers/Dynamic/Registry.cpp @@ -248,6 +248,7 @@ REGISTER_MATCHER(hasDeclaration); REGISTER_MATCHER(hasDeclContext); REGISTER_MATCHER(hasDeducedType); + REGISTER_MATCHER(hasDefaultArgument); REGISTER_MATCHER(hasDescendant); REGISTER_MATCHER(hasDestinationType); REGISTER_MATCHER(hasDynamicExceptionSpec); Index: include/clang/ASTMatchers/ASTMatchers.h === --- include/clang/ASTMatchers/ASTMatchers.h +++ include/clang/ASTMatchers/ASTMatchers.h @@ -5818,6 +5818,17 @@ return Node.hasExternalFormalLinkage(); } +/// \brief Matches a declaration that has default arguments. +/// +/// Example matches y (matcher = parmVarDecl(hasDefaultArgument())) +/// \code +/// void x(int val) {} +/// void y(int val = 0) {} +/// \endcode +AST_MATCHER(ParmVarDecl, hasDefaultArgument) { + return Node.hasDefaultArg(); +} + } // namespace ast_matchers } // namespace clang Index: docs/LibASTMatchersReference.html === --- docs/LibASTMatchersReference.html +++ docs/LibASTMatchersReference.html @@ -3183,6 +3183,15 @@ +Matcherhttp://clang.llvm.org/doxygen/classclang_1_1ParmVarDecl.html;>ParmVarDeclhasDefaultArgument +Matches a declaration that has default arguments. + +Example matches y (matcher = parmVarDecl(hasDefaultArgument())) +void x(int val) {} +void y(int val = 0) {} + + + Matcherhttp://clang.llvm.org/doxygen/classclang_1_1QualType.html;>QualTypeasStringstd::string Name Matches if the matched type is represented by the given string. Index: unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp === --- unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp +++ unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp @@ -1991,5 +1991,12 @@ namedDecl(hasExternalFormalLinkage(; } +TEST(HasDefaultArgument, Basic) { + EXPECT_TRUE(matches("void x(int val = 0) {}", + parmVarDecl(hasDefaultArgument(; + EXPECT_TRUE(notMatches("void x(int val) {}", + parmVarDecl(hasDefaultArgument(; +} + } // namespace ast_matchers } // namespace clang Index: lib/ASTMatchers/Dynamic/Registry.cpp === --- lib/ASTMatchers/Dynamic/Registry.cpp +++ lib/ASTMatchers/Dynamic/Registry.cpp @@ -248,6 +248,7 @@ REGISTER_MATCHER(hasDeclaration); REGISTER_MATCHER(hasDeclContext); REGISTER_MATCHER(hasDeducedType); + REGISTER_MATCHER(hasDefaultArgument); REGISTER_MATCHER(hasDescendant); REGISTER_MATCHER(hasDestinationType); REGISTER_MATCHER(hasDynamicExceptionSpec); Index: include/clang/ASTMatchers/ASTMatchers.h === --- include/clang/ASTMatchers/ASTMatchers.h +++ include/clang/ASTMatchers/ASTMatchers.h @@ -5818,6 +5818,17 @@ return Node.hasExternalFormalLinkage(); } +/// \brief Matches a declaration that has default arguments. +/// +/// Example matches y (matcher = parmVarDecl(hasDefaultArgument())) +/// \code +/// void x(int val) {} +/// void y(int val = 0) {} +/// \endcode +AST_MATCHER(ParmVarDecl, hasDefaultArgument) { + return Node.hasDefaultArg(); +} + } // namespace ast_matchers } // namespace clang Index: docs/LibASTMatchersReference.html === --- docs/LibASTMatchersReference.html +++ docs/LibASTMatchersReference.html @@ -3183,6 +3183,15 @@ +Matcherhttp://clang.llvm.org/doxygen/classclang_1_1ParmVarDecl.html;>ParmVarDeclhasDefaultArgument +Matches a declaration that has default arguments. + +Example matches y (matcher = parmVarDecl(hasDefaultArgument())) +void x(int val) {} +void y(int val = 0) {} + + +
[PATCH] D40261: Add default argument AST matcher
juliehockett updated this revision to Diff 123654. juliehockett added a comment. Removed spurious semicolons https://reviews.llvm.org/D40261 Files: docs/LibASTMatchersReference.html include/clang/ASTMatchers/ASTMatchers.h lib/ASTMatchers/Dynamic/Registry.cpp unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp Index: unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp === --- unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp +++ unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp @@ -1991,5 +1991,12 @@ namedDecl(hasExternalFormalLinkage(; } +TEST(HasDefaultArgument, Basic) { + EXPECT_TRUE(matches("void x(int val = 0) {};", + parmVarDecl(hasDefaultArgument(; + EXPECT_TRUE(notMatches("void x(int val) {};", + parmVarDecl(hasDefaultArgument(; +} + } // namespace ast_matchers } // namespace clang Index: lib/ASTMatchers/Dynamic/Registry.cpp === --- lib/ASTMatchers/Dynamic/Registry.cpp +++ lib/ASTMatchers/Dynamic/Registry.cpp @@ -248,6 +248,7 @@ REGISTER_MATCHER(hasDeclaration); REGISTER_MATCHER(hasDeclContext); REGISTER_MATCHER(hasDeducedType); + REGISTER_MATCHER(hasDefaultArgument); REGISTER_MATCHER(hasDescendant); REGISTER_MATCHER(hasDestinationType); REGISTER_MATCHER(hasDynamicExceptionSpec); Index: include/clang/ASTMatchers/ASTMatchers.h === --- include/clang/ASTMatchers/ASTMatchers.h +++ include/clang/ASTMatchers/ASTMatchers.h @@ -5818,6 +5818,17 @@ return Node.hasExternalFormalLinkage(); } +/// \brief Matches a declaration that has default arguments. +/// +/// Example matches y (matcher = parmVarDecl(hasDefaultArgument())) +/// \code +/// void x(int val) {} +/// void y(int val = 0) {} +/// \endcode +AST_MATCHER(ParmVarDecl, hasDefaultArgument) { + return Node.hasDefaultArg(); +} + } // namespace ast_matchers } // namespace clang Index: docs/LibASTMatchersReference.html === --- docs/LibASTMatchersReference.html +++ docs/LibASTMatchersReference.html @@ -3183,6 +3183,15 @@ +Matcherhttp://clang.llvm.org/doxygen/classclang_1_1ParmVarDecl.html;>ParmVarDeclhasDefaultArgument +Matches a declaration that has default arguments. + +Example matches y (matcher = parmVarDecl(hasDefaultArgument())) +void x(int val) {} +void y(int val = 0) {} + + + Matcherhttp://clang.llvm.org/doxygen/classclang_1_1QualType.html;>QualTypeasStringstd::string Name Matches if the matched type is represented by the given string. Index: unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp === --- unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp +++ unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp @@ -1991,5 +1991,12 @@ namedDecl(hasExternalFormalLinkage(; } +TEST(HasDefaultArgument, Basic) { + EXPECT_TRUE(matches("void x(int val = 0) {};", + parmVarDecl(hasDefaultArgument(; + EXPECT_TRUE(notMatches("void x(int val) {};", + parmVarDecl(hasDefaultArgument(; +} + } // namespace ast_matchers } // namespace clang Index: lib/ASTMatchers/Dynamic/Registry.cpp === --- lib/ASTMatchers/Dynamic/Registry.cpp +++ lib/ASTMatchers/Dynamic/Registry.cpp @@ -248,6 +248,7 @@ REGISTER_MATCHER(hasDeclaration); REGISTER_MATCHER(hasDeclContext); REGISTER_MATCHER(hasDeducedType); + REGISTER_MATCHER(hasDefaultArgument); REGISTER_MATCHER(hasDescendant); REGISTER_MATCHER(hasDestinationType); REGISTER_MATCHER(hasDynamicExceptionSpec); Index: include/clang/ASTMatchers/ASTMatchers.h === --- include/clang/ASTMatchers/ASTMatchers.h +++ include/clang/ASTMatchers/ASTMatchers.h @@ -5818,6 +5818,17 @@ return Node.hasExternalFormalLinkage(); } +/// \brief Matches a declaration that has default arguments. +/// +/// Example matches y (matcher = parmVarDecl(hasDefaultArgument())) +/// \code +/// void x(int val) {} +/// void y(int val = 0) {} +/// \endcode +AST_MATCHER(ParmVarDecl, hasDefaultArgument) { + return Node.hasDefaultArg(); +} + } // namespace ast_matchers } // namespace clang Index: docs/LibASTMatchersReference.html === --- docs/LibASTMatchersReference.html +++ docs/LibASTMatchersReference.html @@ -3183,6 +3183,15 @@ +Matcherhttp://clang.llvm.org/doxygen/classclang_1_1ParmVarDecl.html;>ParmVarDeclhasDefaultArgument +Matches a declaration that has default arguments. + +Example matches y (matcher = parmVarDecl(hasDefaultArgument())) +void x(int val) {} +void y(int val = 0) {} + + +
[PATCH] D40261: Add default argument AST matcher
aaron.ballman accepted this revision. aaron.ballman added a comment. This revision is now accepted and ready to land. Aside from a minor nit with the comments leading to the public docs, LGTM! Comment at: include/clang/ASTMatchers/ASTMatchers.h:5825-5826 +/// \code +/// void x(int val) {}; +/// void y(int val = 0) {}; +/// \endcode Remove the spurious semicolons (and regen the HTML docs). https://reviews.llvm.org/D40261 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D40261: Add default argument AST matcher
juliehockett updated this revision to Diff 123646. juliehockett added a comment. Updated Registry.cpp to include new matcher. https://reviews.llvm.org/D40261 Files: docs/LibASTMatchersReference.html include/clang/ASTMatchers/ASTMatchers.h lib/ASTMatchers/Dynamic/Registry.cpp unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp Index: unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp === --- unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp +++ unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp @@ -1991,5 +1991,12 @@ namedDecl(hasExternalFormalLinkage(; } +TEST(HasDefaultArgument, Basic) { + EXPECT_TRUE(matches("void x(int val = 0) {};", + parmVarDecl(hasDefaultArgument(; + EXPECT_TRUE(notMatches("void x(int val) {};", + parmVarDecl(hasDefaultArgument(; +} + } // namespace ast_matchers } // namespace clang Index: lib/ASTMatchers/Dynamic/Registry.cpp === --- lib/ASTMatchers/Dynamic/Registry.cpp +++ lib/ASTMatchers/Dynamic/Registry.cpp @@ -248,6 +248,7 @@ REGISTER_MATCHER(hasDeclaration); REGISTER_MATCHER(hasDeclContext); REGISTER_MATCHER(hasDeducedType); + REGISTER_MATCHER(hasDefaultArgument); REGISTER_MATCHER(hasDescendant); REGISTER_MATCHER(hasDestinationType); REGISTER_MATCHER(hasDynamicExceptionSpec); Index: include/clang/ASTMatchers/ASTMatchers.h === --- include/clang/ASTMatchers/ASTMatchers.h +++ include/clang/ASTMatchers/ASTMatchers.h @@ -5818,6 +5818,17 @@ return Node.hasExternalFormalLinkage(); } +/// \brief Matches a declaration that has default arguments. +/// +/// Example matches y (matcher = parmVarDecl(hasDefaultArgument())) +/// \code +/// void x(int val) {}; +/// void y(int val = 0) {}; +/// \endcode +AST_MATCHER(ParmVarDecl, hasDefaultArgument) { + return Node.hasDefaultArg(); +} + } // namespace ast_matchers } // namespace clang Index: docs/LibASTMatchersReference.html === --- docs/LibASTMatchersReference.html +++ docs/LibASTMatchersReference.html @@ -3183,6 +3183,15 @@ +Matcherhttp://clang.llvm.org/doxygen/classclang_1_1ParmVarDecl.html;>ParmVarDeclhasDefaultArgument +Matches a declaration that has default arguments. + +Example matches y (matcher = parmVarDecl(hasDefaultArgument())) +void x(int val) {}; +void y(int val = 0) {}; + + + Matcherhttp://clang.llvm.org/doxygen/classclang_1_1QualType.html;>QualTypeasStringstd::string Name Matches if the matched type is represented by the given string. Index: unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp === --- unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp +++ unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp @@ -1991,5 +1991,12 @@ namedDecl(hasExternalFormalLinkage(; } +TEST(HasDefaultArgument, Basic) { + EXPECT_TRUE(matches("void x(int val = 0) {};", + parmVarDecl(hasDefaultArgument(; + EXPECT_TRUE(notMatches("void x(int val) {};", + parmVarDecl(hasDefaultArgument(; +} + } // namespace ast_matchers } // namespace clang Index: lib/ASTMatchers/Dynamic/Registry.cpp === --- lib/ASTMatchers/Dynamic/Registry.cpp +++ lib/ASTMatchers/Dynamic/Registry.cpp @@ -248,6 +248,7 @@ REGISTER_MATCHER(hasDeclaration); REGISTER_MATCHER(hasDeclContext); REGISTER_MATCHER(hasDeducedType); + REGISTER_MATCHER(hasDefaultArgument); REGISTER_MATCHER(hasDescendant); REGISTER_MATCHER(hasDestinationType); REGISTER_MATCHER(hasDynamicExceptionSpec); Index: include/clang/ASTMatchers/ASTMatchers.h === --- include/clang/ASTMatchers/ASTMatchers.h +++ include/clang/ASTMatchers/ASTMatchers.h @@ -5818,6 +5818,17 @@ return Node.hasExternalFormalLinkage(); } +/// \brief Matches a declaration that has default arguments. +/// +/// Example matches y (matcher = parmVarDecl(hasDefaultArgument())) +/// \code +/// void x(int val) {}; +/// void y(int val = 0) {}; +/// \endcode +AST_MATCHER(ParmVarDecl, hasDefaultArgument) { + return Node.hasDefaultArg(); +} + } // namespace ast_matchers } // namespace clang Index: docs/LibASTMatchersReference.html === --- docs/LibASTMatchersReference.html +++ docs/LibASTMatchersReference.html @@ -3183,6 +3183,15 @@ +Matcherhttp://clang.llvm.org/doxygen/classclang_1_1ParmVarDecl.html;>ParmVarDeclhasDefaultArgument +Matches a declaration that has default arguments. + +Example matches y (matcher = parmVarDecl(hasDefaultArgument())) +void x(int val) {}; +void y(int val = 0) {}; + + +
[PATCH] D40261: Add default argument AST matcher
aaron.ballman added a comment. You should also update lib\ASTMatchers\Dynamic\Registry.cpp to have the new matcher (be sure to keep the new matcher alphabetized as well). https://reviews.llvm.org/D40261 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D40261: Add default argument AST matcher
juliehockett created this revision. Herald added a subscriber: klimek. Adds AST matcher for declarations with default arguments. https://reviews.llvm.org/D40261 Files: docs/LibASTMatchersReference.html include/clang/ASTMatchers/ASTMatchers.h unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp Index: unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp === --- unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp +++ unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp @@ -1991,5 +1991,12 @@ namedDecl(hasExternalFormalLinkage(; } +TEST(HasDefaultArgument, Basic) { + EXPECT_TRUE(matches("void x(int val = 0) {};", + parmVarDecl(hasDefaultArgument(; + EXPECT_TRUE(notMatches("void x(int val) {};", + parmVarDecl(hasDefaultArgument(; +} + } // namespace ast_matchers } // namespace clang Index: include/clang/ASTMatchers/ASTMatchers.h === --- include/clang/ASTMatchers/ASTMatchers.h +++ include/clang/ASTMatchers/ASTMatchers.h @@ -5818,6 +5818,17 @@ return Node.hasExternalFormalLinkage(); } +/// \brief Matches a declaration that has default arguments. +/// +/// Example matches y (matcher = parmVarDecl(hasDefaultArgument())) +/// \code +/// void x(int val) {}; +/// void y(int val = 0) {}; +/// \endcode +AST_MATCHER(ParmVarDecl, hasDefaultArgument) { + return Node.hasDefaultArg(); +} + } // namespace ast_matchers } // namespace clang Index: docs/LibASTMatchersReference.html === --- docs/LibASTMatchersReference.html +++ docs/LibASTMatchersReference.html @@ -3183,6 +3183,15 @@ +Matcherhttp://clang.llvm.org/doxygen/classclang_1_1ParmVarDecl.html;>ParmVarDeclhasDefaultArgument +Matches a declaration that has default arguments. + +Example matches y (matcher = parmVarDecl(hasDefaultArgument())) +void x(int val) {}; +void y(int val = 0) {}; + + + Matcherhttp://clang.llvm.org/doxygen/classclang_1_1QualType.html;>QualTypeasStringstd::string Name Matches if the matched type is represented by the given string. Index: unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp === --- unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp +++ unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp @@ -1991,5 +1991,12 @@ namedDecl(hasExternalFormalLinkage(; } +TEST(HasDefaultArgument, Basic) { + EXPECT_TRUE(matches("void x(int val = 0) {};", + parmVarDecl(hasDefaultArgument(; + EXPECT_TRUE(notMatches("void x(int val) {};", + parmVarDecl(hasDefaultArgument(; +} + } // namespace ast_matchers } // namespace clang Index: include/clang/ASTMatchers/ASTMatchers.h === --- include/clang/ASTMatchers/ASTMatchers.h +++ include/clang/ASTMatchers/ASTMatchers.h @@ -5818,6 +5818,17 @@ return Node.hasExternalFormalLinkage(); } +/// \brief Matches a declaration that has default arguments. +/// +/// Example matches y (matcher = parmVarDecl(hasDefaultArgument())) +/// \code +/// void x(int val) {}; +/// void y(int val = 0) {}; +/// \endcode +AST_MATCHER(ParmVarDecl, hasDefaultArgument) { + return Node.hasDefaultArg(); +} + } // namespace ast_matchers } // namespace clang Index: docs/LibASTMatchersReference.html === --- docs/LibASTMatchersReference.html +++ docs/LibASTMatchersReference.html @@ -3183,6 +3183,15 @@ +Matcherhttp://clang.llvm.org/doxygen/classclang_1_1ParmVarDecl.html;>ParmVarDeclhasDefaultArgument +Matches a declaration that has default arguments. + +Example matches y (matcher = parmVarDecl(hasDefaultArgument())) +void x(int val) {}; +void y(int val = 0) {}; + + + Matcherhttp://clang.llvm.org/doxygen/classclang_1_1QualType.html;>QualTypeasStringstd::string Name Matches if the matched type is represented by the given string. ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits