CLion Nova Explodes onto the C and C++ Development Scene
Update: CLion Nova is now available in CLion Classic
TL;DR
Today, we’re announcing a free early preview of CLion, which uses the ReSharper C++/Rider C++ language engine instead of the CLion “legacy” engine. The Preview build is available via our dedicated Toolbox App feed. At some point in 2024, depending on the results of the feedback collected, CLion Nova will be merged into CLion. Until then, the Preview build will be free to use and can be installed in parallel with your usual CLion (Classic) installation.
Update
- CLion Nova – Final Update
- Now you can switch to CLion Nova in CLion Classic
- The 5th and 6th CLion Nova updates: AI Assistant and 2024.1 Upgrades
- The 4th CLion Nova update with fixes for code folding, highlighting, and CMake presets.
- The 3rd CLion Nova update with ClangFormat fixes, support for C23’s
bool
, builtins, C++20std::source_location
andstd::bit_cast
, and other enhancements. - The 2nd CLion Nova update with fixes for code highlighting, Rename refactoring, and code analysis.
Prehistory
The first C++ engine by JetBrains was designed for AppCode, our IDE for iOS and macOS developers. It was part of the IntelliJ Platform, initially written in Java and later also in Kotlin. The approach and the architecture of the engine serve many languages in IntelliJ-based IDEs well; however, this design turned out not to be the best fit for the C++ language specifically.
To more quickly align with the evolution of C++ and to separate the engine and IDE processes, a clangd-based engine was later added to CLion. Built on our custom branch of clangd, this engine detects any warnings and errors, shows them in the editor, and suggests quick-fixes, as well as performing highlighting, completion, and certain navigation actions. It’s also used for things like data flow analysis and MISRA checks. Meanwhile, CLion’s “legacy” engine is responsible for other code insight features like refactorings. You can see a detailed “list of responsibilities” in our CLion documentation.
Clangd has many advantages, but it isn’t very helpful when it comes to project-wide refactorings and actions. We prototyped a clangd-based indexer and even implemented an experimental Find Usages on top of it, which you can enable and evaluate in CLion.
Another alternative developed by JetBrains for C++ is the language engine used in ReSharper C++ and Rider (for game development in C++). There is also a communication protocol in place that makes it possible for an IntelliJ-based IDE like Rider to communicate with the stand-alone backend process serving as a language engine. We have now adapted this protocol and the original engine to CLion as well!
Goals
In this new and experimental solution, we’re focused on the responsiveness, accuracy, and performance of the IDE. There are two main goals we have in mind:
- Addressing the long-standing performance and quality issues of CLion caused by the usage of the “legacy” engine.
- Unifying the user experience across all of our C++ tools, i.e. CLion, Rider, and ReSharper C++.
We named our new experimental preview CLion Nova, and the current version of CLion is now CLion Classic. In the future, we plan for CLion Nova to be merged into CLion Classic. No new product is envisaged.
Benefits and enhancements
CLion Nova still uses two C++ language engines: a clangd-based one and the one used by ReSharper C++/Rider. Most of the features of CLion Classic should work exactly the same in CLion Nova.
The most notable benefits in terms of performance in CLion Nova are:
- Faster highlighting speeds, especially in the case of incremental code updates
- A more responsive UI
- Faster Find Usages
- Significantly fewer freezes and hangs in refactorings
- Faster test indexing
This unification also brings some new functions to CLion Nova that aren’t included in CLion Classic’s feature set:
- New refactorings like introduce field, introduce namespace alias, introduce using enumeration, and convert to scoped enumeration.
- New inspections, quick-fixes, and intentions like redundant qualifier, the replace
auto
with explicit type declaration, and sorting of#include
directives. - New code hints like preprocessor directive hints and a Push-to-Hint mode.
Notable differences
Unlike CLion Classic, CLion Nova doesn’t use clangd for core IDE features like code completion or highlighting. However, the JetBrains’ clangd fork is still running alongside the new engine for various tasks (ClangFormat, Clang-Tidy, MISRA checks, data flow analysis, etc.).
There are a few things that will look and feel new to CLion Classic users when they start using CLion Nova:
- Some of the ways the IDE reacts when the user is typing are different.
- Some UI elements and settings related to code insight features might look unusual or be found in unfamiliar locations.
- Some code-related settings might have different default values in CLion Nova. On the first launch, CLion Nova will migrate some of your per-project and per-application settings from CLion Classic, but not all of them.
- Switching between different language configurations (i.e. Debug/Release) might require more time for the code insight engine to catch up. There is also no option to switch resolve context per file.
- ReSharper C++ is Windows-only, while Rider is cross-platform. Still, the ReSharper C++/Rider engine might not support non-Windows environments as seamlessly as a Windows one. It’s worth reporting such cases to us if you come across them.
There’s also a list of currently missing functionality:
- Toolchains: Several options exist to set up remote work in CLion. Remote work with local sources is supported in CLion Nova, while remote work with a thin client (Gateway) is not yet available.
- Languages: Objective-C language, CUDA (RSCPP-613, CPP-26144), and some vendor-specific compiler extensions aren’t yet supported.
- Some intentions and quick-fixes like Simplify statement are not supported at present.
- Some less popular refactorings are also missing. We plan to reintroduce the Move (CPP-35867) and Inline Parameter refactorings (CPP-35868) at a later date.
JetBrains’ AI Assistant is not yet available for CLion Nova.(FIXED)
How to install CLion Nova
CLion Nova is a free early preview build available only via the Toolbox App:
CLion Nova is an Early Access Preview build, which means a login is required, but you can use it for free until CLion Nova merges into CLion. We’ll be publishing regular updates to CLion Nova, which will also be available via the Toolbox App.
Compared to CLion Classic, CLion Nova brings a more responsive UI, better overall IDE performance, and increased feature quality, especially with C++ code refactorings. Try it now and let us know what you think!
Share your feedback
CLion Nova marks a big change and requires detailed testing in various environments. So we’re asking you, our users, for help! Given that you have a variety of environments and use cases, we want you to test out CLion Nova and share your experiences with us.
We are specifically interested in your thoughts on:
- What works better on your project in CLion Nova compared to CLion Classic?
- What interrupts your workflow and prevents you from using the IDE in CLion Nova? Are these interruptions CLion Nova-specific, or are they also present in CLion Classic?
After using CLion Nova for some time, you’ll be asked to submit a feedback form. We’d be grateful if you can spare the time to do so!
And, of course, our issue tracker is also open for receiving your feedback – just don’t forget to mention that your issue relates to CLion Nova and not CLion Classic.
Your CLion team
JetBrains
The Drive to Develop