What's New in CLion

CLion 2019.1 has taken a couple of first steps towards Embedded Development. Its C++ refactorings are now more accurate, and code highlighting has moved to Clangd to make the editor more responsive. To help you follow your preferred coding style, CLion now integrates with the well-known ClangFormat tool and adds support for various C/C++ naming schemes. For compilation database projects, it’s now possible to create build-system independent Targets and Run/Debug configurations.

2019.1 (Mar 27)

Embedded Development

STM32CubeMX integration

STM32CubeMX integration

If you develop for STMicroelectronics boards, you’ll be happy to know that CLion now integrates with STM32CubeMX:

  • CLion can create a new .ioc project or open an existing one, and generate a CMake file to correctly work with it.
  • You can start STM32CubeMX any time directly from CLion to update board settings and generate code.
  • CLion reminds you to select a board config and suggests a list of options in the UI.
OpenOCD support

OpenOCD support

Debugging with the Open On-Chip Debugger is now supported by CLion. Use the new Run/Debug configuration template, ‘OpenOCD Download and Run’ to debug on your microcontroller.

If you work with a STM32CubeMX project in CLion, an OpenOCD Run/Debug configuration will be created for you automatically.

Learn more about STM32CubeMX & OpenOCD integration

ClangFormat

The ClangFormat tool is widely used in the C/C++ world and even regarded as a standard by many developers. Its config files can be found in many projects, and especially in open source software. And it’s now supported in CLion! Learn more.

ClangFormat across all IDE actions

ClangFormat across all IDE actions

CLion 2019.1 adds ClangFormat as an alternative code formatter. Turn it on for your current project or all projects in CLion and let CLion use it to format your code as you:

  • Type in the editor or paste code
  • Call the Reformat Code action
  • Reformat as a pre-commit hook
  • Generate boilerplate code
  • Refactor code
  • Apply quick-fixes or intention actions
Working with .clang-format config

Working with .clang-format config

CLion detects .clang-format config files in your project and will suggest switching to ClangFormat. If there are multiple config files, you can identify which one is used in a particular file opened in the editor by selecting “View ClangFormat options for <file name>” from the toolbar switcher.

Don’t have a config file? No problem – CLion will simply default to LLVM style.

Naming conventions

Setting naming in CLion

Setting naming in CLion

CLion now respects the naming scheme you provide. The selected settings will be used when:

  • Autocompleting code
  • Generating code
  • Refactoring code
  • Applying quick-fixes

You can configure the style manually in Settings | Editor | Code Style | C/C++ | Naming Convention or select naming from the predefined scheme.

Inconsistent naming inspection

Inconsistent naming inspection

CLion can help enforce the selected naming convention in the editor. Simply turn on the Inconsistent Naming inspection, and CLion will highlight problematic names and suggest a quick-fix to replace all usages with a more accurate name.

Header Guard style

Header Guard style

In Settings | Editor | Code Style | C/C++ | Naming Convention, you can configure the style for Header Guards to be used when creating a new header file.

You can update this Velocity template or select a style from one of the predefined schemes.

C++ support

Code highlighting and quick-fixes with Clangd

Code highlighting and quick-fixes with Clangd

To improve the editor performance, code highlighting and quick-fixes are now implemented on top of the complementary Clangd-based language engine (and are enabled by default along with the engine).

For quick-fixes, the location of the quick-fix is calculated in Clangd, while the fix itself is provided by CLion.

Error messages powered by Clang

Error messages powered by Clang

For some time now, we have been leveraging the Clangd-based language engine to annotate code errors and warnings in the editor. In v2019.1, CLion gets improved and more detailed error messages powered by Clang.

A practically useful example of this is debugging a failed overload resolution in your C++ code.

Improved Rename refactoring

Improved Rename refactoring

We’ve improved the Rename refactoring for files:

  • When you do a file rename, CLion asks if you’d like to also rename an associated class/struct, and the other way around.
  • When the header file is renamed, the header guards are updated accordingly.
Improved Extract refactoring

Improved Extract refactoring

