What′s New in ReSharper

ReSharper Ultimate 2019.2 delivers better support for C# 8.0 and a few updates in Navigation, Find Usages, and the debugger data tips. It also improves startup times and offers initial support for the “Per-Monitor DPI Awareness” mode in VS 2019. Indexing for C++ projects is faster, and more C++ 20 features are supported.

Download
Free 30-day trial

ReSharper 2019.2

Enhanced C# support

Enhanced C# support

Take full advantage of C# 8 with ReSharper’s enhanced support:

  • Supports the latest changes in indices and ranges such as indexable and rangeable types.
  • The context action Add range check now supports indexing by System.Index/System.Range and produces correct checks.
  • Supports unmanaged generic structs.
  • Two new inspections, ‘Convert switch statement to switch expression’ and ‘Convert chain of ternary expressions to switch expression’, with a corresponding ‘Convert to switch expression’ quick-fix.

You asked and we delivered: the context action Convert concatenation to interpolation can now be applied in scope.

Faster startup times

Borrowing from Rider, we’ve started using the MSBuild-based project model instead of the Visual Studio COM API. This will help optimize solution loading times as we’ve minimized the use of COM API, which locks the UI thread.

In addition, we’ve updated the Performance Guide page. It has a new Windows Defender section and descriptions for all performance tips, which describe what exactly will be done after a suggestion is applied.

Navigations and Find Usages

Navigations and Find Usages

In this release, Find Usages starts using the data from Solution Wide Error Analysis to gather the results. If you enable SWEA for your solution, Find Usage will show you results significantly faster.

We’ve added a couple of small improvements to Navigation and hope you will find them useful: 

  • You can search in a file right through the “Go to File Member” dialog. The list of results will have the names of all matching members and all the places where the search string appears in the file.
  • In the Go To Text results window, you can now filter out the comment lines if you are not interested in looking for occurrences in comment strings.
Debugger data tips

Debugger Data Tips

ReSharper 2019.2 brings several updates to the debugger data tips:

  • We’ve added a couple of new toggles: implicit function evaluation and auto evaluate property.
  • They respect the setting “Enable property evaluation and other implicit function calls” and can evaluate property values on demand.
Code style & code formatter

Code style & code formatter

To improve C# 8.0 support, we added new formatting options for switch expressions. Support for .editorconfig, StyleCop.Settings, and .clang-format now performs better and is switched on by default for highlighting and Solution Wide Error Analysis. You can also edit EditorConfig properties right inside the Options page.

Support for “Per-Monitor DPI Awareness” mode

Support for “Per-Monitor DPI Awareness” mode

ReSharper Ultimate 2019.2 offers better support for the “Per-Monitor DPI Awareness” mode introduced in Visual Studio 2019. We know some ReSharper users previously opted to disable Optimize rendering for screens with different pixel densities (via Tools | Options | Environment | General) because of the rendering issue we had with the ReSharper tool windows. Please enable it again and check out how it looks. Note there might still be places where you can experience some glitches.

Other features

Other features

  • Parameter name hints have performance improvements and new heuristics.
  • A new tooltip with the keyword description is available in the IL Viewer.
  • The Advanced symbols options dialog under ReSharper | Options | Tools | External Sources now supports relative paths.
  • The Assembly Explorer tool window now has a ‘Summary’ property on the “Properties” tab and an unmanaged (win32) resources subtree.
Unreal Engine

Unreal Engine support Ultimate

In the previous release, we began to work towards better support for UE4-specific Remote Procedure Calls. Now, we've updated the Rename and Change Signature refactorings to work correctly on RPC functions. A few new code analysis checks are also available for UE4-based code, especially targeting the missing or incorrectly set UE4 reflection macros.

Following on from adding code completion for reflection specifiers in v2019.1, we've now added built-in documentation for them. It is shown in the Quick Documentation popup (CtrlQ) when the caret is located on a specifier.

faster indexing

Faster indexing for C++ projects Ultimate

The new preprocessor implementation used inside ReSharper C++ has sped up the indexing on typical solutions, like LLVM and Unreal Engine, by 15-25%.

See What's new in ReSharper C++.

dotMemory console profiler improvements Ultimate

dotMemory 2019.2 stops supporting remote profiling. To offer you an adequate replacement, we significantly improved the dotMemory console profiler:

  • The console profiler gets commands to profile all types of applications including .NET Core applications, IIS Express-hosted applications, Windows services, and others.
  • The --trigger-on-activation argument allows taking a memory snapshot right after this becomes possible. This feature can be helpful in case you want to take a baseline snapshot and use it for comparison.
Download
Free 30-day trial

ReSharper 2019.1

Initial C# 8 support

Initial C# 8 support

Most of the new language features are already supported, including:

  • Ranges and index from end expressions
  • Null-coalescing assignment
  • Switch expressions
  • Tuple expression in a switch statement
  • Static local functions
  • Async streams
  • Nullable reference types
  • Recursive patterns
  • using declarations

Typing assists for nullability annotations have been enhanced to support the features from the latest language version.

To learn more, see Indices, Ranges, and Null-coalescing Assignments – A Look at New language features in C# 8.

Support for Visual Studio 2019 RTM

Support for Visual Studio 2019 RTM

ReSharper 2019.1 supports the recent final release build of Visual Studio 2019. Apart from supporting C# 8.0, there are the following notable changes:

  • This build supports the “async packages auto-load” API in Visual Studio 2019.
  • MSTest framework in Visual Studio 2019 is supported.

How is ReSharper 2019.1 better than plain Visual Studio 2019?

Code formatting update

Code formatting update

Here are the improvements we’ve made for code formatting:

  • There’s a new typing assist to unindent the code when you press Backspace.
  • Now you can export all code formatting and code styles setting to a .editorconfig file and share them with your colleagues who don’t use JetBrains products.
  • Detecting formatting settings works in the background.
  • Formatting inspections for indenting around child statements are ON by default.
  • Sorting using directives is compatible with Visual Studio and StyleCop behavior, and it supports sorting all using directives alphabetically, including System.
  • A new built-in Code Cleanup profile is available.

To learn more, see Export EditorConfig Code Style, Optimize References for SDK Projects, and More ReSharper 2019.1 Updates .

More files for Go to Text

