[PATCH] D82824: [clang-tidy] Added option to readability-else-after-return
Aaron Ballman via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Jun 30 10:50:15 PDT 2020
aaron.ballman accepted this revision.
aaron.ballman added a comment.
This revision is now accepted and ready to land.
LGTM once the documentation nit is fixed up.
================
Comment at: clang-tools-extra/clang-tidy/readability/ElseAfterReturnCheck.cpp:193
if (checkConditionVarUsageInElse(If) != nullptr) {
+ if (!WarnOnConditionVariables)
+ return;
----------------
njames93 wrote:
> aaron.ballman wrote:
> > njames93 wrote:
> > > aaron.ballman wrote:
> > > > Would it make sense to hoist this into the previous `if` statement so we don't bother checking the condition var use in the first place if we're just going to ignore the results?
> > > That wouldn't work, we need to see if there is a condition variable that needs refactoring first before we can disregard it, Or am I missing something?
> > I was suggesting:
> > ```
> > if (WarnOnConditionVariables && checkConditionVarUsageInElse(If)) {
> > ...
> > }
> > if (WarnOnConditionVariables && checkInitDeclUsageInElse(If) {
> > ...
> > }
> > ```
> > The effect is that we don't bother checking for the situations we weren't going to warn about anyway. But maybe I'm the one missing something?
> I think you may be this time. The reason being those `if` statements have a `return` at the end. If I followed how you have it layed out, those returns would never hit regardless of whether there was a condition variable that needed handling or not.
Oh! So you're talking about the case where `IsLastInScope` and `WarnOnUnfixable` are both `false`, okay I see that now. I think the logic could still be rearranged to avoid doing work you're just going to immediately throw away, but I don't think it's critical (or really needed for this patch).
================
Comment at: clang-tools-extra/docs/clang-tidy/checks/readability-else-after-return.rst:74
+
+ When `true`, The check will attempt to refactor a variable defined inside
+ the condition of the ``if`` statement that is used in the ``else`` branch.
----------------
aaron.ballman wrote:
> njames93 wrote:
> > aaron.ballman wrote:
> > > The -> the
> > >
> > > I'm a bit unclear on what "attempt to refactor" means -- I sort of understand it to mean that if this option is true then the check will not produce a fix-it for variables defined inside the condition of the if statement that is used in the else branch, but will produce a diagnostic. However, the check behavior seems to also remove the diagnostic in this case (not just the fix-it), so I'm not certain I'm reading this right.
> > Good spot, the check behaviour is also removing the diagnostic as well as the fix it.
> > That behaviour should probably be changed to removing the Fix-It when this option is `false`, but then diagnostic behaviour should follow what `WarnOnUnfixable` dictates.
> I think that makes sense. Then the option can be renamed to remove the "Refactor" bit and probably be something more like `WarnOnConditionVariables` or something?
Still have to fix the capitalization issues with `The` and `Emit`.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D82824/new/
https://reviews.llvm.org/D82824
More information about the cfe-commits
mailing list