The Extract refactoring is now more accurate and:

  • Respects type aliases and doesn’t expand on static members
  • Respects std:: namespace qualifier
  • Respects template specialization and template parameters
Member function can be static

Member function can be static

This new inspection reports member functions that can be marked as static. It works on top of the Clangd-based language engine and analyzes the method body, trying to check if it depends on this or not.

Debugger

Disassembly View

Disassembly View

Disassembly View is now available for LLDB in addition to GDB backend. We’ve also improved the view in general so that now it shows information divided by function.

As before, Disassembly View works when you use Force Step Into (Shift+Alt+F7) on a function with no source code.

Mute Variables

Mute Variables

To get a better stepping performance, or if you need to watch the variables only occasionally, you can now explicitly Mute Variables. A general per-IDE switch will stop the variable calculation, and each variable in the variables view gets a Load option which you can apply as needed.

Learn more

Memory View

Memory View

Memory View dumps the memory behind the pointer in the Debug mode. To invoke it, select a pointer variable in the debugger’s variables view and press Ctrl+Enter.

During stepping, if you have Memory View opened, CLion will highlight the memory changes that take place in the selected memory piece.

Custom Build and Run

Custom Build Targets

Custom Build Targets

Build-system independent Build Targets (Settings | Build, Execution, Deployment | Custom Build Targets) allow you to add custom targets and configure any tools to be used for Building/Cleaning the target.

The most typical use case is a compilation database project, which lacks the information about building the whole project.

Custom Run/Debug Configurations

Custom Run/Debug Configurations

To run and debug Custom Targets from CLion, create a corresponding Run/Debug configuration by using the Custom Build Application template (Run | Edit Configurations…).

The debugger will be taken from the Toolchain setting of the Custom Build Target.

Injected languages

Injected languages

String literals with pieces of code in other languages can now be treated accordingly. To temporarily inject a language, press Alt+Enter, apply the intention “Inject language or reference”, and select the appropriate language. For example, SQL strings, HTML code, or Regular Expressions.

Based on the language chosen, CLion will provide code highlighting and language-specific intentions and actions.

Custom color themes

Brighten up Your IDE

Tired of Black and White themes in CLion? Tweak literally every color in your IDE, from icons to radio buttons and arrows.

Each theme is actually a theme plugin that you can download directly from our plugin repository. Or, if you feel up to it, create your own theme plugin using the DevKit and modify CLion’s appearance via the JSON file.

Learn more

Recent locations

Recent locations

The Recent Locations Popup (Shift+Ctrl+E) lists all the locations that you’ve visited in a chronological order so that you can easily go back and find things.

Use instant search to filter the locations by file name or code snippet included. Or, switch to showing changed locations only.

Other improvements

  • The process of building CLion’s plugins was simplified by publishing CLion as a Maven dependency to be used by gradle-intellij-plugin (since version 0.4.2). Learn more
  • The bundled CMake is updated to 3.13, the bundled LLDB is updated to 7.0.1, and the latest supported Cygwin is now 3.0.
  • IPv6 is now supported to help you use Remote Development mode in CLion. Learn more
  • The Rust plugin received a massive update: it suggests out-of-scope items in completion and auto-import, as well as supports Rust language injection into code snippets in doc comments. Besides, profiler tools (like DTrace or Perf) are now supported for Rust.
2018.3 (Nov 27)

Initial Remote Development support

You can now develop remotely from a Windows, Linux, or macOS client machine to a Linux remote host, for CMake-based projects only. The current setup assumes the source code is located on a local machine, which CLion synchronizes to the remote machine. Many other remote development setups are planned for future CLion releases.

Supported configurations

Supported configurations

To start developing remotely, first create a remote toolchain in Settings | Build, Execution, Deployment | Toolchains. Provide the remote host address and credentials, and then use the toolchain in one or several CMake Profiles. After CMake is reloaded, you’ll be ready to start working remotely with your project in CLion.

Learn what’s going on in CLion under the hood.

Remote mode

Remote mode