More files for Go to Text

The engine behind Go to Text takes into account literally all text files in a solution.

Previously, Go to Text considered only files that had already been indexed by ReSharper. ReSharper indexes only files which contain code or can help you write code, since running the full indexing for other files is expensive in most cases. So, all files with “unknown” file extensions were completely out of scope, meaning you could not search in non-code files.

We’ve leveled up the engine! Now, while the results from indexed files are being displayed, the engine starts searching in non-indexed text files in the background. This is very helpful if you store some data in files with different extensions, such as .*proj, .yml, and .csv.

Optimize References for SDK projects

Optimize References for SDK projects

ReSharper now also checks for unused package references in SDK projects. Use “Optimize References” in the context menu for a project to analyze and optimize these references. When the project does not contain any code that uses a given reference, it will show as unused. Easily uninstall unused packages and keep your project’s dependency tree clean!

To learn more, see Export EditorConfig Code Style, Optimize References for SDK Projects, and More ReSharper 2019.1 Updates .

Improved Extract Method refactoring

Improved Extract Method refactoring

The Extract Method refactoring is now even more developer-friendly. If the auto-generated name for the introduced parameter is not exactly what you want, simply edit the name right in the refactoring dialog, along with the introduced method name, return type, and visibility.

Hints in the code editor

Hints in the code editor

Parameter name hints now work in more places in your code. First, you may find them in an attribute’s usages to display the names for the attribute’s parameters. Second, special hints appear for methods marked by a StringFormatMethod attribute, e.g. Console.WriteLine(), and display the index of the parameter whose value will be inserted at that position. Please note that “StringFormatMethod” hints are disabled by default and can be enabled in Options.

In addition, we’ve introduced new code annotation hints for parameters on a method declaration. They show you code annotations for a parameter calculated by ReSharper code analysis if one is specified in:

  • an overridden base method located in a parent class, or
  • an implemented method declared in parent interfaces.
Unreal Engine

Unreal Engine support Ultimate

With warm and cold startup times for projects significantly improved, and some special performance tuning for Unreal Engine projects in particular, ReSharper C++ 2019.1 is now more responsive than ever! For Unreal Engine code, there’s Unreal Engine naming support, completion for reflection specifiers, special code generation and navigation options for RPCs, and enhanced auto-import.

performance

Faster performance for C++ projects Ultimate

ReSharper C++ 2019.1 boosts performance across many areas. Cold and warm startup is significantly quicker, memory traffic is reduced during initial indexing, and the memory footprint afterwards is smaller as well. We’ve also sped up Search everywhere and Go to type, and made it so the Go to file member, Go to base class, and Go to derived class searches are all now available during indexing.

Download
Free 30-day trial

ReSharper 2018.3

Inline parameter name hints for C# and VB.NET

Inline parameter name hints for C# and VB.NET

We’ve added parameter name hints right to the code editor to make C# and VB.NET code more readable. When a literal is used in a method call ReSharper annotates it with the name of the parameter, making it much easier to understand what value it represents.

To learn more, see Inline parameter name hints for C# and VB.NET in ReSharper and Rider.

Visual Studio 2019 support

Visual Studio 2019 Preview 1 support

Starting with version 2018.3, ReSharper has early support for Visual Studio 2019 and can be integrated into Visual Studio 2019 Preview 1 build. Full support will be available in future ReSharper updates after the official release of Visual Studio 2019.

Auto-detection of formatter settings and the naming style

Auto-detection of formatter settings and the naming style

Have you spent a lot of time in ReSharper options trying to configure formatter settings to follow your style? No more struggling! ReSharper detects code formatting style from your code and adjusts the formatter settings accordingly (ReSharper | Edit | Detect formatting settings).

ReSharper now detects the naming style used in the code to follow that naming convention and doesn't highlight most of the entities declarations with Inconsistent naming warnings like it used to.

To learn more, see Detection of code styles and naming with ReSharper.

Improved C# 7 deconstruction support

Improved C# 7 deconstruction support

We keep improving ReSharper’s support for C# to help you make the best use of the language and improve your code with ease. In this release, Go To Declaration/Implementation supports deconstruction declarations, new/updated inspections, quick-fixes, and context actions.

To learn more, see Tuples, deconstruction, string interpolation – improved inspections and quick fixes.

Inspections for parameterized NUnit tests

Сode inspections for NUnit

This update introduces a set of code inspections with corresponding quick-fixes and context actions to help you write NUnit tests faster.

To learn more, see Unit Testing Receives Major Updates in ReSharper and Rider 2018.3.

VB.NET 15.3 and 15.5 language support

VB.NET 15.3 and 15.5 language support

In addition to C#, ReSharper continues improving its VB.NET support and now finally supports all features from the latest available VB.NET language versions, such as:

  • Named tuple inference.
  • Leading hex/binary/octal separator.
  • Non-trailing named arguments.
  • Private Protected member access modifier.

To learn more, see VB.NET 15.3 and 15.5 language features.

Code Analysis

Code Analysis

In addition to the enhanced deconstruction support and working with the latest VB.NET versions, lots of new inspections, quick-fixes, and context actions were added to C# and VB.NET code analysis for different cases, including:

  • The Set C#/VB.NET language version quick-fix gets an option to set the language version for all C#/VB.NET projects in a solution. It works for both .NET Framework and .NET Core projects.
  • A new quick-fix, Allow unsafe code in this project, is available.
  • Initialize members to create and fill the object initializer.
  • And more!

To learn more, see Tuples, deconstruction, string interpolation – improved inspections and quick fixes.

TypeScript 3.0 support

TypeScript 3.0 support

ReSharper now supports TypeScript 3.0 and works with such new language features as:

  • Unknown top type.
  • Optional elements in tuple types.
  • Rest elements in tuple types.
  • Rest parameters with tuple types.
  • Spread expressions with tuple types.
  • Generic rest parameters.
Initial localization support in ASP.NET Core

Initial localization support in ASP.NET Core

ReSharper supports the new localization procedure introduced in the latest ASP.NET Core to help you localize your top-notch web applications in a modern way. You can make use of ReSharper’s assistance in Controller, View, and resource files. Right now, it includes:

  • Go to declaration on the resource usage.
  • Find Usages on the resource node in a resx file.
  • An inspection on a resource usage if the resource declaration is missing in resx files for different cultures, with a corresponding quick-fix.
  • Most refactorings related to resources: Move, Rename, Inline, and Safe Delete.
  • Several context actions inside a resx file to modify the resource entity.
