- PVSM.RU - https://www.pvsm.ru -
Привет!
Не знаем, насколько жарко у вас за окном, но у нас в JetBrains эти недели точно жара — релизная. Одну за другой мы опубликовали обновленные версии 2018.2 почти всех наших инструментов на базе платформы IntelliJ: WebStorm, IntelliJ IDEA, PyCharm, DataGrip, GoLand, PhpStorm, RubyMine и CLion.
Для команды CLion этот релиз особенный, так как включает в себя результаты нашей работы по трем очень важных направлениям:
А также поддержка Google Sanitizers, возможность пересборки отдельного файла и многое другое!

Ниже мы поговорим про улучшения и нововведения подробно, а самые нетерпеливые могут прямо сейчас скачать бесплатную 30-дневную версию с нашего сайта [1] и попробовать новые возможности на своем проекте или специально подготовленном демо-проекте с GitHub [2].
Еще в марте мы рассказали вам, что рассматриваем различные альтернативные варианты языкового движка для CLion. Это и понятно — хочется и принципиально улучшить поддержку текущих языковых возможностей, и быстрее добавлять свежие фишки C++, и писать больше крутых и специфичных для C++ рефакторингов и пр. Для всего этого нужен точный и быстрый парсер кода.
Мы продолжаем улучшать наш текущий парсер, методично вытравливая разнообразные ошибки и недочеты. А в дополнение мы решили попробовать сделать еще один языковой движок на базе clangd [3] (это такая реализация LSP протокола для clang).
Если сразу переходить к результатам — в CLion 2018.2 в дополнение к основному языковому движку работает еще и новый, экспериментальный, на clangd. Мало того, мы так осмелели, что включили его по умолчанию на Linux и macOS. На Windows, к сожалению, обнаружилась неприятная особенность работы clangd с памятью [4], и мы по умолчанию выключили новый движок на этой платформе (но с высокой вероятностью это будет исправлено уже в первых минорных обновлениях на версию 2018.2).
Включить/выключить экспериментальный парсер кода на основе clangd можно в настройках Settings/Preferences | Languages & Frameworks | C/C++ | Clangd:

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

Важно:
В этом релизе мы целенаправленно изводили подвисания IDE (UI freezes) в целом ряде случаев: при автодополнении, в поиске Search Everywhere, в навигации на связанный символ (которая как правило используется для переключения между исходным файлом и заголовочным и обратно), при использовании хлебных крошек (breadcrumbs) для навигации. Первые пользователи релиза, а также многочисленные участники нашей программы раннего доступа (Early Access Program) уже оценили улучшения и подтверждают, что поведение IDE существенно улучшилось, а подвисаний стало значительно меньше. Работа в этом направлении будет продолжена и в 2018.3.
К тому же, мы перевели встроенный форматтер кода на лексер. Конечно, при работе через парсер (как раньше) его результат более точен, но вот время работы значительно увеличивается. А так как форматирование кода в CLion происходит в тот момент, когда вы печатаете код, подвисания тут могут очень негативно отражаться на общем впечатлении о скорости работы IDE. Отзывчивость редактора падает, подвисания становятся заметными и так далее.
Форматтер на лексере работает довольно аккуратно, но если вы все же испытываете проблемы с форматированием на вашем коде, то во-первых, обязательно расскажите об этом нам [6], а во-вторых, вы всегда можете переключиться на более медленный, но и более точный форматтер на парсере — для этого есть опция cidr.indent.lexer.only.cpp в Registry.
До 2018.2 были следующие способы открыть проект в CLion:
К этому списку в 2018.2 мы добавили две новые опции:
Но в обоих случаях, как Gradle, так и compilation database, все умные функции по работе с кодом доступны! И кстати, опция compilation database интересна тем, что фактически теперь какой бы ни был у вас проект — Makefiles, Ninja, Qbs, любая ваша специфическая проектная модель — вы можете сгенерировать compilation database [10] для вашего проекта и открыть его в CLion!
А мы тем временем продолжаем работу над API для добавления поддержки новых проектных моделей в CLion!
Кое-какие важные улучшения были сделаны и для CMake проектов. Самое главное – если ваши заголовочные файлы, расположенные внутри директории вашего проекта, используются в файлах проекта и подключены через директиву #include, их больше не надо явно перечислять в CMake скриптах! CLion теперь сам пометит их как проектные, и все умные функции вроде рефакторингов и автодополнения будут доступны в таких файлах:

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

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

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

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

