ReSharper 2020.3 Help

Code Cleanup

ReSharper | Edit | Cleanup Code...
Control+Alt+F
ReSharper_CleanupCode

ReSharper allows you to apply formatting and other code style preferences in a bulk mode to instantly eliminate code style violations in one or more files, in a project or in the entire solution.

Code cleanup profiles

Code cleanup can have various configurations (profiles) to apply in different cases according to your needs. There are three default profiles available out of the box:

These profiles help in most cases but you cannot configure them. If you want to run code cleanup with the custom set of cleanup tasks, you need to create a custom profile and specify the set of desired tasks there.

Create a new custom cleanup profile

  1. Select ReSharper | Options from the main menu or press Alt+R O.

  2. Go to the cleanup profiles settings page: Code Editing | Code Cleanup | Profiles.

  3. Select one of the existing profiles on the left and click Duplicate on the top of the page. ReSharper will create a new cleanup profile with the same set of tasks as in original profile.

  4. Select the newly created profile in the list of profiles.

  5. Click Configure on the top of the page.

  6. The tasks of the selected profile become editable on the right. Configure them as desired.

  7. If you want to create or edit other profiles before saving your modifications, click Done on the top of the page to temporarily remember modifications to the current profile.

  8. Click Save in the Options dialog to apply the modifications and let ReSharper choose where to save them, or save the modifications to a specific settings layer using the Save To list. For more information, see Manage and Share ReSharper Settings.

Your newly created cleanup profile will be available in the Code Cleanup dialog when you are running code cleanup. You can also set this profile to be used for the silent cleanup.

Run code cleanup

ReSharper | Edit | Cleanup Code...
Control+Alt+F
ReSharper_CleanupCode

ReSharper can apply code cleanup to an arbitrarily selected block of code, all code in the current file, all files in a directory, the current project, or even the current solution. Make sure that you select the right set of cleanup tasks by choosing the right cleanup profile.

Clean up the selection or the whole file

  1. Select the scope where you want to clean up code:

    • Make a selection in the editor to clean up code in the selection.

    • Set the caret anywhere in the file to clean up code in the file.

    • Select one or more items in the Solution Explorer to clean up code in files under these items and their child items.

  2. Do one of the following:

    • Press Control+Alt+F or choose ReSharper | Edit | Cleanup Code... from the main menu.

    • Right-click anywhere in the text editor or right-click the selection and choose Cleanup Code in the context menu.

  3. In the Code Cleanup dialog that opens, select a cleanup profile on the left. Use the area on the right to check the tasks included in the selected profile.

  4. If none of the available profiles suits you, choose one of the existing profiles and click Copy to create a new custom profile.
    Note that if you create or modify cleanup profiles in this dialog, your changes will be saved using the smart save logic. If you need to save your modifications to a shared settings layer, make your modifications on the Code Editing | Code Cleanup page of ReSharper options, click Save To and then choose the desired settings layer.

  5. Click Run to clean code in the selected scope.

  6. By default, files that are opened in the editor are not saved automatically after cleanup. If you want to enable auto-saving after cleanup, select Save after cleanup is applied to the whole file on the Code Editing | Code Cleanup | General page of ReSharper options (Alt+R, O).

You can run any cleanup tasks— for example, reformat code — every time you save a file, to make sure that your edits always comply with your code style.

Run code cleanup automatically on save

  1. Select ReSharper | Options from the main menu or press Alt+R O.

  2. Go to the cleanup profiles settings page: Code Editing | Code Cleanup | Profiles.

  3. Select a cleanup profile that you want to apply on save and click Set as default. The default profile is also used for silent cleanup.

  4. Go to the Code Editing | Code Cleanup | General options page and select Automatically run cleanup when saving a file.

    Optionally, you can restrict automatic cleanup to specific files by a file mask. You can also select Only changed parts of file to make sure that cleanup is applied to the code affected by your changes, and the rest of the code in the file is not modified.

  5. Click Save in the Options dialog to apply the modifications and let ReSharper choose where to save them, or save the modifications to a specific settings layer using the Save To list. For more information, see Manage and Share ReSharper Settings.

  6. The next time you finish editing and save the file (Ctrl+S) or all files (Ctrl+Shift+S ), ReSharper will clean up the affected files using the selected profile. If the default cleanup profile is not selected, ReSharper will prompt you choose one of the profiles.

You can clean up not only an individual file, but also multiple files in a directory, project or entire solution. To do so, you should run code cleanup from the Solution Explorer.

