Все, что вы давно просили, в одном релизе — CLion 2018.2

Привет, Хабр!

Не знаем, насколько жарко у вас за окном, но у нас в JetBrains эти недели точно жара — релизная. Одну за другой мы опубликовали обновленные версии 2018.2 почти всех наших инструментов на базе платформы IntelliJ: WebStorm, IntelliJ IDEA, PyCharm, DataGrip, GoLand, PhpStorm, RubyMine и CLion.

Для команды CLion этот релиз особенный, так как включает в себя результаты нашей работы по трем очень важных направлениям:

  1. Clangd как основа для нового экспериментального движка для разбора кода на C++.
  2. Улучшения производительности IDE за счет новых архитектурных решений.
  3. Новые проектные модели, поддерживаемые в CLion.


А также поддержка Google Sanitizers, возможность пересборки отдельного файла и многое другое!

image

Ниже мы поговорим про улучшения и нововведения подробно, а самые нетерпеливые могут прямо сейчас скачать бесплатную 30-дневную версию с нашего сайта и попробовать новые возможности на своем проекте или специально подготовленном демо-проекте с GitHub.

Clangd для парсинга кода на C++ в CLion


Еще в марте мы рассказали вам, что рассматриваем различные альтернативные варианты языкового движка для CLion. Это и понятно — хочется и принципиально улучшить поддержку текущих языковых возможностей, и быстрее добавлять свежие фишки C++, и писать больше крутых и специфичных для C++ рефакторингов и пр. Для всего этого нужен точный и быстрый парсер кода.

Мы продолжаем улучшать наш текущий парсер, методично вытравливая разнообразные ошибки и недочеты. А в дополнение мы решили попробовать сделать еще один языковой движок на базе clangd (это такая реализация LSP протокола для clang).

Если сразу переходить к результатам — в CLion 2018.2 в дополнение к основному языковому движку работает еще и новый, экспериментальный, на clangd. Мало того, мы так осмелели, что включили его по умолчанию на Linux и macOS. На Windows, к сожалению, обнаружилась неприятная особенность работы clangd с памятью, и мы по умолчанию выключили новый движок на этой платформе (но с высокой вероятностью это будет исправлено уже в первых минорных обновлениях на версию 2018.2).
Включить/выключить экспериментальный парсер кода на основе clangd можно в настройках Settings/Preferences | Languages & Frameworks | C/C++ | Clangd:
image

Важно понимать:

  • Парсер кода на основе clangd работает в параллели с собственным парсером CLion.
  • Clangd используется только для показа ошибок и предупреждений в редакторе. Для всего остального (включая рефакторинги, исправления ошибок (quick-fixes), навигацию, автодополнение и пр.) используется собственный парсер CLion.
  • Конфигурация ошибок и предупреждений Clang по умолчанию специально подобрана так, чтобы показывать довольно много предупреждений о потенциальных ошибках, но при этом не противоречить тем инспекциям кода, которые работают в CLion на базе собственного парсера кода и включены по умолчанию.


Предупреждая ваши вопросы, сразу скажу, что да, мы планируем пробовать переводить другие умные возможности IDE на clangd, но сначала надо стабилизировать текущее решение, провести еще множество тестов и решить множество сложных и принципиальных вопросов на этом пути.

Новая проверка для кода на C++


Когда функция принимает несколько параметров одинакового типа, бывает легко ошибиться и незаметно для себя (и компилятора) поменять местами аргументы одного типа при вызове этой функции. Такие ошибки тяжело отлавливать, а значит их стоимость высока. Но в CLion 2018.2 мы реализовали новую проверку кода (inspection) специально для таких случаев. Она использует эвристический алгоритм для анализа имен параметров и аргументов функции и способна обнаружить ситуации, когда порядок аргументов ошибочно изменен:
image

Важно:

  • Чтобы избежать ложных срабатываний, алгоритм отключается автоматически для очень коротких имен (менее 3 символов).
  • По тем же причинам алгоритм отключается для функций, названия которых содержат подстроки swap/inverse/rotate/backward/flip.
  • По ряду технических причин инспекция работает только при включенном экспериментальном парсере кода на clangd и к тому же только при включенном анализаторе кода clang-tidy через clangd (это все в настройках упомянутых выше Settings/Preferences | Languages & Frameworks | C/C++ | Clangd).

Производительность IDE


В этом релизе мы целенаправленно изводили подвисания IDE (UI freezes) в целом ряде случаев: при автодополнении, в поиске Search Everywhere, в навигации на связанный символ (которая как правило используется для переключения между исходным файлом и заголовочным и обратно), при использовании хлебных крошек (breadcrumbs) для навигации. Первые пользователи релиза, а также многочисленные участники нашей программы раннего доступа (Early Access Program) уже оценили улучшения и подтверждают, что поведение IDE существенно улучшилось, а подвисаний стало значительно меньше. Работа в этом направлении будет продолжена и в 2018.3.

К тому же, мы перевели встроенный форматтер кода на лексер. Конечно, при работе через парсер (как раньше) его результат более точен, но вот время работы значительно увеличивается. А так как форматирование кода в CLion происходит в тот момент, когда вы печатаете код, подвисания тут могут очень негативно отражаться на общем впечатлении о скорости работы IDE. Отзывчивость редактора падает, подвисания становятся заметными и так далее.