After the configuration is done, you can run or debug your application or unit tests remotely from CLion. Code is built, run and debugged on a remote host, while you work with the code in CLion on your local machine. Code is resolved locally, and CLion synchronizes the header search path to the local machine to speed up the process.

Supported configurations

Enable remote as default

To use CLion in remote mode for all your projects, both the new and existing ones, you can set your remote toolchain to be the default.

Go to Settings | Build, Execution, Deployment | Toolchains and simply move the toolchain to the top of the list. CLion will then use this toolchain automatically for any projects you open in CLion.

CPU Profiler

CPU Profiler

CLion now integrates with CPU Profiler on Linux (Perf) and macOS (DTrace). You can run the profiler right from the IDE and review the analysis results in a dedicated tool window (View | Tool Windows | CPU Profiler).

Use the flame chart, call tree and method lists to get a better overview of the possible performance issues in your code. Navigate to the source code to locate the issues in the code base.

Learn more

C++ Support

Clangd-based navigation and search

Clangd-based navigation and search

We’ve been using an experimental, complementary Clangd-based language engine to help you annotate errors in the editor. Now, it also powers several navigation and search actions, including Go to declaration (Ctrl+B)/definition (Ctrl+Alt+B), highlighting references under the caret, quick documentation (Ctrl+Q), and Find usages (Alt+F7). The results are still merged with the ones collected by CLion’s own engine.

C++17: fold expressions and deduction guides

C++17: fold expressions and deduction guides

Now, CLion correctly parses C++17 fold expressions and C++17 deduction guides. This means that there is less false code highlighting and better code assistance for you. For example, the correct type will be shown in the parameter info for user-defined deduction guides.

New IDE actions

New Build and Rebuild actions

New Build and Rebuild actions

The new Build menu comes with a set of new and updated build-related actions for CMake:

  • Build/Rebuild all target from all CMake Profiles
  • Build/Rebuild all target from the selected CMake Profile
  • Build/Rebuild the selected configuration
  • Recompile the current file
  • Install
  • Clean
Activity Monitor

Activity Monitor

This new experimental feature shows how much CPU the subsystems and plugins (both built-in and additionally installed ones) are consuming. To access it, go to Help | Activity Monitor.

If you see a subsystem whose %CPU is unusually high, feel free to ask our support team about it or report it to the issue tracker.

New Run Anything

New Run Anything

Run Anything (Double Ctrl) is a new and universal way to run and debug any configuration in your project, or even open a project.

To run a configuration, just start typing its name.

To debug, hold down the Shift key to switch to the Debug Anything mode.

To open a project, type “Open” and select the desired project from the list.

Updated Search Everywhere

Updated Search Everywhere

The updated Search Everywhere (Double Shift) now includes all the multiple actions in one:

  • Search Everywhere
  • Find Action
  • Go to Class
  • Go to File
  • Go to Symbol

Each has its own separate tab in the dialog, and you can use Tab to switch between them.

Unit testing

In v2018.3, we’ve reworked the integration with unit testing frameworks in CLion (Google Test, Boost.Test, and Catch (2)) in order to eliminate various performance issues and hangs. We’ve also improved output processing in many cases.

Learn the details.

Show Test List

Show Test List

To improve performance, CLion now uses lazy test detection. This reduces project indexing times in many situations. For diagnostic purposes, we’ve implemented a new action called Show Test List (available from the Find Action dialog), which provides a text file with a list of all the tests currently detected in the project.

Compilation database validation

Compilation database validation

CLion now provides specific inspections to check for compliance with the compilation database’s JSON schema.

For example, it can highlight situations when an incorrect type is used for the property value, or when the property is missing.

Editor

Formatted macro expansion in Quick Doc

Formatted macro expansion

CLion now formats the macro replacement in the Quick Documentation popup (Ctrl+Q). It also highlights strings and keywords used in the final substitution, so you can quickly understand the code that will be substituted after the preprocessor pass.

Multiline TODO comments

Multiline TODO comments

To add more information to TODO comments but keep them readable, you can now split the comment into several lines. Just add an indent starting from the second line of your multiline TODO comment and the IDE will differentiate it from an ordinary comment.

