Как использовать clang format clion
Clang 12 documentation
ClangFormat
ClangFormat¶
Standalone Tool¶
clang-format is located in clang/tools/clang-format and can be used to format C/C++/Java/JavaScript/Objective-C/Protobuf/C# code.
Vim Integration¶
The first line enables clang-format for NORMAL and VISUAL mode, the second line adds support for INSERT mode. Change “C-K” to another binding if you need clang-format on a different key (C-K stands for Ctrl+k).
With this integration you can press the bound key and clang-format will format the current line in NORMAL and INSERT mode or the selected region in VISUAL mode. The line or region is extended to the next bigger syntactic entity.
It operates on the current, potentially unsaved buffer and does not create or save any files. To revert a formatting, just undo.
Emacs Integration¶
This binds the function clang-format-region to C-M-tab, which then formats the current line or selected region.
BBEdit Integration¶
clang-format cannot be used as a text filter with BBEdit, but works well via a script. The AppleScript to do this integration can be found at clang/tools/clang-format/clang-format-bbedit.applescript ; place a copy in
With this integration you can select the script from the Script menu and clang-format will format the selection. Note that you can rename the menu item by renaming the script, and can assign the menu item a keyboard shortcut in the BBEdit preferences, under Menus & Shortcuts.
CLion Integration¶
Visual Studio Integration¶
Download the latest Visual Studio extension from the alpha build site. The default key-binding is Ctrl-R,Ctrl-F.
Visual Studio Code Integration¶
Get the latest Visual Studio Code extension from the Visual Studio Marketplace. The default key-binding is Alt-Shift-F.
Script for patch reformatting¶
The python script clang/tools/clang-format/clang-format-diff.py parses the output of a unified diff and reformats all contained lines with clang-format.
So to reformat all the lines in the latest git commit, just do:
In an SVN client, you can do:
These commands use the file paths shown in the diff output so they will only work from the root of the repository.
Current State of Clang Format for LLVM¶
The following table Clang Formatted Status shows the current status of clang-formatting for the entire LLVM source tree.
ClangFormat as alternative formatter
.clang-format configuration files
ClangFormat offers many style options, which you can mix to create the set of rules most suitable for your team. It also provides several built-in styles for C/C++: LLVM, Google, WebKit, Chromium, and Mozilla. These predefined styles can be used as is or as a baseline for your custom set of style definitions.
ClangFormat in CLion
Alternatively, select the Enable ClangFormat checkbox in Settings/Preferences | Editor | Code Style :
commit changes and select Reformat Code as the Before commit action:
Review ClangFormat settings for a file
Open the desired source file in the editor and click Edit ‘.clang-format’ for. from the toolbar switcher:
Completion for options and values, with option descriptions shown in the popup:
Checking the option values for consistency with the allowed value set:
Quick documentation popup Ctrl+Q to help you explore the option details:
Using clang-format in CLion
I’d like to format my code using clang-format in CLion. I’ve gone through the settings and haven’t found any setting that would allow me to run an external command to transform code. How are such things normally done in CLion?
4 Answers 4
You can use External Tools in CLion.
Go to File->Settings->Tools->External Tools and click on the plus sign.
A window should pop up. Use a name of your choice.
For the Tool settings tab I’m using this configuration:
Program: clang-format-3.7 (you should use the name of your executable here)
Now, with your file open, you can go to Tools->External tools and run the config above. It basically calls clang-format and does inplace formatting.
You can also set a custom keymap to it, just search the name of your external tool in «Keymap» of the Settings menu.
The lates version of CLion 2019.1 has native support for ClangFormat.
It installs the context menu to invoke locally installed clang-format for a file or for a selection. It also set up the key shortcut for ‘Reformat current Statement with clang-format’ action.
This option works quite well for me in CLion 218.3 however, it might be included in an early version as well.
The previous answers work well, but do not allow executing clang-format on save without the use of workarounds which don’t work with the Vim emulation plugin I am using.
Here is a solution which executes clang-format on save and works well in every situation that I have encountered.
I use the following settings to execute clang-format when one of the currently open files is saved. You can tweak these settings to match your needs
CLion 2019.1: ClangFormat, подсветка кода через Clangd, memory view, начальная поддержка микроконтроллеров
У команды CLion множество отличных новостей — питерская часть команды вместе с другими коллегами успешно перебралась в новый офис, к нам присоединились новые классные разработчики, а главное, мы буквально на днях выпустили первое большое обновление в этом году, CLion 2019.1!
Работа в новой версии шла сразу по нескольким фронтам:
Подробнее об этих и других нововведениях читайте ниже. А чтобы попробовать новые возможности и улучшения, скачайте бесплатную 30-дневную версию CLion с нашего сайта.
Поддержка языка C++
Clangd
Как вы уже знаете, в CLion два инструмента для поддержки языка C++ — один полностью свой, а второй основан на Clangd. Они работают совместно, дополняя друг друга и обмениваясь необходимой информацией. При этом, если производительность и критерий функциональной полноты позволяют, мы сейчас стараемся перенести умные средства по работе с кодом на C++ в CLion на инструмент на базе Clangd. Речь пока не идет про рефакторинги кода, но вот подсветка кода в 2019.1 сделана уже на базе Clangd. Это существенно улучшило “отзывчивость” редактора.
Еще несколько релизов назад мы перевели CLion на инструмент на базе Clangd при показе ошибок в редакторе. Теперь текст ошибок показывается более детально. Это пригодится, например, при отладке ошибок, связанных с перегрузкой функций:
К этому добавилась возможность вычисления позиции возможного исправления (quick-fix) тоже через Clangd. Само же исправление предоставляется непосредственно собственным инструментом CLion.
Еще одно интересное направление нашей работы — это написание новых проверок на инструменте парсинга кода на Clangd. Начиная с CLion 2019.1, новая проверка для кода на C++ подскажет, когда функцию-член класса можно объявить статической:
Кстати, управление настройками этого альтернативного инструмента на Clangd можно найти в Settings/Preferences | Languages & Frameworks | C/C++ | Clangd.
Собственный инструмент парсинга кода
Производительность редактора является одной из наших самых приоритетных целей. Помимо множества небольших улучшений, в этом релизе стоит отметить существенное улучшение начального времени индексирования проекта. Оно случается не всегда, но в случаях, когда для своих проектов вы используете одни и те же библиотеки: тогда CLion может это автоматически заметить и переиспользовать символы для этих библиотек для нового открытого проекта, который их использует. Когда речь идет об STL или Boost, улучшения становятся очень заметными!
В наших планах на этот год повышение аккуратности и точности наших рефакторингов для C++. Мы начали с двух самых базовых — Rename и Extract. Для Extract мы поправили множество случаев, когда результат рефакторинга оказывался некорректным из-за неправильно учтенных квалификаторов пространства имен (например, std:: ), специализаций шаблонов и переопределенных имен типов (type aliases).
Применительно к Rename мы обратили внимание на случай, когда происходит переименование класса или структуры, совпадающей с именем файла, в котором они находятся. Раньше мы всегда переименовывали и файл тоже, а теперь CLion спрашивает вас о предпочтительном исходе во время рефакторинга. Можете переименовать, а можете оставить старое имя файла. В обратную сторону тоже работает — переименование файла не приводит к безусловному переименованию класса. (Где-то здесь должны быть крики из зала: “Наконец-то!”.)
И, кстати, чуть ниже я расскажу о возможности задавать стили header guards. Так вот, если использованный в файле header guard следует заданному шаблону стиля и при этом в его имени есть имя переименованного файла, то CLion обновит и header guard!
Стили кодирования
В версии 2019.1 мы добавили возможность переключиться на ClangFormat для форматирования кода в CLion. Это включает в себя не только само действие форматирования ( Ctrl+Alt+L на Windows/Linux, ⌥⌘L на macOS) или автоформатирование при печати кода, но и форматирование перед коммитом (pre-commit hook), при генерации кода средствами CLion, при рефакторингах и при применении исправлений (quick-fixes). В общем, в любом месте, где IDE форматирует код, будет вызываться ClangFormat.
Переключиться на ClangFormat можно глобально — в настройках Settings/Preferences | Editor | Code Style. А можно только для конкретного проекта. Причем, если в проекте будет обнаружен конфигурационный файл .clang-format, CLion предложит переключиться на ClangFormat именно с использованием этого конфигурационного файла:
Чуть больше деталей можно найти в нашем блоге (на английском).
Именование переменных, типов и других символов в коде — сложный, порою даже философский вопрос. Но в мире программирования (для улучшения читаемости кода) давно придумали стили именования. Есть стиль LLVM, есть Qt, есть Google. Поэтому в настройках CLion Settings/Preferences | Editor | Code Style | C/C++ теперь появилась новая вкладка — Naming Convention, в которой можно выбрать один из предопределенных стилей или настроить свой, задав стиль именования для различных типов символов (макросов, глобальных функций, членов класса, параметров, локальных переменных и пр.). Выбранная конвенция будет использоваться во всех действиях IDE — кодогенерации, рефакторинга, автоматических исправлениях и т. д. Кроме того, если хочется еще более точно следить за выполнением правил именования, можно включить новую проверку Inconsistent Naming, которая покажет имена, не соответствующие правилам, и предложит вариант переименования:
В этой же вкладке можно найти настройки стиля header guards, которые я упоминала выше:
Отладчик
Просмотр памяти Memory View
У нас наконец дошли руки до просмотра памяти в отладчике. В текущей версии можно посмотреть память по указателю: достаточно встать на любой указать в панели Variables во время отладки и запросить Memory View ( Ctrl+Enter на Windows/Linux, ⌘Enter на macOS). А если вкладка memory view открыта при пошаговой отладке, то в ней можно видеть подсвеченные изменения в памяти:
На следующий релиз уже запланированы изменения в UI/UX, но сначала хотелось бы собрать отзывы от пользователей. Так что пишите!
Дизассемблирование в случае LLDB
Ассемблерный код теперь разбит по функциям и, главное, показывается не только в случае GDB, но и для LLDB!
Стоит, правда, отметить, что ассемблерный код показывается до сих пор только в тех случаях, когда нет исходных кодов функции. Так называемый режим disassemble on demand пока не поддержан.
Производительность пошаговой отладки
Иногда пошаговая отладка затягивается из-за длительного вычисления переменных на каждом шаге. Но ведь порою эти вычисления никому не нужны — хочется как можно быстрее пройти какую-то область кода по шагам, изредка просматривая значения пары переменных! Теперь в CLion появилась возможность отключить пересчет переменных при пошаговой отладке — Mute Variables в контекстном меню отладчика делает ровно это. А когда понадобится вычислить и отобразить значения, на переменной можно нажать Load:
CLion для микроконтроллеров
Илья Моторный (elmot) уже писал здесь на Хабре про свой плагин для интеграции CLion с STM32CubeMX и поддержкой отладчика OpenOCD. В конце прошлого года Илья присоединился к нашей команде и уже успел существенно обновить плагин и перенести его внутрь CLion.
Довольно большой и детальный блог пост по обновленному плагину можно найти в нашем блоге. Здесь же я опишу самое главное, что теперь можно сделать:
Проектно-независимые таргеты и конфигурации
Некоторое время назад список поддерживаемых проектных моделей в CLion был расширен Gradle C++ и compilation database. С последним были проблемы, связанные с тем, что формат не включает информацию о сборке всего проекта, поэтому ни сборка, ни запуск, ни отладка проекта в случае compilation database не были возможны. Да и просто в случае известной CLion проектной модели, иногда хочется иметь таргет, который просто собирается какой-то командой в терминале.
Теперь для таких случаев есть Custom Targets (Settings/Preferences | Build, Execution, Deployment | Custom Build Targets) и Custom Run/Debug Configurations (Run | Edit Configurations…). В случае таргета надо задать параметры внешних инструментов (external tools), которые будут использоваться при сборке и очистке проекта:
А в случае проектно-независимой конфигурации для запуска и отладки надо указать таргет, исполняемый файл и желаемые аргументы для запуска:
Injected Language
Встречаются ли в вашем коде строковые литералы, внутри которых запрос SQL, HTML код или регулярное выражение? Если да, то наверняка вам бы хотелось хотя бы подсветить код внутри литерала в соответствии с его происхождением. Теперь это возможно! Временно включить в строковом литерале другой язык можно простым нажатием Alt+Enter и выбором опции “Inject language or reference”. Теперь выбираем нужный нам язык и в еще недавно обычном строковом литерале появляется подсветка выбранного языка, а также все специальные действия. Самый яркий пример — регулярные выражения и возможность проверки строки на соответствие им прямо в IDE:
И многое другое
Продукты в компании JetBrains как правило создаются не одной небольшой командой, а командой всей соответствующей платформы. Поэтому в CLion попадают возможности из IntelliJ IDEA, WebStorm, AppCode, DataGrip, PyCharm и пр. В этом релизе из таких улучшений стоит отметить:
Вопросы, пожелания, баг-репорты и просто мысли высказывайте в комментариях! Мы будем рады ответить.
Ваша команда JetBrains CLion
The Drive to Develop
Использование clang-формата в CLion
Я хочу отформатировать свой код, используя clang-формат в CLion. Я просмотрел настройки и не нашел ни одного параметра, который позволил бы мне запустить внешнюю команду для преобразования кода. Как это обычно делается в CLion?
4 ответа
Вы можете использовать Внешние инструменты в CLion.
Перейдите к File->Settings->Tools->External Tools и нажмите на знак плюса.
Должно появиться окно. Используйте имя по вашему выбору.
Для вкладки Tool settings я использую эту конфигурацию:
Программа: clang-format-3.7 (здесь следует использовать имя исполняемого файла)
Теперь, когда ваш файл открыт, вы можете перейти к Tools->External tools и запустить конфигурацию выше. Он в основном вызывает clang-format и выполняет форматирование на месте.
Вы также можете установить для него настраиваемую раскладку, просто найдите имя вашего внешнего инструмента в меню настроек.
Последняя версия CLion 2019.1 имеет встроенную поддержку ClangFormat.
Он устанавливает контекстное меню для вызова локально установленного clang-format для файла или для выбора. Он также настраивает сочетание клавиш для действия «Переформатировать текущий оператор с помощью clang-format».
Предыдущие ответы работают хорошо, но не позволяют выполнять clang-format при сохранении без использования обходных путей, которые не работают с плагином эмуляции Vim, который я использую.
Вот решение, которое выполняет clang-format при сохранении и хорошо работает в каждой ситуации, с которой я столкнулся.
Я использую следующие настройки для выполнения clang-format при сохранении одного из открытых в данный момент файлов. Вы можете настроить эти параметры в соответствии со своими потребностями.
Поскольку CLion 191 EAP, ClangFormat поддерживается из коробки.