JetBrains Rider 2020.2 Help

Clang-Tidy Integration

Clang-Tidy is a powerful open-source code analysis tool based on the popular Clang compiler. It comes with an extensive set of code checks and accompanying fixes for typical programming errors.

JetBrains Rider provides seamless integration with Clang-Tidy. This means that as you edit a file, JetBrains Rider runs Clang-Tidy on it in background as a separate process, with inspection results shown alongside other JetBrains Rider's inspections. Unsaved files are handled transparently by saving the text of the current document to a temporary file and instructing Clang-Tidy to use it instead of the on-disk version.

Clang-Tidy inspections

To distinguish between Clang-Tidy checks and JetBrains Rider’s inspections, you can look at the name of the check in square brackets, appended to the inspection message:

Clang-Tidy checks in JetBrains Rider

In addition to diagnostics from Clang-Tidy checks, JetBrains Rider also issues diagnostics from Clang Static Analyzer and warnings provided by the Clang compiler itself. All of them have corresponding configurable severity levels, which can be adjusted to meet your needs.

Some of the Clang-Tidy checks that duplicate JetBrains Rider’s built-in inspections are turned off by default. In addition, all static analyzer checks are disabled, since enabling them significantly slows down Clang-Tidy.

As with the built-in inspections, you can use the inspection context menu to quickly change the severity of a Clang-Tidy check, suppress it via a comment (in specific scope or globally), or find and investigate all similar issues. There is also an additional action that opens the online documentation page for a particular check.

JetBrains Rider: Clang-Tidy inspection menu

Clang-Tidy fixes

JetBrains Rider lets you apply the fixes provided by Clang-Tidy similarly to its own built-in quick-fixes. As with other bulk fixes, Clang-Tidy fixes can be applied individually or inside a specific scope (file, folder, project, or solution).

JetBrains Rider: A quick fix for Clang-Tidy inspection

By default, JetBrains Rider will reformat code changed by Clang-Tidy fixes to maintain the code style. This behavior can be disabled via the Reformat changed code after applying Clang-Tidy fix-its setting on the Languages and Frameworks | C++ | Clang-Tidy page of JetBrains Rider settings Ctrl+Alt+S. Disabling this setting will speed up the execution of Clang-Tidy fixes.

Applying Clang-Tidy fixes with code cleanup

Clang-Tidy fixes can also be applied with Code Cleanup. Built-in code cleanup profile does not include all available Clang-Tidy fixes, so to configure it you need to select the Clang-Tidy profile from the list, click the options button next to it, and select all the required checks which will be executed when you run code cleanup with this profile.

JetBrains Rider: Applying Clang-Tidy fixes with code cleanup

The selected fixes will be applied even if the corresponding inspections are turned off on the Editor | Inspection Settings| Inspection Severity page of JetBrains Rider settings Ctrl+Alt+S. Be careful when enabling too many checks at once — code cleanup runs Clang-Tidy only once for a given file, so if multiple fixes touch the same block of code, the changes might conflict with each other.

Configuring Clang-Tidy

JetBrains Rider does not write its own Clang-Tidy config, so a user-provided one can be picked. Clang-Tidy attempts to read configuration for each source file from a .clang-tidy file located in the closest parent directory of the source file. The source file here (as with the rest of JetBrains Rider inspections) is the .cpp file itself if the analysis is run on it, or a random .cpp file which includes the header when the analysis is performed on a header file. Alternatively, you can select the Use a specific clang-tidy configuration file setting on the Languages and Frameworks | C++ | Clang-Tidy page of JetBrains Rider settings Ctrl+Alt+S to specify the location of configuration file.

The -checks command line option of the Clang-Tidy binary is used to pass the list of enabled checks, which then gets appended to the value of the checks option read from the Clang-Tidy config. To construct the -checks argument, JetBrains Rider takes the value of the List of enabled/disabled Clang-Tidy checks setting on the Languages and Frameworks | C++ | Clang-Tidy page of JetBrains Rider settings Ctrl+Alt+S and appends to it the names of checks which are turned off on the Editor | Inspection Settings | Inspection Severity options page.

By default, JetBrains Rider uses built-in binary of Clang-Tidy 10. You can make JetBrains Rider use any other Clang-Tidy binary (version 7 or later). To do so, you have two additional options on the Languages and Frameworks | C++ | Clang-Tidy page of JetBrains Rider settings Ctrl+Alt+S:

  • Find in %PATH% - Use Clang-Tidy found in the location specified in the %PATH% environment variable.

  • Custom - Use a specific Clang-Tidy executable.

If necessary, you can also disable Clang-Tidy analysis in the current document using the Enable Clang-Tidy analysis() toggle in the status indicator context menu.

Limitations of Clang-Tidy integration

  • Files using UTF-16 or UTF-32 encoding cannot be read by Clang and thus are not supported by Clang-Tidy at the moment.

  • Sometimes Clang-Tidy might crash on your code, and Windows will show you the “Process has stopped working” message. In this case disable Clang-Tidy integration for the current solution on the Languages and Frameworks | C++ | Clang-Tidy page of JetBrains Rider settings Ctrl+Alt+S.

  • If you are using a custom Clang-tidy binary (Find in %PATH% and Custom on the Languages and Frameworks | C++ | Clang-Tidy page of JetBrains Rider settings Ctrl+Alt+S), you can only use version 7 or later.

Last modified: 05 August 2020