[PATCH] D21303: [clang-tidy] Adds performance-returning-type check.
Aaron Ballman via cfe-commits
cfe-commits at lists.llvm.org
Wed Jun 22 06:36:55 PDT 2016
aaron.ballman added inline comments.
================
Comment at: clang-tidy/performance/ReturnValueCopyCheck.cpp:53
@@ +52,3 @@
+/// matches the given matcher.
+AST_MATCHER_P(QualType, ignoringRefsAndConsts,
+ ast_matchers::internal::Matcher<QualType>, InnerMatcher) {
----------------
Prazek wrote:
> This one is usefull AF. Can you put into Traversal AST Matchers?
>
>
> {meme, src=brilliant}
>
>
I don't think this is a good candidate for a public AST matcher -- it does too many disparate things.
================
Comment at: clang-tidy/performance/ReturnValueCopyCheck.cpp:64
@@ +63,3 @@
+/// \brief Matches ParmVarDecls which have default arguments.
+AST_MATCHER(ParmVarDecl, hasDefaultArgument) { return Node.hasDefaultArg(); }
+
----------------
With proper documentation and tests, this would be a good candidate to move into ASTMatchers.h though. However, it should be called `hasDefaultArg()` instead.
================
Comment at: clang-tidy/performance/ReturnValueCopyCheck.cpp:69
@@ +68,3 @@
+AST_MATCHER_FUNCTION(ast_matchers::internal::Matcher<FunctionDecl>,
+ hasOneActiveArgument) {
+ return anyOf(parameterCountIs(1),
----------------
Arguments are what the caller provides. Parameters are what the function accepts. Also "active" is a bit of a strange term for here, so I think this should be renamed to something like `hasOneNonDefaultedParam()` or something similar.
================
Comment at: clang-tidy/performance/ReturnValueCopyCheck.cpp:77
@@ +76,3 @@
+/// matcher.
+AST_MATCHER_P(TemplateTypeParmDecl, hasTemplateType,
+ ast_matchers::internal::Matcher<QualType>, InnerMatcher) {
----------------
I think we should make `hasType()` work for `TemplateTypeParmDecl` instead of doing it this way (as part of the public AST matcher interface), assuming it doesn't currently work.
================
Comment at: clang-tidy/performance/ReturnValueCopyCheck.cpp:86
@@ +85,3 @@
+/// to move-construct from any type.
+AST_MATCHER_FUNCTION(ast_matchers::internal::Matcher<CXXConstructorDecl>,
+ moveConstructorFromAnyType) {
----------------
I think this might actually be better expressed as a local variable in `registerMatchers()` instead of a matcher like this.
================
Comment at: clang-tidy/performance/ReturnValueCopyCheck.cpp:88
@@ +87,3 @@
+ moveConstructorFromAnyType) {
+ // Potentially danger: this matcher binds a name, with probably
+ // mean that you cant use it twice in your check!
----------------
s/danger/dangerous
s/with/which
================
Comment at: clang-tidy/performance/ReturnValueCopyCheck.cpp:89
@@ +88,3 @@
+ // Potentially danger: this matcher binds a name, with probably
+ // mean that you cant use it twice in your check!
+ const char TemplateArgument[] = "templateArgument";
----------------
s/mean/means
s/cant/can't
================
Comment at: clang-tidy/performance/ReturnValueCopyCheck.cpp:111-112
@@ +110,4 @@
+
+/// \brief Matches to qual types which has constructors from type that matches
+/// the given matcher.
+AST_MATCHER_FUNCTION_P(ast_matchers::internal::Matcher<QualType>,
----------------
Can you fix the grammatical issues with the comment? I'm not quite certain what it should say, but I think it's something like:
Matches a QualType whose declaration has a converting constructor accepting an argument of the type from the given inner matcher.
================
Comment at: clang-tidy/performance/ReturnValueCopyCheck.cpp:130-131
@@ +129,4 @@
+
+ // Matches to type with after ignoring refs and consts is the same as
+ // "constructedType"
+ auto HasTypeSameAsConstructed = hasType(hasCanonicalType(
----------------
Also ungrammatical (and missing a period at the end of the sentence).
================
Comment at: clang-tidy/performance/ReturnValueCopyCheck.h:20
@@ +19,3 @@
+
+/// This check finds places where we are returning object of a different type than
+/// the function return type. In such places, we should use std::move, otherwise
----------------
an object of a different type.
http://reviews.llvm.org/D21303
More information about the cfe-commits
mailing list