Early Access Program News

CLion opens 2019.1 EAP: ClangFormat, Disassembly View for LLDB, and support for injected languages

Hi,

Today we are thrilled to begin the CLion 2019.1 Early Access Program! The first build is already available for download. As usual, you can download build 191.4212.38. from our site, using Toolbox App, or through a snap package (if you are using Ubuntu).

Download CLion 2019.1 EAP

The main highlights (as you probably already got from the title) include:

CLion 2019.1 EAP

ClangFormat support

CLion’s own formatter works as you type and it provides you with several predefined code styles like LLVM, Google, or Qt. There are also dozens of other flexible options that you can use to configure your code to your personal preferences. However, in the C and C++ world, there is a widely used tool for formatting the code, which some call the standard. It’s called ClangFormat. And it’s now supported in CLion! Let’s take a look at how you can use it.

Open a project in CLion with .clang-format file in it

If your whole team is using ClangFormat it’s natural that you should use it as well, especially since the config file is likely already present in the project repository. Besides this, many open source projects nowadays include a .clang-format config with the project source code. In cases where ClangFormat is used, when you open the project for the first time in CLion (and open any C/C++/Objective-C file in the editor), the IDE detect it and it will suggest that you switch to ClangFormat:
ClangFormat notification

Another possibility is that you manually invoke Enable ClangFormat for project from the code formatting switch at the bottom of the editor at any time:
ClangFormat in action

Another option is to turn it on in Settings/Preferences | Editor | Code Style (this will affect all the projects you are working on in CLion):
ClangFormat global setting

Review the ClangFormat options applied to a particular file

It’s possible to have several different ClangFormat settings inside one project: for example, a library used in the project, uses one style, while a user’s code is done in a different style. If this is the case, then there can be several .clang-format configs in the project. To better understand which style affects the file, CLion provides a quick and easy way to review all the ClangFormat settings applied in particular file – simply call the “View ClangFormat options for <file name>” action from the toolbar switcher when the necessary file is opened in the editor:
ClangFormat settings

Tip: If you don’t have a .clang-format configuration file yet, you still can switch to ClangFormat in CLion using the toolbar switch or the IDE settings. LLVM style will be used in this case and you can review ClangFormat settings in the IDE.

These settings are currently read-only. We’ll add the ability to change and export them later (CPP-15184).

When is ClangFormat used?

Naturally everywhere in the IDE where you have code to format:

  • While typing in the editor or pasting the code
  • When calling the Reformat Code action for a selected piece of code (Ctrl+Alt+L on Windows/Linux, ⌥⌘L on macOS):

Format with ClangFormat

  • When reformatting the code before a commit (pre-commit hook), if a commit is done via the Commit action (Ctrl+K on Windows/Linux, ⌘K on macOS)
  • When calling Generate actions
  • When Refactoring
  • When applying quick-fixes and intention actions

Known limitations:

  • It’s not possible right now to import/export settings between CLion’s own formatter and ClangFormat (CPP-4805).
  • ClangFormat only works for C, C++, and Objective-C.
  • A few other issues linked to the parent ticket CPP-4809.

Debugger: Disassembly View

LLDB users will be happy to learn that bundled LLDB (on macOS and Linux platforms) was updated to 7.0.1 in this build. And more importantly, Disassembly View now works for LLDB as well!

Disassembly View was updated for both backends: GDB and LLDB, and now it shows information per function:
Disasm for LLDB

Please note, CLion still doesn’t provide Disassembly View on demand (CPP-9091), which means that it only works after you force the step into functions with no source code. As a workaround, feel free to use a nice 3rd party plugin known as Compiler Explorer (hopefully, it will soon be updated to work with 2019.1 EAP).

Injected languages

When coding in C and C++, there can sometimes be pieces of code inside string literals. Wouldn’t it be nice if an IDE could treat them as code, and not as text? For example, SQL strings, HTML code, or Regular Expressions. Well, it’s now possible in CLion! To temporarily inject a language, press Alt+Enter and apply the intention “Inject language or reference”, select the appropriate language, and you are done!
Injected SQL

CLion provides accurate code highlighting based on the language chosen, it also has language-specific intentions, actions, and it can edit a code fragment in the dedicated editor section functionality. For example, for regular expressions you can check if a string matches the RegExp right in the IDE:
Injected regular expression

This injection is temporary, which means it will be removed when you restart the IDE restart or reopen the project. And of course, you can un-inject manually using the Alt+Enter context menu.

An update for plugin writers

When you are missing any functionality in CLion you may create a feature request or consider implementing a plugin using IntelliJ Platform API. In our plugin repository, there are more than 1.2K plugins for CLion (check this selection of valuable non-bundled plugins). We have simplified the process of building CLion’s plugins by publishing CLion as a Maven dependency to be used by gradle-intellij-plugin (since version 0.4.2). In simple terms, this Gradle plugin adds the specific IntelliJ-based IDE dependencies, helps with preparing plugin.xml files and preparing the proper structure for the plugin, executes the IDE instance with the plugin you are developing, and finally, it also helps with uploading the plugin to the plugin repository. And starting with 2019.1 it’s aware of the CLion SDK.
We do hope to make some help articles on the CLion specifics, which will be available here shortly, and we welcome anyone who wants to create a plugin for CLion to check it out!

Other enhancements

Since 2018.2 CLion uses an additional Clangd-based C++ language engine for showing code errors and warnings in the editor and some navigation and search actions. In this EAP we’ve improved the errors messages and take more details from Clang:
Detailed clang errors
These details, for example, might be very useful when you debug failed overload resolution in your C++ code.

This EAP brings new inspection which reports the member functions that can be marked as static:
Member function can be static

If you are using compilation database project model in CLion, you’ll be interested to learn that CLion now allows you to build/clean such projects. Just configure external tools and provide them in the settings as build/clean commands:
comp_db_build

And finally, there are also notable VCS improvements coming from the IntelliJ Platform. Thanks team!

That’s it. Full release notes are here. Download and try the EAP build right now and let us know what you think!

Download CLion 2019.1 EAP

Your CLion Team
JetBrains
The Drive to Develop

image description

Discover more