ReSharper DevGuide

What is the ReSharper Platform?

The ReSharper Platform is a Open API for building smart IDE features and developer tools. The platform has a deep understanding of your solution. By parsing the files in your projects, ReSharper can build and cache a syntactic and semantic model of your code, which can be used to perform analysis, showing highlights inline in the IDE as you type. The syntax trees can be manipulated in memory to provide safe refactoring, and a powerful cross-language reference system allows for very rich navigation, search and usage analysis.

The ReSharper Platform is not the same as the ReSharper product. The ReSharper Platform provides services such as Visual Studio integration, project model abstractions and the infrastructure to work with abstract syntax trees and semantic models.

The ReSharper product is an extension to the ReSharper Platform, and adds many user facing features on top of the syntactic and semantic models, such as rich navigation, refactoring and unit testing support. Other products such as dotTrace, dotCover and dotPeek are also extensions to the ReSharper Platform, and add more user facing features such as profiling and decompiling.

The ReSharper Platform is a common, shared, binary platform. Previous versions of the JetBrains .net tools shared the platform as source code, and each product would be deployed with its own private, binary copy. The aim of this was to allow standalone installs, where any combination of products could be installed, and independent release schedules, where products did not depend on the release schedule of other products. However, each product having its own copy of the platform caused increased resource usage (as each copy of the platform built and cached the same data) and due to dotCover and dotTrace integrating with ReSharper’s test runner, release schedules were already synchronised.

By making the ReSharper Platform a common, shared, binary platform, these issues are resolved - the ReSharper, dotTrace and dotCover products are installed into the Platform, and share resources. Also, products can extend each other - if a product such as dotTrace wants to integrate with ReSharper’s test runner, it can install a component that will be enabled when the test runner component is installed. If the test runner component isn’t installed, then dotTrace’s test runner extension doesn’t get loaded. Release cycles have always been tied across products - this is now explicitly acknowledged. Furthermore, a single binary platform has benefits in deployment, such as single unified installer, and easier license management (e.g. subscription based licensing).

The ReSharper Platform is designed to be extensible, as are the products that plug into it. The whole API, both of the Platform and the products, is public, and is written with the Open/Closed Principle very much in mind. The products can be extended, such as extending ReSharper with new analyses, warnings and fixes, support for new unit test frameworks or even supporting new languages. Or the Platform itself can be extended, to use the Visual Studio integration, project model abstractions and syntactic and semantic models to provide new products and new end user features.

Visual Studio integration is a major part of the ReSharper Platform - it can essentially be considered the main host of the Platform. As such, the Platform is the single Visual Studio extension for all products installed into it. When the configuration of the Platform changes - adding, removing or updating a product, or adding an extension that provides new functionality - the Platform reconfigures the Visual Studio extension. Of course, the Platform can also be run standalone, hosting products with their own UI, such as dotPeek, or the ReSharper command line tools.

Last modified: 22 June 2015