On Tue, Jan 19, 2016 at 10:20 AM, Alexander Kornienko <ale...@google.com> wrote:
> alexfh added inline comments.
>
> ================
> Comment at: clang-tidy/misc/MiscTidyModule.cpp:58
> @@ -57,3 +56,1 @@
> -    CheckFactories.registerCheck<InefficientAlgorithmCheck>(
> -        "misc-inefficient-algorithm");
>      CheckFactories.registerCheck<MacroParenthesesCheck>(
> ----------------
> aaron.ballman wrote:
>> alexfh wrote:
>> > alexfh wrote:
>> > > aaron.ballman wrote:
>> > > > This will break projects that enable the misc-inefficient-algorithm 
>> > > > check (which clang 3.7 exposed). Is there a reason to not keep this 
>> > > > check registered under this name?
>> > > >
>> > > > (Perhaps a follow-up patch to allow deprecation of check names so that 
>> > > > users are given guidance would make sense.)
>> > > I don't feel strongly, but I'm somewhat reluctant to keep old check 
>> > > names. With every new clang-tidy version someone starts using on a 
>> > > project, they need to carefully look at the list of checks and select 
>> > > relevant ones anyway. I think, adding facilities for deprecating checks 
>> > > and keeping old names is not going to help much, but will certainly add 
>> > > support burden for us.
>> > But we certainly need to mention the rename in the release notes for 3.8.
>> > I don't feel strongly, but I'm somewhat reluctant to keep old check names. 
>> > With every new clang-tidy version someone starts using on a project, they 
>> > need to carefully look at the list of checks and select relevant ones 
>> > anyway. I think, adding facilities for deprecating checks and keeping old 
>> > names is not going to help much, but will certainly add support burden for 
>> > us.
>>
>> I'm more worried about upgrading existing uses than initiating new uses on a 
>> project. If my build system enabled this check for my project, then 
>> upgrading clang-tidy will cause that build to break because of an unknown 
>> check name, won't it? I think it's reasonable to do that if there's 
>> compelling reason (e.g., we remove a check entirely because it's no longer 
>> useful for some reason), but I'd like to avoid gratuitously breaking changes 
>> because it adds a barrier to people's upgrade paths.
>>
>> Oye. I just tested this out and the results were...surprisingly unhelpful.
>> ```
>> e:\llvm\2015>clang-tidy -checks=misc-hahahaha-nope E:\Desktop\test.cpp --
>> e:\llvm\2015>
>> ```
>> So it seems we don't currently diagnose providing unknown check names at 
>> all, which would make this a silently breaking change (existing uses will no 
>> longer trigger the check *and* they won't trigger any diagnostic mentioning 
>> that the check isn't known). :-(
>> If my build system enabled this check for my project, then upgrading 
>> clang-tidy will cause that build to break because of an unknown check name, 
>> won't it?
>
> Only in one case: when you have just one check enabled. Clang-tidy's -checks= 
> option is a **filter**, not a **list**, so it can't detect a presence of 
> invalid check names there. We could add this detection, probably (e.g. if 
> removal of a glob from the list doesn't change anything), and issue a 
> warning, but there is no reason to fail hard, when the check filter contains 
> invalid entries, IMO.

The user wrote something and likely assumed it had an effect when it
doesn't have one -- that doesn't seem like intuitive (or particularly
useful) behavior as far as the user is concerned. Typos are easy
mistakes to make ("is inefficient spelled 'inefficient' or
'inefficeint', that whole i before e thing is so tricky"), and the
problem here is that it can be hard for a user to detect when they've
messed up the filter because it's impossible to tell the difference
between "check never ran" and "my code is perfect."

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

Reply via email to