ReSharper 2022.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.

ReSharper provides seamless integration with Clang-Tidy. This means that as you edit a file, ReSharper runs Clang-Tidy on it in background as a separate process, with inspection results shown alongside other ReSharper'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 ReSharper’s inspections, you can look at the name of the check in square brackets, appended to the inspection message:

Clang-Tidy checks in ReSharper

In addition to diagnostics from Clang-Tidy checks, ReSharper 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 ReSharper’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.

ReSharper: Clang-Tidy inspection menu

Clang-Tidy fixes

ReSharper 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).

ReSharper: A quick fix for Clang-Tidy inspection

By default, ReSharper 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 Code Editing | C++ | Clang-Tidy page of ReSharper options (Alt+R, O). 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.

ReSharper: Applying Clang-Tidy fixes with code cleanup

The selected fixes will be applied even if the corresponding inspections are turned off on the Code Inspection | Inspection Severity page of ReSharper options (Alt+R, O). 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

ReSharper 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 ReSharper 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 Code Editing | C++ | Clang-Tidy page of ReSharper options (Alt+R, O) 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, ReSharper takes the value of the List of enabled/disabled Clang-Tidy checks setting on the Code Editing | C++ | Clang-Tidy page of ReSharper options (Alt+R, O) and appends to it the names of checks which are turned off on the Code Inspection | Inspection Severity options page.

By default, ReSharper uses built-in binary of Clang-Tidy 11. You can make ReSharper use any other Clang-Tidy binary (version 7 or later). To do so, you have two additional options on the Code Editing | C++ | Clang-Tidy page of ReSharper options (Alt+R, O):

  • 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(Control+Alt+Shift+D9) 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 Code Editing | C++ | Clang-Tidy page of ReSharper options (Alt+R, O).

  • If you are using a custom Clang-tidy binary (Find in %PATH% and Custom on the Code Editing | C++ | Clang-Tidy page of ReSharper options (Alt+R, O)), you can only use version 7 or later.

Last modified: 04 April 2022