VCS

Git submodules

You can now work with Git submodules in CLion. When you clone the root repository, CLion will clone all its submodules. The same is true for updates, and other VCS actions work with submodules as well.

GitHub pull requests

A brand-new GitHub pull requests tool window (VCS | Git | View Pull Requests) lets you view all the pull requests to the repository. Search them by state, assignee, author, etc., and easily create a new local branch with a simple right click.

Accessibility improvements

To make our tools accessible to as many people as possible, we’ve added a few new options to the Appearance section in the IDE’s settings (Settings | Appearance & Behavior | Appearance). Here, you’ll find a new High-contrast theme, expanded support for screen readers (they can now read line numbers, VCS annotations, and gutter icons tooltips) and an option to adjust IDE colors for people with color deficiencies.

High-contrast Theme

High-contrast Theme

A High-contrast Theme is now available for CLion. You can either switch it on just for the editor (Ctrl+`) or for the whole IDE (Settings | Appearance & Behavior | Appearance | Theme).

Plugins

New Plugins UI

New Plugins UI

Plugins settings under Settings | Plugins have been redesigned from the ground up. The new UI makes it much easier to control the plugins installed in your CLion instance and keep them up-to-date.

Featured plugins and marketplace

Featured plugins and marketplace

You can see a list of the most valuable plugins for CLion located in the Featured plugins list. Or, sort all the plugins by rating or number of downloads.
If you are a plugin writer, check out our new platform for third-party plugin vendors.

Other improvements

CLion 2018.3 comes with the Swift Package Manager support in the Swift plugin. Simply open the SPM project in CLion and work with it – no additional configuration required. Read more and watch a short demo

Rust plugin was updated to get partial Rust 2018 support, Move analysis inspection and cargo unit testing support.

2018.2 (Jul 25)

C++ support

Clangd
Argument selection defects inspection

Clangd-based language engine

CLion 2018.2 introduces an experimental clangd-based language engine for showing code errors and warnings in the CLion editor, which works alongside CLion’s own language engine. It’s enabled by default on all platforms. Note that the clangd engine is used for code analysis only and doesn’t affect the rest of code insight features like completion or refactoring.

Learn more

Argument selection defects inspection

Is it possible to detect situations when the arguments of the same type are passed in the wrong order? It is if argument and parameter names are meaningful! Welcome a new inspection in CLion to alert you of this: argument selection defects.

Note, it works on top of the new clangd-based language engine, so you have to turn it on to enable the new inspection.

Learn more about the algorithm used

New Project Models

Gradle C++
Compilation Database

Gradle C++

New Gradle C++ projects can now be opened in CLion (see the new C++ plugins announcement). Use the build.gradle file or the directory containing this file to open a Gradle project in CLion. All IDE capabilities, including full code insight, are available for such projects in CLion.

Learn more

Compilation Database

Compilation Database is a set of all compile options used to build the files in a project. If you manage to get one from your project (via your build system's options or separate tools like bear and intercept-build), you can now use the resulting json file to open your project in CLion. Code insight does work, though it’s not yet possible to build, run, or debug such projects.

Learn more

CMake support

Included files as project files
CMake macros

Included files as project files

You no longer need to list header files from your project root directory directly in CMake to get full code insight for such files in CLion. If you include the header or source file into any project file, CLion will automatically treat it as a project file as well, which means full code insight will work in there!

Learn more

CMake macros

When configuring an external tool in CLion, you can now use CMake-specific macros, which provide information about the current CMake run configuration: build directory, build type name, program arguments, or target name.

Dynamic analysis

Google Sanitizers
Valgrind Memcheck

Google Sanitizers

If you build your project with the -fsanitize option, CLion will visualize the sanitizers’ output in a “Sanitizer” tab in the run tool window. Use it to review the list of errors, navigate to sources in the editor, and do much more. Enjoy support for ASAN, TSAN, MSAN, and UBSAN in CLion.

Learn more

Valgrind Memcheck export/import

To keep an eye on your project’s memory issues and track the progress, you can now export Valgrind Memcheck results into XML files. Reimport them back with ease, whenever you need.

Recompile a single file

Recompile a single file

To speed up your development cycles, verify local changes quickly by recompiling a single file. Use CLion’s new action Run | Recompile (Shift+Ctrl+F9).

For now this only works for CMake (it calls the CMake target for the corresponding file, instead of a direct compiler call) and compilation database projects (it calls the compilation command from the json file).

Learn more

Database tools and SQL

Database tools and SQL

Version 2018.2 bundles the Database Tools and SQL plugin, which adds DataGrip’s functionality to CLion. This allows you to work with many known databases like MySQL, PostgreSQL, Oracle, and others.

Explore the content of a database, read and modify data, execute queries, and get full code insight for SQL too.

Learn more

IDE performance

Making the editor more responsive is currently one of our top priorities. CLion 2018.2 comes with the following improvements:

  • Lexer-only indentation processor allows CLion to format your code based on lexer information. Read more
  • Version 2018.2 brings fixes for UI freezes in:
    • completion use cases,
    • Search Everywhere,
    • navigation to Related symbol,
    • breadcrumbs,
    • and more.

Other improvements

Among other enhancements you’ll find:

  • Bundled LLDB 6.0 and CMake 3.12.
  • A host of fixes for LLDB and GDB.
  • Support for WSL background processes (starting with Windows 10 v1803).
  • MacBook Touch Bar support (read more).
  • Improved VCS support (read more).
2018.1 (Mar 28)

WSL

WSL config

Linux toolchain on Windows

If your project requires a Linux toolchain while being developed on Windows, you can now use Windows Subsystem for Linux (WSL) in CLion running on Windows.

Configure WSL and the corresponding toolchain under Settings | Build, Execution, Deployment | Toolchains, and then you’re ready to use it in CLion. Header search paths on WSL will be used, and the Linux binary will be created for you to run and debug on WSL.

Learn more
WSL Valgrind

Valgrind Memcheck on WSL

Valgrind Memcheck can detect dozens of memory errors and leaks and is now available for Windows users on WSL.

Turn on a WSL toolchain, make sure Valgrind is detected in settings (Settings | Build, Execution, Deployment | Valgrind), and then compile and run regular and test targets under Valgrind Memcheck to detect possible errors and leaks. View the results in a special tab in the Run tool window.

C++ support

if with initializer

C++17: If and switch with initializers

To avoid polluting an ambient scope or creating an artificial scope for initializers in if and switch operators, C++17 suggests adding an initializer to if and switch conditions. CLion now parses and resolves such statements correctly.

structured bindings

C++17: Structured bindings

C++17 introduced structured binding – a convenient and compact way of binding a list of identifiers to a set of objects. CLion’s C++ language engine now supports this feature and ensues accurate code analysis for it.

Ternary operator

Ternary operator

The ternary operator is now handled correctly in CLion’s code analysis. This means many false warnings and errors are no longer thrown, such as:

  • Red code in the ternary + new operator
  • False positive if std::out is used in the ternary operator
  • Incorrect resolve when initializing a reference from a ternary operator
Rename siblings

Rename and Change Signature for hierarchies

Refactoring hierarchies can be tricky, especially if you introduce a change in a derived function. To make it reliable we made sure that the Rename and Change Signature refactorings update functions in all inheritance branches, including sibling functions.

Clang-Tidy

Clang-Tidy settings

Clang-Tidy options and configs

Now you can provide options to some Clang-Tidy checks (e.g. modernize-use-nullptr) in CLion, under Settings | Editor | Inspections | C/C++ | General | Clang-Tidy.

If you prefer .clang-tidy config files instead of the IDE-provided settings (for example, because you store these config files in a VCS for the whole team to access and use in various IDEs), you can configure CLion to respect your existing per-directory configs.

Editor

Folding control statements

Code folding of the control statements

Now you can collapse/expand control statements (like if/else, do/while, for, or switch) with a code block that’s longer than one line, or with a code block inside braces. Just use Shift+Ctrl+Period / Ctrl+= You can also hover the mouse over the folded block to preview the content.

Message windows

Message toolwindow: new settings

With v2018.1, you can decide if build output is always necessary (and thus should be visible) or it’s only needed if some warnings or errors appear. Look in the Messages tool window settings for these options:

  • Always Show on Build (Default)
  • Auto-Hide and Show on Warning/Error
Learn more
Breadcrumbs

Breadcrumbs for C and C++

Keep track of your location in C and C++ code with the breadcrumbs – small markers at the bottom of the editor that help you navigate around your code. Right now CLion shows namespaces, classes, structures, functions, and lambdas there.

Learn more
Unwrap blocks

Unwrap/remove code blocks

To accurately and safely remove enclosing parts in complicated code with lots of nested statements, use Unwrap/Remove… action (Ctrl+Shift+Delete). It suggests the options depending on where your caret is and is capable of unwrapping if, else, for, while, do..while and for control statements.

CMake

CMake Install

CMake Install

If you have any CMake install targets in your project, you can call Install from the CLion’s Run menu now. The cmake install command will be executed.

Alternatively, you can add an Install step to any of your run configurations in CLion.

non-CMake prj

Open single file and non-CMake projects

While CLion still requires a CMake project to provide smart IDE features, you can now open a single file or folder in CLion which don’t have to be connected to any CMake project.

Follow the built-in notification to select and load a CMakeLists.txt file later. Call Tools | CMake | Unload CMake at any time to unbind your project from the current CMakeLists.txt.

Learn more
Create CMakeLists.txt from template

CMakeLists.txt file template

Create new file (Alt+Insert) now provides an option to create a CMakeLists.txt file.

The content of the generated file is defined by the template in Settings | Editor | File and Code Templates, so you can customize it based on your project’s or team’s needs.

Project scopes

Configure scopes

Predefined and custom scopes

CLion 2018.1 brings several predefined scopes which can help overview your project from different angles, like Project Source Files, Project Non-Source Files, and Changed files.

You can also configure custom scopes, for example a scope that only includes project header files.

Learn more
Switch scopes in Project View

Project view

By default, Project View opens the Project, which includes all project files including the generated folder (like cmake-build-debug) and other excluded folders. Later, you can select between other predefined or custom scopes.

Find in Path with Scopes

Find in Path

To narrow down your search and thus make it quicker and more efficient, use scopes in the Find in Path dialog. All custom scopes created earlier are available in the list.

VCS: Partial Git commits

Select code chunks to commit

Select code chunks to commit

Want to commit only the selected changes from files and leave others for later? Partial Git commits (git add -p) can help here, and now there is support for them provided by CLion here!

To include code chunks in a commit, use the check-boxes in the Diff pane of the Commit Changes dialog.

Add to changelist

Move a change to the changelist

While editing a file, you can see change markers in the left gutter. These not only let you overview the change and roll it back, but also move it to any existing changelist or create a new one and add the current code chunk to it.

Learn more

More languages – more power

Objective-C / Objective-C++ support

Work with files in Objective-C / Objective-C++ added to your CMake project and benefit from the following features (courtesy of AppCode) bundled into CLion:

  • Language syntax support
  • Objective-C inspections (except for the clang analyzer set)
  • Key-value coding support
  • Live and file templates
  • Code style/color schemes

Fortran and Rust plugins

Fortran plugin comes with FORTRAN 77 / 90 / 95 / 2003 and 2008 support. The capabilities include smart editor, navigation actions, code analysis and debugger.

Rust plugin comes with:

  • the Cargo build system on board,
  • updates to CLion’s New Project wizard
  • and a debugger.
Learn more

Other improvements

There are dozens of other useful enhancements in CLion 2018.1. Find out more in our blog.

  • Performance improvements: Important changes were introduced to make the editor more responsive. Incremental highlighting was implemented.
  • MSVC by default: No need to turn on Microsoft Visual C++ compiler support in Registry – now it works by default.
  • Color scheme improvements: CLion now bundles Monokai and GitHub schemes, and comes with lots of fixes to the existing schemes.