More updates

More ReSharper updates

  • Now you can use the Go To Action popup to find Options pages.
  • The Introduce parameter refactoring is now available for local functions.
  • To make ReSharper more FIPS-compliant, we stopped using the md5 hash algorithm and eliminated all its previous uses in the codebase.
  • You can select which font style ReSharper Editor Adornments should inherit: Visual Studio IntelliSense or Text Editor.
Even more updates

Even more ReSharper updates

  • Show Inspection Help is now available for inspections in the Inspection Results and Error in Solution windows if the inspection has a corresponding help article.
  • What used to be a single "Method, Property, Event" naming style is now three separate ones: "Method", "Property", and "Event".
  • The Code formatter in C#, JS, HTML, and XML files now takes into account the indent from the previous nodes.
  • A new separate code formatter option was added, for the continuous indent inside initializers braces.

Performance optimizations

Performance was been optimized in several areas:

  • Loading assemblies stage was refactored to speed up solution loading.
  • Keyword completion has become faster and more precise, resulting in less auto-popup latency overall.
  • Thanks to quick sorting of items, code completion gets faster.
  • Value Tracking now gathers results asynchronously.

Command Line Tools

A couple of new keys were added to Command Line Tools:

  • Verbosity only saves issues of certain severity levels to the output.
  • Jobs runs code analysis in multi-thread mode.
C++/CLI

Improved C++/CLI and UE4 support Ultimate

Two types of project will especially benefit from this release. The first type is C++/CLI (requires ReSharper Ultimate), which gets new Generate actions to generate equality operators, hash function, getter and setter, constructors, and an ability to create a derived class, struct, or interface.

The second is Unreal Engine. To start with, the initial project opening happens much quicker now because ReSharper C++ only parses non-engine files during the initial indexing, while the engine files are indexed in the background later. Another addition is that the reflection macros like UCLASS, USTRUCT, and UENUM are all handled much better in the editor, even if a project has never been built before.

responsive_editor

Responsive editor Ultimate

ReSharper C++ 2018.3 offers several notable performance improvements. First, Find code issues and InspectCode command line tool are now parallelized, which makes them significantly faster. Second, Cache loading on project reopening is now parallel as well, which makes it twice as fast on average. Finally, there are general performance improvements in code completion, initial project indexing, and file analysis.

Download
Free 30-day trial

ReSharper 2018.2

Performance Improvements

Performance improvements

Every release, we make a lot of performance improvements and bug-fixes to limit ReSharper’s impact on Visual Studio, increase responsiveness, and eliminate UI freezes. Back in ReSharper 2018.1, we started publishing blog posts about the current situation in terms of performance: where we are now, why we have what we have, what fixes we’ve made in the latest release cycle, and our plans to make things better.

For the 2018.2 release, we’ve made about 30 performance fixes across different parts of ReSharper, from speeding up EditorConfig support to decreasing solution loading times. More detailed information can be found in the new blog post series dedicated to the ReSharper 2018.2 release.

Integrated spell checking with ReSpeller

Integrated spell checking with ReSpeller

This release comes with the ReSpeller extension to provide spell-checking functionality out of the box. Just like with code analysis, ReSpeller scans for spelling mistakes and typos in identifiers, comments, string literals, and more, and provides quick-fixes to resolve each detected problem. By default, ReSpeller is enabled for many of the languages ReSharper supports. A simple way to enable/disable individual inspections and change severity is by searching for “typo” in the settings (you’ll end up in Code Inspection | Inspection Severity).

We can then invoke the AltEnter menu where ReSpeller gives us several options to fix our mistake. In the menu, we can either fix the typo or add a new word to ReSpeller’s dictionary.

By default, the spell checker comes with a built-in dictionary for English (United States). It uses a dictionary based on Hunspell, which means you can install additional languages if you like.

To learn more, see Integrated spell checking with ReSpeller in ReSharper and Rider.

C# 7.3 support

C# 7.3 support

ReSharper now supports all features from the latest C# 7.3:

  • Declaration expressions in initializers and queries.
  • Tuple equality.
  • Ref assignments.
  • Unmanaged, System.Delegate, and System.Enum constraints.
  • Stackalloc array initializers.
  • Pattern-based fixed statement.
  • Indexing movable fixed buffers.

Besides supporting the syntax, we’ve added new inspections and appropriate quick-fixes to make your code compatible with C# 7.3.

To learn more, see C# 7.3 in Rider and ReSharper

Initial Blazor support

Initial Blazor support

The experimental project Blazor is a single-page web app framework built on .NET that runs in the browser with WebAssembly. Even though Blazor is declared experimental for now, we’ve added initial support for this promising framework in ReSharper. For instance, code completion includes all the possible directives like page (routing), inject (service injection), and function (component members).

To learn more, see Initial Blazor support in ReSharper and Rider 2018.2.

Navigation improvements

Navigation improvements

Several small but handy new features are added in Navigation.

ReSharper introduces a long-awaited feature for Search & Navigation options: you can now specify ignored files by using a mask in Environment | Search & Navigation. You can exclude files from all search and navigation features, based on a file extension or by folder.

The StackTrace Explorer parsing engine has been added to Search Everywhere. With ReSharper 2018.2, we can now copy a function signature from dotTrace’s / Visual Studio’s Call Stack window and navigate directly to the correct method overload in the codebase, by using Search Everywhere.

Last but not least, some ReSharper features like File Structure, Containing Declaration, Next/Previous Members, and others now take local functions into account.

Colored Parameter Info popup and Summary tooltip for IntelliSense

Colored Parameter Info popup and Summary tooltip for IntelliSense

This release updates the way ReSharper presents parameter information in lookup item popups. For example, when using code completion in C# or VB.NET, ReSharper displays parameter types and method return types in a different color, making it easier to visually identify method overloads.

The formatter engine update

The formatter engine update

The formatter engine has several new features:

  • Comments in a code file to override formatter settings can be generated directly from the Configure Format dialog.
  • The File Formatting Info tool window explicitly shows the settings affected by StyleCop rules.
  • The Options dialog can now show a StyleCop rule name if StyleCop rules override a code style/formatting setting.
