Project

General

Profile

Actions

Task #3837

open

Investigate clang-tidy usage to enforce coding standards

Added by Roland Fischer over 4 years ago. Updated 5 months ago.

Status:
New
Priority:
Normal
Target version:
Effort:
Difficulty:
Label:

Description

We shall investigate using clang-tidy to enforce coding style guide that cannot be done with clang-format. It can also be used to enforce some "best practices".

Limitation of clang-format is that it only reformats code. clang-tidy can be used to e.g. enforce "always use brace for if()".

Actions #1

Updated by Roland Fischer over 4 years ago

What's the difference between scan-build and clang-tidy?

scan-build does static analysis of code and as such does flow-control and path analysis. Use it to help finding bugs.

clang-tidy provides linter-based checks only that is mostly used to enforce coding standards. It's only based on the AST afaik. It's fully configurable on what to check for.

clang-tidy can also be used to "fix the code for some checks", i.e. it's convenient to use clang-tidy to upgrade" a code base to certain standards, such as the "shall always use braces" in this example.FYI, scan-build is used as static analysis tool in private QA builds.

Actions #2

Updated by Roland Fischer over 4 years ago

Also check out CodeChecker that could combine static analysis and clang-tidy: https://clang-analyzer.llvm.org/command-line.html

Integration with github probably would be an issue

Actions #3

Updated by Roland Fischer over 4 years ago

Documentation can be found at: https://clang.llvm.org/extra/clang-tidy/index.html
Version-specific doc, e.g. for clang 9: https://releases.llvm.org/9.0.0/tools/clang/tools/extra/docs/clang-tidy/index.html

List of available clang-tidy checks including whether a 'fix" is available (for latest clang): https://clang.llvm.org/extra/clang-tidy/checks/list.html

E.g. enforcing braces for if statements and loops: https://clang.llvm.org/extra/clang-tidy/checks/readability-braces-around-statements.html

Actions #4

Updated by Philippe Antoine 5 months ago

  • Assignee set to Community Ticket
  • Target version set to TBD
Actions

Also available in: Atom PDF