How-To's

ReSharper to Support C++

You already know that we have been working on ReSharper 8 for quite a while, improving navigation, extending the scope of XAML support and introducing a project dependency viewer, among a plethora of other improvements.

We’re setting our sights beyond the immediate 8.0 release though: for several months now, a part of the team has been working on something entirely new yet requested for a couple of years already: support for C++ in Visual Studio.

This is a part of a wider plan to make C++ a first-class citizen of JetBrains tools, along with the intent to come up with a cross-platform C++ IDE announced earlier this year.

C++ is a very powerful and flexible language that has never really went away despite the rise and fame of its inheritors such as C# and Java: there’s a lot of code being written today in C++ and will continue this way for years to come. At JetBrains we feel that many developers using C++ could benefit from some of the tooling that we provide for other languages.

The feature set

C++ is not an easy language to write a parser for, taking into account the preprocessing and resolving necessary, especially when it comes to parsing complex and large code bases. Our biggest goal was and is to perfect this and a lot of effort has gone into it. As such, right now many of the more visible features aren’t there but much of the ground work is done. Right now, internal builds that are being cooked here on the .NET team in JetBrains include:

  • First and foremost, ReSharper-style syntax highlighting.
  • The full stack of context-insensitive navigation including Go to Type, Go to Symbol, Go to File Member and of course the new Go to Everything from ReSharper 8.
  • Context-sensitive navigation including Go to Declaration, Derived Symbols, Base Symbols: all the major features that you’d expect to see when you open ReSharper’s Navigate To menu:
    ReSharper's Navigate To options for C++
  • We also have Find Usages with preview, occurrence filters, different kinds of grouping and everything else that is inherent to ReSharper’s Find Results window.
  • Gutter marks in ReSharper 8’s new action indicator to keep track of inheritance and navigate between hierarchy nodes:
    Gutter marks for C++ inheritance
  • Introduce Variable refactoring:
    ReSharper's Introduce Variable for C++
  • Context actions to substitute macro calls, individual ones as well as nested calls:
    ReSharper's context actions to substitute a single macro call or all nested calls
  • Understanding of templates which enables ReSharper to correctly resolve different template specializations and navigate between them:
    Navigation to C++ template specializations in ReSharper

To give you a better idea of what’s going on, watch the following introductory video:

How can you play with it?

As of now, we don’t have any early builds for you to play with, and the current ReSharper 8 EAP doesn’t include C++ support. We’ll need a few more months to be able to come up with anything public. If you’re impatient, here’s what you can do:

  • Go to C++ support page on the ReSharper web site.
  • Fill in the form specifying C++ language versions, libraries and extensions that you’re using and more relevant information about your C++ development experience. Apologies for making the form a bit lengthy but we’re not collecting this data just for the sake of it.
  • Submit the form to subscribe to private builds of ReSharper with C++ support. As soon as we have a private build that we expect to work in your development environment, we’ll send you an e-mail with a link to that build.

What’s next?

  • First of all, we should emphasize again that C++ support is not going to be a part of ReSharper 8.0 because it’s still very far from production quality.
  • In the coming months, the ReSharper team will be improving C++ support internally in order to eventually come up with a public EAP sometime in the Fall this year. As new language versions and extensions, as well as Visual Studio versions are supported and stability grows, we’ll be sending out private builds to those who have subscribed to receive them.
  • Right now, we’re more or less done with support for С/С++03 with small to medium solutions that don’t use libraries at all or use small libraries. The current development roadmap for the next several months is the following:
    • Support small to medium solutions that use larger libraries including Boost
    • Support С++11
    • Ensure adequate stability with large solutions
    • Support VS-specific extensions and MFC/ATL/WTL
  • As soon as we’re ready to make things public, we’ll open the Early Access Program for C++ support and following the public testing we’ll merge C++ support into the main ReSharper code base so that it becomes a part of ReSharper Full Edition.

Are you excited? Have you been waiting for this for a long time? Subscribe to receive private ReSharper builds with C++ support and by playing with them as they come, help us roll this major part of ReSharper out to the public quicker. In addition, feel free to share your thoughts on the scope of C++ support required for you and specific features you’d like to see right here in comments to this post.

image description