[cfe-dev] clang-tidy and CppCoreGuidelines

Jonas Toth via cfe-dev cfe-dev at lists.llvm.org
Mon Sep 25 08:58:37 PDT 2017


I went through this process for the High Integrity Module, it was very 
time consuming and annoying.
When introducing an alias you must create a new documentation, setup 
auto redirect in docs, ensure all links work and update the checker 
list. This took me for ~30 aliases a week almost fulltime (including 
figuring out what can be aliased and so on). This will create a lot of 
codereview noise as well!

A related issue is, that there are currently no status pages for the 
guidelines. To keep track of all these things is hard and more 
important, time consuming.

My approach would be:

- a status page (similar to C++17-Support page)
- a 'built-in' yaml-Config file (.clang-tidy-cppcoreguidelines, 
.clang-tidy-cert, ...)
- multiple names for a check

Both the status page and configuration must be kept in sync, and the 
status page would be the documentation, that links the check 
options/capabilities and the actual guideline.

At the moment I can only recall `readability-function-size, 
readability-identifier-naming` and maybe `modernize-use-auto` that would 
be candidates with conflicting configuration. Others might exist, but 
most checks aren't configurable.

Having builtin config-files would allow to resolve conflicts between 
coding standards, currently the user won't even notice that one is an 
alias to another/where the alias comes from.

```
# say we want the coreguidelines and cert
clang-tidy -get-config cppcoreguidelines # create 
.clang-tidy-core-guidelines
clang-tidy -get-config cert # create .clang-tidy-cert
diff .clang-tidy-* # see the differences, do manual work
```

Having a workflow like that, would integrate with the current 
implementation of config files and would be convenient for the users, 
since there are no flaky reports when activating too many aliases to the 
same checker (e.g. `modernize-use-auto` would be pretty much in every 
guideline with possibly different configuration).

We would just provide multiple names for a check where currently only 
one is allowed.

What i am thinking of is going into this direction, its not a formal 
proposal :)

Am 25.09.2017 um 14:33 schrieb Gábor Horváth:
> Hi!
>
> On 24 September 2017 at 18:53, Jonas Toth via cfe-dev 
> <cfe-dev at lists.llvm.org <mailto:cfe-dev at lists.llvm.org>> wrote:
>
>     Hello everybody,
>
>     i am currently trying to get an overview on the implementation
>     status of the CppCoreGuidelines in all clang tools and especially
>     clang-tidy.
>
>     All rules with a section on enforcement are collected here
>     (https://github.com/JonasToth/CppCoreGuidelinesTooling
>     <https://github.com/JonasToth/CppCoreGuidelinesTooling>), and if
>     possible there is the checkname for clang-tidy etc. mentioned.
>
>     The implementation status in short:
>
>     number of rules:  286
>     number of enforced rules:                        123
>     number of rules without enforcement:     163
>
>     The reason I am writing this here: Most of the checks that would
>     enforce the guideline are not in the `cppcoreguidelines-*`-list.
>
>     It would be very nice, if there is an easy way to enable all
>     checks for the guideline, but adding ~100 aliases in clang-tidy is
>     infeasable and since many rules would apply to other guidelines as
>     well it isn't scalable, too. 
>
>
> Why do you think it is not scalable or infeasible? If we introduce 
> built-in configurations we still need to maintain the "aliases" but in 
> different files. I see only one advantage here, when different 
> configurations are required by different aliases. But I do not know 
> how frequent such checks are.
>
> Regards,
> Gábor
>
>     Such a change would mean, that sections like `readability,
>     modernize, performance, ...` still exist standalone as well as
>     especially for a guideline implemented checks like
>     `cppcoreguideline-owning-memory`. But when running clang-tidy to
>     enforce a guideline, clang-tidy would directly activate all checks
>     necessary to do so, even if there is no alias in the related module.
>
>     I would like to propose/discuss the possibility to have built-in
>     configurations in clang-tidy, that would activate and configure
>     all related checks. Such a feature would benefit other guidelines
>     (High Integrity C++, CERT) and reduce duplication.
>
>     A quick way to implement this: custom configuration files directly
>     shipped with clang-tidy.
>
>
>     A discussion on that issue would be very nice! I am willing to
>     spent some time on an implementation for that issue as well.
>
>
>     All the best, Jonas
>
>     _______________________________________________
>     cfe-dev mailing list
>     cfe-dev at lists.llvm.org <mailto:cfe-dev at lists.llvm.org>
>     http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>     <http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev>
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20170925/1e68afde/attachment.html>


More information about the cfe-dev mailing list