ReSharper's Built-in Code Cleanup Profiles, Compared

What ReSharper's three built-in Code Cleanup profiles actually do differently, plus a naming pitfall worth avoiding when customizing profiles across settings layers.

ReSharper ships with three built-in Code Cleanup profiles — Reformat Code, Reformat and Apply Syntax Style, and Full Cleanup — and it’s tempting to assume they’re just three intensity levels of the same basic operation. They are, roughly, but the gap between them is bigger than the names imply, and knowing exactly what each one touches matters before you wire one into a pre-commit hook or a CI check.

The three profiles

Reformat Code does exactly what it says: it formats code according to your configured style settings. No structural changes, no removing redundancies — purely formatting.

Reformat and Apply Syntax Style goes further, adding unused using directive removal, namespace optimization, and layout/style rule application on top of formatting.

Full Cleanup is the most comprehensive of the three: it includes everything in Reformat and Apply Syntax Style, plus advanced fixes like running custom file templates and addressing deeper structural issues.

Where the line actually falls

The full comparison is long, but the shape of it is worth knowing:

Reformat Code alone only ever touches raw formatting — indentation, whitespace, line breaks — across C#, VB.NET, XML, and HTML.

Reformat and Apply Syntax Style adds a substantial batch of “Syntax Styles” — var usage, explicit vs. implicit type/member modifiers, modifier sorting, argument style, redundant parentheses, brace usage for single statements, code body style (expression vs. block), trailing commas, object creation style, null-checking pattern style, qualifier arrangement, and more — plus a handful of XAML and HTML-specific normalizations.

Full Cleanup is the only profile that touches “Optimize Imports” (removing unused using/Imports directives, shortening qualified references), “Rearrange Code” (applying file layout), and “Remove Redundancies” (converting to auto-properties, making fields read-only where possible, stripping a long list of redundant XAML attributes).

The practical implication: if you only need consistent formatting, Reformat Code is non-destructive and safe to run broadly. The moment you want unused imports removed or file layout enforced, you need Full Cleanup specifically — the middle profile won’t touch either.

A naming trap worth knowing about

If your team uses multiple settings layer files — global, team-shared, personal — profile names need to be genuinely distinct, or one silently shadows another. Reusing a profile name across layers hides the lower layer’s version entirely (see the related piece on settings layer precedence for how that ordering works).

This happens easily by accident: duplicating a built-in profile leaves it named something like Copy of Built-in: Full Cleanup, and if nobody renames the copy, two different settings layers can end up with identically-named profiles that mean different things.

A concrete example: in a “default” team-shared settings layer, you might have Copy of Built-in: Full Cleanup, Copy of Built-in: Reformat Code, and Copy of Built-in: Reformat & Apply Syntax Style. In an injected “teamshared2” layer, the same three profiles exist, but only one was renamed — say, to TS2 Copy of Built-in: Reformat & Apply Syntax Style. The result: Copy of Built-in: Full Cleanup and Copy of Built-in: Reformat Code from the “teamshared2” layer become invisible for code cleanup, because the higher layer’s identically-named profiles win. Only the renamed one shows up as distinct.

The takeaway

Know which profile you actually need — Reformat Code for pure formatting, Full Cleanup for anything involving imports, file layout, or redundancy removal — and if you’re customizing profiles across multiple settings layers, give every custom profile a name that won’t collide with anything else in the hierarchy. The collision is silent; you won’t get an error, you’ll just get a profile quietly not doing what you expected.