Данная возможность — отличный способ быстро проверить, что ваши текущие изменения в файле не сломали сборку всего проекта. Если интересны детали, какая именно команда компиляции вызывается и как выбирается тип сборки, можно почитать подробно в нашем блоге [12].
По результатам нашего опроса в Twitter [13], многие пользователи CLion обращаются к тем или иным базам данных при разработке проекта на C/C++. Поэтому с этого релиза в нашу IDE включен плагин для работы с базами данных и кодом на SQL. Он является полным функциональным аналогом нашей среды для работы с базами данных — DataGrip [14]. Так что вот этот пост [15] здесь на Хабре от moscas [16] про нововведения в DataGrip 2018.2 вам тоже может быть интересно почитать.
Коротко о других улучшениях:
Традиционное видео о новых возможностях CLion 2018.2 на английском языке от нашего девелопер-адвоката:
И кстати, до среды, 1 августа 2018, 19:05 по Москве (GMT+3), мы дарим скидку 50% на все продукты JetBrains Toolbox [20].
Вопросы? Будем рады ответить в комментариях!
Ваша команда JetBrains CLion
The Drive to Develop
Автор: anastasiak2512
Источник [21]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/287759
Ссылки в тексте:
[1] с нашего сайта: https://www.jetbrains.com/clion/download/
[2] демо-проекте с GitHub: https://github.com/anastasiak2512/CLion2018_2_Demo
[3] clangd: https://clang.llvm.org/extra/clangd.html
[4] неприятная особенность работы clangd с памятью: https://youtrack.jetbrains.com/issue/CPP-13704
[5] эвристический алгоритм: https://static.googleusercontent.com/media/research.google.com/ru//pubs/archive/46317.pdf
[6] расскажите об этом нам: https://youtrack.jetbrains.com/issues/CPP
[7] Rust плагина в CLion: https://plugins.jetbrains.com/plugin/8182-rust
[8] сторонним плагином: https://plugins.jetbrains.com/plugin/9554-bazel
[9] новый Gradle формат: https://blog.gradle.org/introducing-the-new-cpp-plugins
[10] сгенерировать compilation database: https://sarcasm.github.io/notes/dev/compilation-database.html#how-to-generate-a-json-compilation-database
[11] блог посте: https://blog.jetbrains.com/clion/2018/05/clion-starts-2018-2-eap-sanitizers-gradle-db-performance/#google_sanitizers
[12] в нашем блоге: https://blog.jetbrains.com/clion/2018/05/clion-starts-2018-2-eap-sanitizers-gradle-db-performance/#recompile_single_file
[13] нашего опроса в Twitter: https://twitter.com/clion_ide/status/996694878208839680
[14] DataGrip: https://www.jetbrains.com/datagrip/
[15] пост: https://habr.com/company/JetBrains/blog/418337/
[16] moscas: https://habr.com/users/moscas/
[17] систем контроля версий: https://www.jetbrains.com/idea/whatsnew/#v2018-2-version-control
[18] поддержку MacBook Touch Bar и более темные заголовки окон: https://www.jetbrains.com/idea/whatsnew/#v2018-2-user-interface
[19] иконок в интерфейсе IDE: https://blog.jetbrains.com/blog/2018/06/26/new-icons-in-intellij-platform-2018-2/
[20] мы дарим скидку 50% на все продукты JetBrains Toolbox: https://habr.com/company/JetBrains/blog/418681/
[21] Источник: https://habr.com/post/418729/?utm_campaign=418729
Нажмите здесь для печати.