JSLint, ESLint, and TSLint

JSLint, ESLint, and TSLint

ReSharper extends the built-in code analysis rules with support for three static analysis tools: JSLint, ESLint, and TSLint. All of these linters help ensure that JavaScript and TypeScript code is readable and maintainable. They also allow adding custom rules, which can be included in ReSharper code analysis.

In case a Node.js interpreter is already configured on your machine, you can enable linters in ReSharper settings under Tools | Web Linters.

Refactorings UI update

Refactorings UI update

In this release, several ReSharper refactorings have been moved to the new presentation framework. Most of the improvements happen under the hood and are not visible in the UI. This move helps us unify the behavior of controls across ReSharper and Rider.

The key visible UI changes include:

  • Change Signature dialog has a code completion popup for parameter type.
  • Extract Method has a disambiguate popup which specifies whether a method or a local function should be created as a result.
More ReSharper updates

More ReSharper updates

Other ReSharper 2018.2 updates include:

  • Fix in scope quick-fixes receive more granular fixing scopes: Fix in method and Fix in class.
  • The code style for Built-in Type was improved: it gets independent settings for member access expressions and "fields, parameters, variable" declarations.
  • There’s a new option to execute BeforeBuild and AfterBuild targets for skipped projects in ReSharper Build.
  • A new inspection to highlight misplaced text in XAML.
  • In XML/XAML support, when you press Enter before a closing tag on a separate line, typing assist now inserts a blank line before the closing tag and leaves the caret on the blank line (instead of moving it to the closing tag).
C++/CLI

Initial C++/CLI support Ultimate

C++/CLI is a set of C++ language extensions by Microsoft for easy interoperability between managed and native code. With extensive support for both managed languages and C++, it is only natural for ReSharper to offer help with writing code in C++/CLI too.

However, with so many syntactic additions and peculiar changes to the C++ language semantics handling C++/CLI is no easy task. But now the wait is over — ReSharper C++ 2018.2 makes C++/CLI support public, with many major features (including code inspections, typing assistance, formatting, and code completion) updated to support this language dialect.

C++20 features

C++17 and C++20 features Ultimate

ReSharper С++ 2018.2 deepens its understanding of the modern C++ language. Thanks to the added support for class template argument deduction, user-defined deduction guides, fold expressions, auto non-type template parameters, and more, most of the major C++17 features are now supported by ReSharper C++.

As the C++20 standard is already shaping up, ReSharper C++ 2018.2 learns to understand a number of C++20 features already available in major compilers, specifically coroutines, designated initialization, feature test macros, and others.

Download
Free 30-day trial

ReSharper 2018.1

Full understanding of C# 7.2

Full understanding of C# 7.2

In this release, we can definitely say that ReSharper understands the ins and outs of C# 7.2. ReSharper gets the following missing pieces to complete the puzzle:

  • non-trailing named arguments;
  • private protected access modifier;
  • leading underscores in numeric literals;
  • in parameter;
  • ref readonly returns and locals;
  • readonly struct type;
  • ref struct type;
  • conditional ref operator.

See also:

Navigation improvements

Navigation improvements

Go to File Member has a new grouping for better presentation of more than one class in a single file, and members are now sorted as they are declared in the file.

When searching in Recent Files, file search results are now included and displayed right after matching recent items. This is useful if you are looking for a file that didn't make it to the list of recent files.

Search Everywhere has a new unit test filter to focus on code entities from unit test projects if that's what you're looking for.

Last but not least, when you invoke Find Usages on a class, you can now choose to restrict search results to default constructor usages if no constructors are defined in the class.

To learn more, see Navigation improvements in ReSharper 2018.1.

Formatter-related inspections

Formatter-related inspections

Every now and then, you want to be notified directly in the code when you are not following formatting rules. With this in mind, ReSharper's code formatting engine introduces inspections and quick-fixes for formatter-related problems: indenting, line breaks, spaces, and blank lines can now be observed and fixed directly in the code editor.

By default, they are disabled so as not to bother anyone who doesn't care about formatting during typing. Go to ReSharper | Options | Code Inspection | Inspection Severity to see all available formatter inspections and select severity levels for those of them that you want to be notified of.

To learn more, see Maintaining consistent code style with formatting inspections.

Enhanced C# 7 support

Enhanced C# 7 support

Apart from supporting the latest available C# language version, ReSharper continuously improves its support for previous C# versions. In this release, we have added new code styles, code inspections, quick-fixes and context actions to choose between deconstructing declarations vs. var, as well as work with explicit and implicit discards.

In addition, more ReSharper features now support deconstruction: there's a new option to deconstruct a value in the Introduce Variable refactoring and the .var postfix template, a deconstruct iterator variable option in the .foreach postfix template, and two new context actions, Merge deconstructed declaration and Deconstruct variable.

See more:

More ways to specify code styles/inspection severities

More ways to configure code styles and inspection severity

