Introducing C++ Experimental Editor Tools!

Hello C++ World!

At various times during our development cycle here in the C++ IDE, our developers start working on features that we believe can bring a lot of value to customers, but sometimes we just don’t have enough data on our own to figure out whether or not what we came up with works for our users on a broader scale.

Rather than wait until we’ve accounted for every scenario, we’ve decided to make an “Experimental” mechanism in VS2015 Update 1 RC (click here to download!) so that you can easily turn these features on and off when you decide to give them a try. This also alleviates the need to download an extension and restart Visual Studio! You can find this page under Tools –> Options –> Text Editor –> C/C++ –> Experimental (or do Ctrl+Q for Quick Launch and type in “experimental”).

Just to be clear: the features being listed as “experimental” does NOT mean “intentionally low-quality features shoved into the product with no improvement plans.” It simply means we weren’t completely sure if the current quality would sufficiently meet the broad needs of our customers. Think of them as “feature prototypes” as well as great opportunities for you guys try them out, give us feedback, and shape them into quality features that will help your development workflow!

Here’s a brief highlight of each of these experimental features:

  • Enable New Database Engine – This should magically speed up database population, with the added effect of making all database operations faster (with no loss in accuracy) for operations such as Go To Definition and Find All References. (Just close and reopen your solution to apply the changes; no VS restart required!)
  • Member List Dot-To-Arrow – Replaces ‘.’ with ‘->’ when applicable for Member List.

  • Enable Extract Function – (Access via Quick Actions [Ctrl+.]) Extract selected code to its own function and replace code with a call to the new function.
  • Enable Change Signature – (Access via Quick Actions [Ctrl+.]) Add, reorder, and delete parameters of a function and propagate the changes to all call sites.
  • Enable Expand Scopes – Ever try to surround a code segment with braces, only to have the brace autocompleter insert that closing brace when you didn’t need it? Although admittedly a slight workflow change, you can select code and type an opening brace { to surround the selected code with { }.

  • Enable Expand Precedence – Same as the previous, except with parentheses. Select code and type an opening parenthesis ( to surround the selected code with ( ).

That hyperlink at the bottom (“…find other…experimental features”) currently takes you to a search on VS Gallery for our team’s released VS extensions. When Update 1 RTW goes out, it will instead take you to this MSDN page listing all this info, along with specific extensions we think will be good for y’all to try out!

Speaking of “specific extensions good for y’all to try out,” be sure to try out our new C++ Quick Fixes extension (click to download)! This extension currently focuses on addressing fixes for the following scenarios:

  • Add missing #include – Suggests relevant #include’s for unknown symbols in your code
  • Add using namespace/Fully qualify symbol – Similar to the previous item, but for namespaces
  • Add missing semicolon
  • MSDN Help – Search MSDN for help on your error message(s)

You can either hover over a squiggle to get a LightBulb, or use the default keyboard shortcut Ctrl+Dot (Ctrl+.). Note that for the keyboard shortcut, your caret doesn’t need to be positioned on the specific error/token; you can simply be on the same line as the error to invoke suggestions for anything on that line.

If any of these features turns out to be awesome, we’ll remove its “experimental label” and put it into the product for good! Hope you’ll find them useful, and definitely, definitely leave us your feedback!

Best regards,
Gabriel Ha
Visual C++ PM

P.S. I know that this post and the nature of the topic will naturally bring up feature requests for other “experiments” for us to do. While I can’t make any promises, request away.