Clean up multiple files, projects, or entire solution

  1. Select one or more items (files, directories, projects, or the solution) in the Solution Explorer.

  2. Do one of the following:

    • Press Control+Alt+F or choose ReSharper | Edit | Cleanup Code... from the main menu.

    • Right-click the selection and choose Cleanup Code in the context menu.

  3. Choose a cleanup profile as described above.

  4. Click Run to clean code in the selected scope.

You can also run code cleanup in files that you recently opened or modified.

Clean up recently modified files

  1. Expand the submenu at ReSharper | Edit | Cleanup Recent Files.

  2. Choose whether to run cleanup for all opened files or for all recently modified files.
    Cleanup... actions wil prompt you to choose a cleanup profile, Silent Cleanup... actions will use the default cleanup profile selected on the Code Editing | Code Cleanup | Profiles page of ReSharper options (Alt+R, O).

  3. If you choose to clean up recently modified files, ReSharper will apply the selected cleanup profile to all files in the solution that were edited during the last 7 days.
    You can change the number of days during which changes should be considered recent on the Code Editing | Code Cleanup | General options page.

    You can also select Only changed parts of file to make sure that cleanup is applied to the code affected by your changes, and the rest of the code in the file is not modified.

Silent cleanup

ReSharper | Edit | Silent Cleanup Code
Control+Shift+Alt+F
ReSharper_SilentCleanupCode

You can also run code cleanup in the silent mode - that is, without displaying the Code Cleanup dialog. Since in this case you will not be able to choose a profile explicitly, you have to assign some cleanup profile to use for the silent code cleanup.

Assign a profile for silent code cleanup

  1. Select ReSharper | Options from the main menu or press Alt+R O.

  2. Go to the cleanup profiles settings page: Code Editing | Code Cleanup | Profiles.

  3. Select a cleanup profile on the left and click Set as default at the top of the options page.

  4. Click Save in the Options dialog to apply the modifications and let ReSharper choose where to save them, or save the modifications to a specific settings layer using the Save To list. For more information, see Manage and Share ReSharper Settings.

Run code cleanup in silent mode

  1. Do one of the following:

    • To run silent code cleanup in a specific code file, open it in the text editor or select it in the Solution Explorer.

    • To apply silent code cleanup to a set of files (directory, project, or solution), select the corresponding item in the Solution Explorer.

  2. Press Control+Shift+Alt+F or choose ReSharper | Edit | Silent Cleanup Code from the main menu. Alternatively, you can press Control+Shift+A, start typing the command name in the popup, and then choose it there.

Available code cleanup tasks

The tables below list available cleanup tasks for different languages. If you need the cleanup to perform only a part of these tasks, you can create a custom cleanup profile for that.

C#