In this release, ReSharper starts reading code style settings (ReSharper | Code Editing | C# | Code Style) from .editorconfig files and extends support for Roslyn language conventions.

.editorconfig can now also be used to set inspection severities for any scope: for a whole solution, a project, or even a specific file. At the same time, inspection severity settings can still be read from a project’s .dotSettings file. It means that projects can have different customized sets of enabled/disabled inspections with different severities.

If you want to enable this mixed-source inspection settings mode, go to ReSharper | Code Inspection | Settings | General and select Read settings from editorconfig and project settings.

See also:

StyleCop support

StyleCop support

In the same way that ReSharper handles Roslyn coding conventions, it will also read StyleCop rules directly from StyleCop configuration files. To enable this functionality, select Enable StyleCop support under ReSharper | Code Editing | General Formatter Style.

When using EditorConfig files and StyleCop configuration files simultaneously, the EditorConfig files will always take precedence over the StyleCop configuration files, which in turn take precedence over ReSharper's own settings.

To learn more, see StyleCop code style settings and inspections.

C# 7 features comes to value tracking

C# 7 features come to value tracking

Value Tracking levels-up to support for some of C# 7 main features. Even if you are using ref-returning methods, pattern matching or out variables, Value Origin/Destination is now ready to help you track the value of a particular variable.

To learn more, see Value tracking updates in ReSharper 2018.1.

More love to comments

More love to comments

ReSharper brings in a couple of new features to deal with comments in your code.

Comment position used by the Comment code action now depends on the setting Don't indent comments started at first column under ReSharper | Code Editing | C# | Formatting Style | Tabs, Indents, Alignment.

Previously, pressing Enter inside a line comment left the code in an uncompilable state. From now on, pressing the Enter key there splits a single comment into two comments. This enables you to split a comment into any number of comments quickly.

More ReSharper updates

More ReSharper updates

Other updates to ReSharper include the following:

  • Pre-/Post-build tasks support in the ReSharper Build engine.
  • New settings for parentheses in method calls/declarations, line breaks, and wrapping LINQ expressions.
  • A new inspection for possibly unintended linear search in ISet.
  • The option Remember last search in navigation features is now enabled by default. State of the option Include library types is also saved.
Continuous testing in any session

Continuous testing in any session Ultimate

No more separate continuous testing session! Continuous testing mode can now be turned on for any unit test session. In dotCover 2017.3 and earlier, your continuous testing scope was limited by a single continuous testing session. Now, you can have as many scopes for continuous testing as you need.

After building or saving your solution, previous versions of dotCover always auto-started tests in coverage mode. In 2018.1, coverage is no longer necessary: you can tell dotCover to simply run new and outdated tests without covering them. This could be a great time saver if you already have an up-to-date coverage snapshot.

Learn more about dotCover 2018.1.

Unit Test Coverage window

Unit Test Coverage window Ultimate

Coverage information is now shown in a separate Unit Test Coverage window instead of a per-session Coverage tab. This helps you see aggregated coverage data for all unit test sessions in one place.

Learn more about dotCover 2018.1.

Debug step filters

Debug step filters Ultimate

Step filters is the latest addition to the host of features provided by ReSharper C++ for debugging. When you invoke Step Into, the Visual Studio debugger will normally step into all the functions that are called from the current statement. However, some of the functions are either trivial or so well tested, that you don’t want to step into them. This is where step filters come in: you can specify functions that should always be stepped over by the debugger.

ReSharper C++ comes with a predefined collection of step filters for the standard library, but you can always add new ones.

Learn more about ReSharper C++ 2018.1.

Includes analyzer

Includes analyzer Ultimate

Compilation time is one of the biggest problems in large real-world C++ projects. ReSharper C++ 2018.1 introduces the includes analyzer, a new code inspection tool which helps you gauge which header files in your project contribute the most in terms of lines of code to the total compilation workload. To use it, invoke one of the ReSharper | Inspect | Analyze Includes in … actions or select Analyze Includes from the context menu in the Solution Explorer. ReSharper C++ will analyze the files in the given scope and give a report in a dedicated tool window.

Learn more about ReSharper C++ 2018.1.

Download
Free 30-day trial

ReSharper 2017.3

Debugger features in ReSharper

Debugger features

ReSharper brings one of Rider's debugging features to Visual Studio: local variables, current line expressions, and function return values are now displayed in the editor. This provides immediate feedback during debugging sessions without leaving the code editor.

ReSharper also comes with its own debugger DataTips that enable you to search for any value. Just start typing, and get search results right there and then.

See also:

Performance Guide

Performance Guide

ReSharper's Performance Guide collects Visual Studio and ReSharper settings that could negatively affect performance, and helps you adjust them in a centralized manner to improve the overall IDE responsiveness.

Performance Guide can be found in ReSharper's options, under Environment | Performance Guide.

The feature is inspired by an extensive ReSharper web help article which collects and prioritizes known performance improvement recipes.

See also:

Huge code formatting engine update

Huge code formatting engine update

The code formatting engine has been extended with a lot of new settings for more flexible formatting and to cover more use cases:

  • Option to keep extra space inside (to respect user alignment around existing =)
  • Options to outdent binary operators, dots and commas
  • Option "Nested ternary expression style"
  • Option to insert blank lines before/after statements, depending on their contents
  • Improve alignment of nested binary expressions and chained method calls
  • Line Breaks and Wrapping options to place attributes on same line/previous line, specify arrangement of attributes, …
  • Options to specify single-line/multi-line formatting for expression-bodied members
  • Options for embedded blocks of code
  • HTML formatter has new options for linebreaks before multiline elements or even before all elements.
Aligning code in columns

Aligning code in columns

We have implemented a set of popular feature requests around aligning code. There were requests to align equal operands, to implement outdenting and make code using the ternary operator look nicer, and several other requests to help make code more readable.

Some developers like to have properties in a class aligned in columns, e.g. the { get; set; } starting in the same column. Others like to align assignments in columns. ReSharper 2017.3 now supports all of those flavors!

To learn more, see Aligning code in columns with ReSharper and Rider.

Enable/disable formatter on selected blocks

Enable/disable formatter on selected blocks

In this release, ReSharper prevents code formatting from running on a block of code surrounded by specific comments. There were many users who wanted to use different formatting styles for different blocks of code, or disable formatting altogether. You can now prevent unwanted changes to your unique hand-made formatting!

Also, there is now a way to override specific settings for a block of code, instead of disabling the whole formatter, by surrounding the block with a comment.

To learn more, see Different code styles for different code blocks in ReSharper and Rider.

Improved Extract Method refactoring

A revised Extract Method refactoring levels up its support for C# 6 and C# 7. Specifically, support for local functions has been added, there's now an option to return value tuples instead of out parameters, and the refactoring now works in expression-bodied members.

To learn more, see ReSharper's Extract Method refactoring with better C# 6 and C# 7 support.

Create and navigate to breakpoints/tracepoints easily

Create and navigate to breakpoints/tracepoints efficiently

ReSharper 2017.3 introduces creating breakpoints or tracepoints right from search results in the Find Results window. You can quickly generate breakpoints for all the occurrences of a code entity you would like to debug.

Also, the new release adds a new Breakpoints menu which shows you all the available breakpoints/tracepoints in the solution. The menu supports searching/deleting any of them directly or opening the list in a separate tool window.

The new R# Breakpoints tool window supports a lot of actions with breakpoints/tracepoints:

  • Grouping in different ways (file/folder/project/type/member).
  • Removing/disabling/enabling a single item or a group of items.
  • Searching for them.

Find Usages/Call Tracking update

Find Results tool window brings more love to multi-line occurrences: the presentation has been changed to show context as a single line in the result tree. Now it is easy to see multiline formatted occurrences in the list of search results.

The updated Call Tracking tool window helps keep focus by allowing to remove calls that you have already reviewed.

Linking to external resources in to-do items

Linking to external resources in to-do items

To-do patterns get a URL field: it creates a link in your code to navigate to external resources by CtrlClick on a to-do item or via AltEnter. It helps you keep your to-do comments brief and straightforward: no full URLs, only an issue ID.

Links in to-do items support the Peek Preview feature to display the linked issue inline in the editor. Also, you can easily locate the to-do item in the To-do Explorer via AltEnter menu.

Finally, a new filter in the To-do Explorer allows you to select multiple patterns.

New C# typing assists

New C# typing assists

We have added more typing assists in C# to help you:

  • Automatically generate */ for a new multiline comment by hitting Enter and inserting * for a new line.
  • Indent a method in chained method calls after typing a dot.
  • Surround a code selection by typing a brace or a parenthesis.

In a related change, smart indent on Enter is now calculated by ReSharper, respecting your indenting and alignment preferences defined in ReSharper options.

Tuples in VB.NET

Tuples in VB.NET

ReSharper now understands the tuple syntax introduced in VB.NET 15: no more bogus red code when you use them, and IntelliSense does not interfere with your typing.

Enhanced Preview panel in tool windows

Enhanced Preview pane in tool windows

This release has integrated a refreshed Preview pane into most ReSharper windows such as Find Results and Options.

In Find Results, the code in the Preview pane looks more natural: keywords and strings are highlighted, identifier colors are applied, font settings and scaling are inherited from Visual Studio's text editor settings.

On formatter pages in ReSharper Options, the pane always displays whitespaces and tabs to show you everything you need to know about the selected formatting style.

More ReSharper updates

More ReSharper updates

Other updates to ReSharper include the following:

  • AltEnter menu does not wait for the file analysis to finish, it appears immediately.
  • For TypeScript, we've improved the performance of type guards support, changes in npm modules are now tracked, and auto-completion is available for imported paths.
  • Peek Definition is supported in Visual Studio 2015 and 2017.
  • New code generation action is available to create deconstructors from selected fields/properties when you use C# 7.0.
  • <inheritdoc/> support comes to VB.NET.
Support for async calls

Profiling async code Ultimate

The downside of asynchronous code is it's extremely difficult to profile it and analyze its performance.

dotTrace 2017.3 dramatically simplifies the analysis of asynchronous code. It marks all async call nodes in the Call Tree and groups the corresponding await time and continuation code under that node. This means that you can quickly find all "parts" of an asynchronous call in one place instead of searching in different call stacks.

Learn more about dotTrace 2017.3.

Clang-Tidy integration and more ReSharper C++ updates

ReSharper C++ updates Ultimate

ReSharper C++ 2017.3 brings the same debugger features as the mainline ReSharper, improves its language understanding including the C++17 and C++14 specification, integrates Clang-tidy, adds more code inspections, context actions, and formatting options, and supports Catch2 in its unit test runner.

Learn more about ReSharper C++ 2017.3.

Download
Free 30-day trial

ReSharper 2017.2

ReSharper and Razor Pages

.NET Core 2.0

Following a preview period, .NET Core 2.0 went live with the release of Visual Studio 2017 15.3.

With ReSharper 2017.2, you can safely use your favorite code inspections, navigation actions and refactorings with .NET Core 2.0 projects. If you're a web developer, expect ReSharper to work in ASP.NET Core Razor Pages projects as well as in MVC-based web applications.

If you've had issues unit testing your .NET Core applications with prior ReSharper releases, note that the unit test runner now supports NUnit in .NET Core projects (both 1.1 and 2.0), and ensures that you can run both MSTest and xUnit.net in .NET Core 2.0 projects.

Last but not least, ReSharper's Solution Builder now supports .NET Core projects, helping you reduce the time you spend recompiling your applications.

Transform multiple if-statements into single switch statement with patterns

Improved C# 7.0 support

ReSharper's support for C# 7.0 gets better with every release. In this release cycle, we have polished the way ReSharper handles pattern matching:

  • The switch postfix template is now available on variables of non-sealed reference types.
  • A new context action, Generate type patterns, helps easily generate switch cases for selected types.
  • The Convert to switch quick-fix has been completely reworked to transform multiple if statements into a single switch statement with patterns.

ReSharper can now suggest using var (or, depending on your code style, the use of explicit types) in out variables. In addition, it adds inspections and quick-fixes to introduce out variables instead of variables that are only used for method calls with out parameters.

Default literal

Understanding C# 7.1

Visual Studio 2017 15.3 introduced C# 7.1, and ReSharper is quick to catch up with its language features. For example, C# 7.1 adds the default literal that can be used instead of the default(T) expression, inferring target type based on usage context. ReSharper recognizes the default literal syntax, provides an inspection when default(T) is used, and suggests a quick-fix to remove redundant type specification.

ReSharper also supports tuple projection initializers with an inspection that reveals redundant tuple value component names when they can be inferred from initializer.

Finally, ReSharper understands async main and pattern matching with generics.

Adding the explicit .AsEnumerable() to the call

New IEnumerable inspections

ReSharper's set of IEnumerable inspections was extended to accommodate new scenarios:

  • The Possible multiple enumeration code inspection can now consider types derived from IOrderedEnumerable and ParallelQuery.
  • A new code inspection detects possibly unintended transformation from IQueryable to IEnumerable.
Checking redundant value tuple component name

More code inspections and context actions

In C# 7.1, a value tuple's element names are inferred, and ReSharper will help you spot redundant value tuple component names.

The Introduce auto-property from parameter quick-fix already allowed us to introduce a get-only auto-property with extensive set of options like adding a private setter or making it a public mutable property. Now, the Initialize auto-property from parameter context action is aligned with the quick-fix, providing the same extensive set of options.

Null checking preferences

There are many ways of checking for null values, so what if you don't like the way ReSharper introduces null checks when it generates code?

In ReSharper 2017.2, we have added a new options page, Null checking, where the priority of null checking patterns used by quick-fixes, context actions and code generation actions can be configured. You can even create your own custom checks! If you're using the Check parameter for null context action, check out its new submenu item, Configure null-check pattern, which helps you access this new page without digging through ReSharper's Options dialog.

Match elements containing words in the target query in any order

Navigation and search improvements

Go to Everything and other navigation actions are now able to match elements containing words in the target query in any order: for example, a search for exactMatching will match isMatchingExactly.

On the other hand, there's now exact search that works how you would expect from a search engine: looking up "Collection" will return Collection but will not return FilteredCollection, IterateCollection() etc. However, while using exact search to filter out compound names, you can still use wildcard symbols * and ? to allow exactly as much variation as you need.

On a different note, Go to text is now integrated in Go to Everything (CtrlT): if there's no code that corresponds to your search term, ReSharper will start looking for text instead.

In addition, you can now search for extension methods using the dot separator: Class.ExtensionMethod.

Finally, ReSharper 2017.2 brings a new shortcut to explore search results in the Find Results window. Press ShiftEnter instead of + on the numeric keypad.

Navigate to file nearby

Navigate to file nearby

Contextual navigation in ReSharper 2017.2 received a boost as well: using the Navigate To menu, you can now look at and navigate to files that are adjacent to the current file in the structure of your project: browse folders and files in the same directory level as the current file, easily jump to these files or create new ones.

Generate cref attribute in the inheritdoc tag

<inheritdoc/> support improvements

New inspections were introduced to support the usage of <inheritdoc/> in XML documentation.

ReSharper detects when there are multiple candidates for inherited documentation, shows a warning and suggests a quick-fix to insert a cref reference. In the generated cref attribute, ReSharper will conveniently show the completion list with all possible types to reference.

In addition, a warning is now shown when a derived class overrides documentation of its base class.

Сonvert an expression bodied member into a block body

New C# typing assists

  • ReSharper allows you to quickly mark arguments with NotNull and CanBeNull attributes without actually typing the whole attribute name. Typing ! or ? after a type name, name in parameter or member declaration inserts a NotNull or CanBeNull annotation, respectively. If a name is already marked with NotNull, typing ! automatically adds a null check at the beginning of the method's body.
  • Typing { after => quickly transforms an expression into a block of code in curly braces.
  • Pressing Enter ahead of a closing brace will leave the caret on the same line but shift it to the right by one indent.
Inline type alias refactoring in TypeScript

TypeScript, JavaScript, JSON support improvements

  • Full support for TypeScript 2.3, including async iterators, optional generics, overload resolution for stateless JSX components, contextual this for object literals, and the --strict option.
  • TypeScript 2.4: support for enums with string values and mixed string/number values, improved support of generic inference from contextual type returns and generic contextual signatures.
  • Improved Find Usages and Rename for mapped type members in TypeScript.
  • New Introduce type alias and Inline type alias refactorings in TypeScript.
  • Improved performance of code completion in pure JavaScript.
  • Improved JSON support, including Quick Documentation in JSON and support for scoped packages in package.json: code completion, tooltips and Quick Documentation are now available in these packages.
  • Language injections in literals: injected XML, injected path references in C# and JavaScript/TypeScript.
Support for Angular 2 components in HTML

Angular support

ReSharper 2017.2 supports Angular input/output aliases and attribute directives. Angular 2 components added via NPM are now supported as well.

ReSharper provides code completion, shows Quick Documentation and helps navigate to component declarations. Note that Support Angular markup in HTML pages must be configured in the ReSharper options under HTML | JavaScript and Frameworks for this to work.

In Angular 4, ReSharper 2017.2 adds support for ; else in *ngIf, as well as for variable assignments (e.g. people as person) in both *ngIf and *ngFor.

ReSharper interactive tutorials

ReSharper interactive tutorials

There's always a chance that some new cool ReSharper feature coming in the latest release may slip through the cracks and fail to make it into your coding routine.

ReSharper 2017.2 helps you learn as much as possible about its updates by integrating the ReSharper Tutorials plugin. For an easy way to try a feature instead of only reading about it, go to ReSharper | Help | Tutorials... and choose one of the available tutorials.

Make properties mutable

More ReSharper updates

Other updates to ReSharper include the following:

  • Asynchronous refresh in the Find Results tool window.
  • A new option to make properties mutable when implementing interfaces with get-only properties.
  • Improved code completion response time.
  • Smart indent on Enter to improve code formatting. This feature is disabled by default but can be configured under ReSharper | Options | Environment | Editor | Editor Behavior | Typing assist.
  • Enable Debugging action in the context menu of Visual Studio's Modules tool window and ReSharper's Process Explorer tool window (this action replaces Generate PDB).
  • You can now set breakpoints in decompiled code.
Expression result unused inspection

ReSharper C++ updates Ultimate

ReSharper C++ 2017.2 is mostly focused on better language understanding and supporting features from C++11 and C++17. Other changes include enhancements in code formatter and navigation, improved performance, new code inspections and quick-fixes.

Learn more about ReSharper C++ 2017.2.

Importing memory dumps

Analyzing memory dumps Ultimate

dotMemory 2017.2 lets you import raw Windows memory dumps (typically, you get them using Task Manager or Process Explorer) and analyze them using the entire range of dotMemory's functionality.

Learn more about dotMemory 2017.2.

Download
Free 30-day trial

ReSharper 2017.1

Switching switching a file's target framework context

Visual Studio 2017 RTM support

Full support for Visual Studio 2017 new features is finally here. You can now work with solutions loaded in a lightweight mode. When you use the Open Folder option, ReSharper sees all files in the folder and supports .xml and .js file types. Move to Folder refactoring works in this mode.

ReSharper respects the current target framework context. This is set by the drop-down at the top of the editor window, and can change settings such as the assemblies being referenced, as well as symbols defined in the build and pre-processor.

Convert to local function

C# 7 support

ReSharper receives a lot of new inspections to comply with the C# 7 compiler. For example, it can detect typos in tuple variable names when overriding a method or implementing an interface.

ReSharper supports local functions with a new quick-fix to Convert a read-only delegate variable into a local function, as well as two new context actions:

  • Convert lambda expression or anonymous method into a local function
  • Convert local function into a regular method

The Join null check with assignment quick-fix makes the code more readable by combining the assignment, the null-coalescing operator, and throw. The existing context action Convert to '?:' operator and the .throw postfix template also support C# 7 throw expressions.

Run unit tests in all target frameworks

Unit testing

ReSharper’s unit testing works in both project.json- and .csproj-based projects in Visual Studio 2017 RTM. It discovers and runs MSTest and xUnit tests and supports code coverage and profiling as well as targeting multiple frameworks. NUnit tests that target .NET 4x frameworks are supported. There’s also DataRow support for MSTest v2.

Note that ReSharper currently doesn't support continuous testing for .NET Core unit tests. This will be fixed in the next updates.

File Formatting Info

EditorConfig support

EditorConfig support is enabled by default. ReSharper understands standard EditorConfig properties, most of Roslyn EditorConfig properties, and provides a rich set of custom EditorConfig properties for much more granular configuration of formatting rules. This means that you can maintain the entire configuration of formatting rules in EditorConfig files.

The File Formatting Info window displays the scopes and properties defined in all active .editorconfig files. This window also shows the source of indentation settings and its value, and the status of indent autodetection.

Tabs and indents settings

Indent autodetection and code style improvements

ReSharper’s layered settings feature is a great tool to maintain a consistent code style if most of your team members use ReSharper. Now it is extended with Tabs and Indents settings for all supported languages.

When you reformat a part of code in a file, or when code is auto-formatted on editing or pasting, ReSharper can calculate and apply indentation based on the existing indents in that file. This feature comes in handy when you want to contribute to existing projects where indentation differs from your settings.

Contextual configuration of formatting rules is available in С#, C++, JavaScript and TypeScript. Press AltEnter over the selected block of code that you need to reformat, and then choose Format Selection | Configure in the actions list to see all formatting rules that affect the code.

Code cleanup dialog box

Code cleanup, new code style and formatting options

ReSharper’s Code Cleanup gets usability improvements. Now you can create and configure your custom task-specific profiles right in the Code Cleanup dialog box, simply by pressing CtrlE,C.

ReSharper applies its formatting rules to any code you paste. The Reindent option that affects only the indentation is set by default and you can change it on the Editor Behavior options page.

ReSharper introduces new code style settings for C# type members bodies, allowing you to choose between always using a body block, with braces, or using the expression format.

Finally, we've improved C# code formatting engine and introduced new formatting options:

  • The new wrapping engine now handles the alignment correctly
  • Comma-first wrapping style is supported
  • Set spaces before and inside the parentheses of 'nameof'
  • Choose preferred wrapping style for chained binary expressions
  • Configurable line breaks in a single 'case' statement
Grouping by type of usage and new filter options

Navigation and search

The Find Results window gets a new option to group search results by kind of usage, new filters to select occurrences of a specific usage, and using quotes to search for exact matches.

ReSharper's Search & Navigation page adds a new option to open files in the preview tab from everywhere. This option is turned off by default.

The Go to Everything and Go to Text popups support inline commands for advanced filtering of search results.

Rename refactoring in Angular

Angular 2 templates syntax

ReSharper understands the following elements of Angular 2 templates syntax: template expressions, template statements, NgFor directive and template variables. Support is implemented for the template: property in Angular @Component decorator as well as for pure HTML referenced by templateUrl: property in @Component. Only relative paths are supported in templateUrl. For HTML pages, Angular markup is switched off by default and can be enabled in ReSharper Options (Code Editing | HTML | Editor).

Code completion works for Angular attributes and component tags, as well as for [attr., [style. and [class.. Component attributes receive support for the Go to Declaration (F12) command. The Rename refactoring works for component tags and for 'foo' in [class.foo].

Note that Angular 1 is not yet supported. You can use the AngularJS plugin for code completion and live templates, if Support Angular markup in HTML pages is set to 'None' in ReSharper options.

Finde usages of the object rest property

TypeScript and JavaScript support

  • Full support for TypeScript 2.1: mapped and indexed types, object rest and spread properties, updated logic for literal types, configuration inheritance, untyped imports, combined types normalization, partially annotated signatures, and control flow analysis for implicit any and implicit any arrays
  • Initial support for TypeScript 2.2: 'object' type, JSX spread syntax and deriving (extends/implements) from signatures/tuples/intersections/mapped types
  • Inspection and quick-fixes for unused imports in TypeScript ES6-style imports
  • Postfix Templates in JavaScript and TypeScript
  • Improved relevance of code completion items in TypeScript and JavaScript
  • The Generate Code menu gets a new option to generate properties or read-only properties for TypeScript classes. The Generate Overriding Members command now calls 'super' whenever possible
  • Navigate to Implementing Members in TypeScript
  • Navigate to Function Exits in TypeScript and JavaScript
  • The Rename refactoring in TypeScript works faster for local symbols and gets a new option to disable dynamic search for TypeScript
Context menu on status indicator

Code analysis

ReSharper's File Status Indicator (the small icon at the top of the Error Stripe) receives a new context menu. With a right-click on the icon, you can quickly toggle not only ReSharper code analysis but also identifier highlightings and Visual Studio code analysis (lightbulb and squiggles). If there are code issues in the current file, you'll also see commands for navigating between issues of the highest severity level.

Note that for large files ReSharper suspends code analysis automatically. In this case, you'll see a gray Pause icon in the Status Indicator.

Control flow inspections for class fields

ReSharper C++ updates Ultimate

ReSharper C++ 2017.1 finalizes Visual Studio 2017 RTM support and learns to work with the Open Folder mode and CMake projects. Changes also include improved performance, extended set of postfix templates and code cleanup tasks, and updates to control flow inspections.

Learn more about ReSharper C++ 2017.1.

Command-line profiler

Command-line profiler Ultimate

dotMemory 2017.1 includes the dotMemory.exe tool that allows you to profile from the command line. The tool is extremely helpful when you need to automate the process of gathering memory snapshots, e.g. if you want to make profiling a part of your continuous integration builds.

Attach using drag and drop

Profile running apps with drag and drop Ultimate

You can now attach the profiler to running applications using drag and drop. Simply drop a special icon onto the application window that you want to profile.

Download
Free 30-day trial