Форматтер на лексере работает довольно аккуратно, но если вы все же испытываете проблемы с форматированием на вашем коде, то во-первых, обязательно расскажите об этом нам, а во-вторых, вы всегда можете переключиться на более медленный, но и более точный форматтер на парсере — для этого есть опция cidr.indent.lexer.only.cpp в Registry.

Новые проектные модели: Gradle C++ и compilation database


До 2018.2 были следующие способы открыть проект в CLion:

  • Открыть CMake проект.
  • Открыть файл или целую папку, не имеющую CMake-файлов. При этом многие умные функции по работе с кодом окажутся отключены.
  • Для кода на Rust при использовании Rust плагина в CLion можно использовать Cargo.
  • Воспользоваться сторонним плагином к CLion для открытия проекта на Bazel.

К этому списку в 2018.2 мы добавили две новые опции:

  • Открыть проект на Gradle, указав IDE местоположение файла build.gradle. Обращаем внимание, что CLion сейчас поддерживает только новый Gradle формат для проектов на C++:
    image
  • Открыть проект из compilation database, указав IDE местоположение файла compile_commands.json. Пока что в данном случае невозможна сборка и запуск проекта из CLion, так как compilation database не содержит информации о сборке проекта целиком.

Но в обоих случаях, как Gradle, так и compilation database, все умные функции по работе с кодом доступны! И кстати, опция compilation database интересна тем, что фактически теперь какой бы ни был у вас проект — Makefiles, Ninja, Qbs, любая ваша специфическая проектная модель — вы можете сгенерировать compilation database для вашего проекта и открыть его в CLion!

А мы тем временем продолжаем работу над API для добавления поддержки новых проектных моделей в CLion!

Улучшения CMake


Кое-какие важные улучшения были сделаны и для CMake проектов. Самое главное — если ваши заголовочные файлы, расположенные внутри директории вашего проекта, используются в файлах проекта и подключены через директиву #include, их больше не надо явно перечислять в CMake скриптах! CLion теперь сам пометит их как проектные, и все умные функции вроде рефакторингов и автодополнения будут доступны в таких файлах:
image

Второе важное улучшение связано с настройкой внешних инструментов (external tools), которые можно затем вызывать как самостоятельно по команде, так и делать частью конфигураций запуска приложения. В них теперь доступны макросы, содержащие всяческие CMake переменные. Например, директория сборки или имя исполняемого файла:
image

Инструменты для динамического анализа кода


Для Valgrind Memcheck, поддержанного в CLion еще в версии 2017.3, появилась возможность экспортировать и затем импортировать обратно результаты анализа:
image

Также в этой версии в CLion появилась поддержка другого инструмента для динамического анализа кода — Google Sanitizers. Для их включения нужно явно указать специальный ключ -fsanitize в CMake скриптах вашего проекта, и тогда, в случае использования Clang версии не менее 3.8.0 или GCC версии не менее 5.0.0, CLion сможет автоматически обнаружить использование sanitizers и показать результаты их работы в специальном окне:
image

В нем можно просматривать не только список найденных ошибок, но и исходный код (и навигироваться на него), изучать информацию о фрейме, смотреть трассу ошибок. Более подробно про поддерживаемые sanitizers и настройки в CLion читайте в нашем блог посте на английском.

Пересборка одного отдельного файла


Для проектных моделей CMake и compilation database в CLion 2018.2 есть возможность пересобрать один файл, не вызывая пересборку всего проекта. Для этого есть действие в меню Run — Recompile, или можно воспользоваться комбинацией клавиш Shift+Ctrl+F9 на Linux/Windows, ⇧⌘F9 на macOS (в раскладках по умолчанию):
image

Данная возможность — отличный способ быстро проверить, что ваши текущие изменения в файле не сломали сборку всего проекта. Если интересны детали, какая именно команда компиляции вызывается и как выбирается тип сборки, можно почитать подробно в нашем блоге.

Базы данных


По результатам нашего опроса в Twitter, многие пользователи CLion обращаются к тем или иным базам данных при разработке проекта на C/C++. Поэтому с этого релиза в нашу IDE включен плагин для работы с базами данных и кодом на SQL. Он является полным функциональным аналогом нашей среды для работы с базами данных — DataGrip. Так что вот этот пост здесь на Хабре от moscas про нововведения в DataGrip 2018.2 вам тоже может быть интересно почитать.

И это еще не все!


Коротко о других улучшениях:

  • Мы забандлили новую версию отладчика LLDB 6.0 и новую версию CMake 3.12.
  • К тому же в случае GDB CLion научился использовать pretty-printers для типов при показе указателей на переменные данного типа.
  • Для WSL поддержаны фоновые процессы, что значительно облегчает запуск всей конфигурации CLion с WSL.
  • Из IntelliJ-платформы CLion получил ряд улучшений в поддержке систем контроля версий, на платформе macOS поддержку MacBook Touch Bar и более темные заголовки окон, к тому же обновился весь ряд иконок в интерфейсе IDE.

Традиционное видео о новых возможностях CLion 2018.2 на английском языке от нашего девелопер-адвоката:

И кстати, до среды, 1 августа 2018, 19:05 по Москве (GMT+3), мы дарим скидку 50% на все продукты JetBrains Toolbox.

Вопросы? Будем рады ответить в комментариях!

Ваша команда JetBrains CLion
The Drive to Develop

© Habrahabr.ru