Apply file layoutReorders type members in files according to the rules configurable on the Code Editing | C# | File Layout page of ReSharper options (Alt+R, O). For more information, see Rearrange Members with File and Type Layout Patterns.
Update file headerInserts or updates the file header comment that you can configure on the Code Editing | File Header Text page of ReSharper options. For more information, see File Header Style.
Syntax Styles
Apply 'var' styleApplies the rules for 'var' usage during the cleanup. The rules are configurable on the Code Editing | C# | Syntax Style page of ReSharper options (Alt+R, O).
Use explicit or implicit modifier definition for typesApplies the rule for type modifiers - whether on not to use the internal modifier explicitly. The rule is configurable on the Code Editing | C# | Syntax Style page of ReSharper options (Alt+R, O). For more information, see Code Syntax Style: Modifiers.
Use explicit or implicit modifier definition for type membersApplies the rule for type member modifiers - whether on not to use the private modifier explicitly. The rule is configurable on the Code Editing | C# | Syntax Style page of ReSharper options (Alt+R, O). For more information, see Code Syntax Style: Modifiers.
Sort modifiersApplies the preferred order of type/member modifiers. The rule is configurable on the Code Editing | C# | Syntax Style page of ReSharper options (Alt+R, O). For more information, see Code Syntax Style: Modifiers.
Apply arguments style (named | positional)Applies the preferences for named/positional arguments for specific types of parameters. The preferences are configurable on the Code Editing | C# | Syntax Style page of ReSharper options (Alt+R, O). For more information, see Code Syntax Style: Named/Positional Arguments.
Remove redundant parenthesesRemoves redundant optional parentheses in cases specified on the Code Editing | C# | Syntax Style page of ReSharper options (Alt+R, O). For more information, see Code Syntax Style: Optional Parentheses.
Add parentheses to explicitly specify operation precedenceAdds optional parentheses to clarify precedence of operations in cases specified on the Code Editing | C# | Syntax Style page of ReSharper options (Alt+R, O). For more information, see Code Syntax Style: Optional Parentheses.
Add/remove braces around single statementsAdds or removes optional braces around single nested statements as specified on the Code Editing | C# | Syntax Style page of ReSharper options (Alt+R, O). For more information, see Code Syntax Style: Braces for Single Nested Statements.
Arrange attributesApplies the rules for multiple attributes as specified on the Code Editing | C# | Syntax Style page of ReSharper options (Alt+R, O). For more information, see Code Syntax Style: Multiple Attributes.
Apply code body styleApplies preferences for bodies of type members (expression body | statement body) as specified on the Code Editing | C# | Syntax Style page of ReSharper options (Alt+R, O). For more information, see Code Syntax Style: Bodies of Type Members.
Arrange trailing commasApplies preferences for trailing commas in declarations with multiple items and similar constructs (object, array, and collection initializers, as well as enums and switch expressions) as specified on the Code Editing | C# | Syntax Style page of ReSharper options (Alt+R, O). For more information, see Code Syntax Style: Trailing Commas.
Apply object creation style ('new()' vs 'new T()')Applies preferences for using the target-typed new operator in C# 9.0 and later as specified on the Code Editing | C# | Syntax Style page of ReSharper options (Alt+R, O). For more information, see Code Syntax Style: Object Creation ('new()' vs 'new T()').
Apply default value style ('default' vs 'default(T)')Applies preferences for using optional type specification in default value expressions as specified on the Code Editing | C# | Syntax Style page of ReSharper options (Alt+R, O). For more information, see Code Syntax Style: Default Value Expressions ('default' vs 'default(T)').
Remove code redundancies

On the Code Inspection | Inspection Severity page of ReSharper options (Alt+R, O), in the Redundancies in Code categories for most languages, ReSharper lists over 50 redundancies that have associated code inspections. Some of them require special attention, and you cannot process them in the batch mode. That leaves Code Cleanup with about 30 redundancies that it is able to remove automatically whenever you select Remove code redundancies in your cleanup profile.
Specifically, code cleanup:

  • Removes:

    • Redundant empty constructors.

    • Explicit integer type specifiers in enumerations.

    • true specifiers in for statements.

    • Redundant type casts.

    • Redundant parentheses from attributes without arguments.

    • Explicit calls to base class constructors without arguments.

    • Redundant boolean comparisons.

    • Redundant braces from collection initializers with a single expression.

    • Redundant explicit delegate creation expressions.

    • Empty argument lists from object/collection initializers.

    • Redundant new keywords.

    • Redundant partial modifiers on type declarations where a type has a single part.

    • Redundant unsafe contexts and statements.

    • Redundant object.ToString() calls (for example, in a concatenation with a string or as an argument of a string.Format() call).

    • Redundant string.ToCharArray() calls.

    • Redundant specifications of argument types.

    • Signatures in anonymous methods where its parameters are not used in the method body.

    • Non-referenced labels.

    • Redundant field initializers.

    • Redundant explicit names in anonymous type properties.

    • Redundant nullable types where value type is implicitly convertible to nullable.

  • Converts:

    • Nullable types to short form Nullable<T> to T? ).

    • Static method invocations to extension method calls where extension methods are invoked as static methods.

    • To implicitly typed array creation expressions when array type can be inferred from initializer.

  • Fixes:

    • Occurrences where static members of a type are accessed via derived members of the type.

