LegalizeAdulthood added inline comments.

================
Comment at: clang-tidy/readability/ReturnWithRedundantParensCheck.cpp:41-44
@@ +40,6 @@
+
+  // Complex expression can be surrounded by parenthesis for readability
+  if (isComplexExpression(ParenExpression->getSubExpr())) {
+    return;
+  }
+
----------------
adek05 wrote:
> LegalizeAdulthood wrote:
> > Rather than using an ad-hoc heuristic, I'd rather the check just do it.
> > 
> > If we must have an ad-hoc heuristic, then we should have a configuration 
> > parameter that configures the metric `ChildrenCountThreshold`, where some 
> > value like `0` means "always do it" and this value should be the default 
> > value for this parameter.
> > 
> > If your return expression is so huge that you think you need extra 
> > parentheses to clarify something, then the problem isn't made any worse by 
> > removing the outer-most set of parentheses.  The real problem of 
> > readability is your huge expression.  Extracting subexpressions into a 
> > variable with an intention-revealing name is a better approach to 
> > readability.  This is beyond the scope of this check.
> So you prefer moving this logic into `check` function? I separated that for 
> the sake of readability. I do not mean that this is what we need. But for 
> example we could expand the `isComplexExpression` to allow for `return 
> (!*foo);` to be in parens (deep expression tree). I agree, that configuration 
> param makes sense in such case. Which way would you prefer it?
I don't see `return (!*foo);` as any clearer than `return !*foo;`.  It's the 
`!*` that is the source of the complexity and adding parens just makes it look 
even more complicated, so I would rather that clang-tidy just remove the 
parentheses always.

In this case, I would "do the simplest thing that could possibly work" and 
always remove the parentheses.

Specifically, in this changeset I'm proposing that the function 
`isComplexExpression` be removed and the `if` statement on lines 41-44 also be 
removed and that the check simply always removes the parentheses.

================
Comment at: clang-tidy/readability/ReturnWithRedundantParensCheck.cpp:50
@@ +49,3 @@
+      << FixItHint::CreateReplacement(LParenLoc, "");
+  diag(RParenLoc, "redundant ')' for expression in return statement")
+      << FixItHint::CreateReplacement(RParenLoc, "");
----------------
adek05 wrote:
> omtcyf0 wrote:
> > Both warnings correspond to the same issue. Therefore I'd suggest creating 
> > one warning only.
> I'll try to merge them.
What I would do is replace this with a single diagnostic:

```
diag(LParenLoc, "redundant parentheses for expression in return statement")
      << FixItHint::CreateReplacement(LParenLoc, "")
      << FixitHint::CreateReplacement(RParenLoc, "");
```

Also, I think the `FixitHint` stuff has a way of expressing a deletion directly 
instead of replace some text with empty string.

================
Comment at: test/clang-tidy/readability-return-with-redundant-parens.cpp:24
@@ +23,2 @@
+  return (1 + 2);
+}
----------------
Eugene.Zelenko wrote:
> adek05 wrote:
> > LegalizeAdulthood wrote:
> > > I don't know if it makes a difference, but I added a test case for:
> > > 
> > > ```
> > > return(1);
> > > ```
> > > 
> > > as well.  In that case we need to remove the parens but add a space 
> > > between the `return` and it's expression.
> > Yeah... that's an odd case. Ideally I would defer to clang-format here 
> > which could first add space between `return` and `(1)`, but since it is 
> > easy enough I could just always do `s/)/ /` since clang-format is expected 
> > to be run after clang-tidy anyway. Good catch!
> I encountered such statements in my work code base. Unfortunately I could not 
> use Clang-format, since we standardized on Artistic Style, and its default 
> didn't fix excessive spacing :-(
In general, I wouldn't want to rely on `clang-format` to pretty up the input to 
`clang-tidy` for exactly the reasons that there are many code bases where it is 
unacceptable to run `clang-format` on the code base.  At least not until 
`clang-format` subsumes all the functionality of other existing formatters (and 
it is far from that currently).

IMO, `clang-tidy` should be agnostic as to input formatting for what it can 
handle.


Repository:
  rL LLVM

http://reviews.llvm.org/D16286



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to