Use auto-property, if possible Replaces simple properties and corresponding backing fields with auto-properties. For more information, see Use Auto-Properties.
Make field read-only, if possible Adds the 'readonly' keyword to fields that are assigned in the declaration or in a constructor and only have read usages. For more information, see Make Fields Readonly.
Make auto-property get-only, if possibleRemoves the redundant set accessor on auto-properties that are initialized from the constructor/initializer and have no write usages. Note that this task only works for C# 6.0. By default, ReSharper automatically detects C# version based on the associated compiler. However, you can specify the target C# version explicitly— right-click the project in the Solution Explorer, choose Edit project item properties from the context menu and use the C# Language Level selector..
Arrange qualifiersApplies the rules for qualifying type members. The rules are configurable on the Code Editing | C# | Syntax Style page of ReSharper options (Alt+R, O). For more information, see Code Syntax Style: Optional Member Qualifiers.
Fix built-in type referencesApplies the rule for built-in type names (C# keyword or CLR type name). The rule is configurable on the Code Editing | C# | Syntax Style page of ReSharper options (Alt+R, O). For more information, see Code Syntax Style: Built-In Type References.
Usings

Includes the following configurable options:

  • Optimize 'using' directives
    Removes unused namespace import directives by implementing the rules that you can configure on the Code Editing | C# | Namespace Imports and Code Editing | C# | Syntax Style options pages and sorts the namespace import directives: all System.* namespaces go first, sorted alphabetically by the second word after the dot; all other namespaces go next, in alphabetical order.. For more information, see Code Syntax Style: Namespace Imports.

  • Embrace 'using' directives in region
    If this checkbox is selected, a new region for wrapping all namespace import directives is created during cleanup.

  • Region name
    Allows specifying a name for the region wrapping namespace import directives.

Shorten qualified referencesReplaces fully qualified names with short names when possible by importing namespaces, implementing settings configured on the Code Editing | C# | Syntax Style page of ReSharper options (Alt+R, O).
Reformat codeReformats your code according to the preferences that you can configure on the Code Editing | C# | Formatting Style page of ReSharper options (Alt+R, O). For more information, see Manage and Apply Code Formatting Rules.
Reformat embedded XML doc commentsReformats XML doc comments according to options configurable on the Code Editing | XML Doc Comments | Formatting Style page of ReSharper options (Alt+R, O).

Note that ReSharper does not reformat plain comments like:
// A plain single-line comment
or
/* A plain multi-line comment */

XAML

Collapse empty tagsRemoves the closing tag if the tag body is empty.
Remove redundant attributesRemoves attributes, such as Freeze, modifiers, name, span, UpdateSourceTrigger, Mode if they are redundant in the context
Remove redundant resourceRemoves resource references that are not used
Remove redundant property settersRemoves unused setters for the following properties: property, attached, style.
Remove redundant namespace aliasRemove all redundant namespace aliases in the scope of cleanup. Redundant aliases are also detected with the code inspection and can be removed with a quick-fix.
Remove redundant definitionsRemoves definitions if they are redundant in the context
Remove forbidden attributesRemoves attributes, such as name, span if they are forbidden in the context

XML

Reformat codeReformats your code according to the preferences that you can configure on the Code Editing | XML | Formatting Style page of ReSharper options (Alt+R, O). For more information, see Manage and Apply Code Formatting Rules.

C++

C++ code styles and code redundancies
  • Add 'override' specifier to overriding functions

  • Add required 'typename' and 'template' keywords

  • Fix slashes in include file paths

  • Join declarations and assignments

  • Make member functions 'const' when possible

  • Make member functions 'static' when possible

  • Remove redundant 'else' keywords

  • Remove redundant member initializers

  • Remove redundant parentheses

  • Remove redundant qualifiers

  • Remove redundant specifiers

  • Remove redundant statements

  • Remove redundant 'typename' and 'template' keywords

  • Remove unreachable code

  • Remove unused #include directives

  • Replace C-style casts with static casts

  • Make local variables const

  • Replace constants in boolean context with boolean literals

  • Replace explicit types with 'auto' where possible

  • Replace if statements with constant conditions with 'if constexpr'

  • Replace postfix operators with prefix variants

  • Replace smart pointer constructors with make functions

  • Replace throw expressions with rethrow where possible

  • Replace zero valued expressions in pointer context with nullptr

  • Sort #include directives

  • Sort member initializers by the order of initialization

Apply Clang-tidy fix-its

In this node, you can choose all or specific fixes that will be applied according to the Clang-Tidy checks.

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.

Reformat codeReformats your code according to the preferences that you can configure on the Code Editing | C++ | Formatting Style page of ReSharper options (Alt+R, O). For more information, see Manage and Apply Code Formatting Rules.
Update file headerInserts or updates the file header comment that you can configure on the Code Editing | File Header Text page of ReSharper options. For more information, see File Header Style.

VB.NET

Remove code redundanciesRemoves redundant code the same way as for C# Language
Optimize 'import' directivesRemoves unused namespace import directives implementing rules configured on the Code Editing | Visual Basic .NET | Namespace Imports page of ReSharper options.
Shorten qualified referencesReplaces fully qualified names with short names when possible by importing namespaces, implementing settings configured on the Code Editing | Visual Bascic.NET | Syntax Style page of ReSharper options (Alt+R, O).
Reformat codeReformats your code according to the preferences that you can configure on the Code Editing | VB.NET | Formatting Style page of ReSharper options (Alt+R, O). For more information, see Manage and Apply Code Formatting Rules.
Reformat embedded XML doc commentsReformats XML doc comments according to options configurable on the Code Editing | XML Doc Comments | Formatting Style page of ReSharper options (Alt+R, O).

Note that ReSharper does not reformat plain comments like:
// A plain single-line comment
or
/* A plain multi-line comment */

CSS

Alphabetize propertiesRearranges CSS properties in the alphabetical order.
Reformat codeReformats your code according to the preferences that you can configure on the Code Editing | CSS | Formatting Style page of ReSharper options (Alt+R, O). For more information, see Manage and Apply Code Formatting Rules.

JavaScript-like languages

Apply statement terminationAdds the optional semicolon ; at the end of statements in JavaScript, TypeScript, and JSON.

JavaScript

Normalize quotes around string literalApplies the preferred quote style: single quote (') or double quote ("). The preference can be configured on the Code Editing | TypeScript | Syntax Style page of ReSharper options (Alt+R, O). For more information, see Quotes style.
Correct 'var' to 'let'/'const' where possible

let and const are supported in the following cases:

  • In JavaScript code, if the target JavaScript language level is ECMAScript 6 (you can choose it on the Code Editing | JavaScript | Inspections page of ReSharper options (Alt+R, O))

  • In TypeScript 1.4, if the target ECMAScript 6 is selected in the project properties.

  • In TypeScript 1.5 or later.

Move let/const to most possible inner scopesMoves variables defined outside of a function/compound statement, and so on closer to their usages if there are no other usages in outer scopes.
Convert string concatenations to template stringsIn JavaScript code, if the target JavaScript language level is ECMAScript 6 (you can choose it on the Code Editing | JavaScript | Inspections page of ReSharper options (Alt+R, O)), as well as in TypeScript 1.4 or later, this option will convert string concatenations to template strings. For example:
var str1 = "Hello,"; var str2 = "Test: " + str1 + " World1";
will be converted to
const str1 = "Hello, "; const str2 = `Test: ${str1} World1`;
Reformat codeReformats your code according to the preferences that you can configure on the Code Editing | JavaScript | Formatting Style page of ReSharper options (Alt+R, O). For more information, see Manage and Apply Code Formatting Rules.
Reformat embedded XML doc commentsReformats XML doc comments according to options configurable on the Code Editing | XML Doc Comments | Formatting Style page of ReSharper options (Alt+R, O).

Note that ReSharper does not reformat plain comments like:
// A plain single-line comment
or
/* A plain multi-line comment */

TypeScript

Remove redundant qualifiersUse this option to remove redundant type name qualifiers.
Optimize 'import' statementsUse this option to remove redundant 'import' statements or fully-qualified names according to the settings configurable on the Code Editing | TypeScript | Inspections page of ReSharper options (Alt+R, O).
Optimize reference commentsUse this option to remove redundant reference comments.
Synchronize 'public' presence with code styleThis options lets you add or remove explicit 'public' modifier according to settings configurable on the Code Editing | TypeScript | Inspections page of ReSharper options (Alt+R, O).
Add explicit 'any' type annotation if neededThis options lets you add explicit 'any' annotation to types according to settings configurable on the Code Editing | TypeScript | Inspections page of ReSharper options (Alt+R, O).
Synchronize type annotation presence with code styleThis options lets you enforce explicit/implicit typing according to settings configurable on the Code Editing | TypeScript | Inspections page of ReSharper options (Alt+R, O).
Fix relative path style in 'require' if neededApplies the Relative file reference style in 'require' code style preference for relative paths in the require keyword. For example, import X = require("file1") or import X = require("./file1"). You can configure this preference on the Code Editing | TypeScript | Inspections page of ReSharper options (Alt+R, O).
Use 'as' instead of type assertionsReplaces
var bar = <string> foo;
with
var bar = foo as string;
which is a recommended way to avoid ambiguity with JSX syntax.

HTML

Reformat codeReformats your code according to the preferences that you can configure on the Code Editing | HTML | Formatting Style page of ReSharper options (Alt+R, O). For more information, see Manage and Apply Code Formatting Rules.
Normalize quotes around attribute valueApplies the preferred quote style: single quote (') or double quote ("), configurable on the Code Editing | HTML | Syntax Style page of ReSharper options.

ASP.NET

Optimize @Register directivesRemoves unused @Register directives.
Last modified: 08 March 2021