Как стать автором
Обновить

Комментарии 70

Ребята, вы молодцы, новые фичи классные, чувствуется ззначительное повышение производительности во многих местах. Одна просба: пожалуйста, исправьте уже тормоза при наборе текста в редакторе. В хоть сколько-нибудь серьезном по объему проекте достаточно зажать Enter или Backspace и начинается диафильм.
Ссылка на групповой issue по теме: youtrack.jetbrains.com/issue/CPP-988
Спасибо.
Мы постоянно работает над тем, чтобы улучшить отзывчивость редактора. К сожалению, в этом общем тикете собраны очень разные проблемы. Поэтому в идеале, если хотите именно про ваш случай узнать поточнее, в чем проблема и когда будет исправление, заводите новый и прикладывайте CPU snapshot. Если вдруг он окажется дубликатом существующего — не страшно, мы слинкуем их сами. Просто групповой тикет, вероятно, будет самым долгоживущим)

У меня тоже на некоторых файлах тормоза такие что проще в vim редактировать:
https://youtrack.jetbrains.com/issue/CPP-16887

anastasiak2512 скажите, а почему ключевые слова final и override не подсвечиваются в объявлении метода?
Как мы выяснили, эта такая особенность подсветки через Clang. Мы это поправили, но в релиз и критикал-апдейт не успели положить. Должно быть в следующем апдейте (2019.3.2). Вот тут тикет.
Понятно, ждём апдейта.
А ждать ли поддержки Doctest? Как я понял, в ReSharper C++ уже есть.
Пока не планировали. В ReSharper C++ действительно есть. В CLion пока нет свободных ресурсов для задачи с таким приоритетом (не очень высоким).
К сожалению, пофиксили еще не все. А вот от того конкретного, есть тикет с thread dump-ом?

Да, есть тикет CPP-13493, добавил дамп для последней версии.

Ага, спасибо. Сейчас глянем, что там такое.

Есть еще, к сожалению, тяжелые фризы, которые не просто извести. Но мы их будем тоже исправлять, правда для этого потребуются большие изменения.
А с Resharper C++ как обстоят дела?
Готовимся к релизу 2019.3 вместе с остальным ReSharper Ultimate. Что-то конкретное интересует?
А там будет code completion для концептов?
Прямо такой же как в CLion — пока нет. В ReSharper C++ мы работаем над поддержкой концептов в своем языковом движке. Сейчас в EAP-е можно посмотреть на проверки анализатора кода, find usages, rename и некоторое автодополнение (для имени концепта в основном).
Это плохо
А какой случай кажется наиболее полезным? Мы в целом только начали работу над поддержкой концептов. Просто в ReSharper C++ надо было еще в языковом движке поддержать сначала, а в CLion удалось сэкономить за счет Clang.
Для сложных выражений в static_assert() есть удобный popup, где можно посмотреть, чему равно или какого типа подвыражение, неплохо бы такую же функциональность для концептов. Сейчас там всё ограничивается красным подчёркиванием и фразой concept isn't satisfied.

Ещё интересно автодополнение как в clangd для членов, методов и подтипов.

Ну и, конечно, всё ещё есть не критичный, но существенный процент ошибок вообще, а в выражениях с концептами этот процент значительно выше.

Производительность Resharper C++ удалось подтянуть, по сравнению с ранними версиями. Сейчас, на мой взгляд, она на удовлетворительном уровне.
Мы в ReSharper C++ при ошибках перегрузок пытаемся очень подробно ошибку расписать, чтобы было понятно, какой концепт и почему не удовлетворен. Можно поиграться на EAP-ах или уже дождаться релиза (уже вот-вот!). В CLion мы берем эти ошибки просто из Clang. Они довольно «говорящие», но бывают не очень.
Перегрузки да, там перечисляются кандидаты, и почему каждый не подошёл. А я имею ввиду вот что:
#include <string>
#include <concepts>

template <typename T>
concept int_addable = 
   std::integral<T> &&
   requires (T const &t) { { t + t } -> T; }
;

template <int_addable T>
void foo(T &t) {}

int main()
{
  foo(std::string{});   
}


хотелось бы сообщения:

 concept int_addable isn't satisfied for function foo() // это есть
because the clause std::integral<T> isn't satisfied for type std::basic_string<char, std::char_traits<char>> // а этого нет

Да, понятно, хороший кейс. Спасибо.
Создал issue.
Если вы знаете какие-то примеры ошибок вообще и с концептами в частности, сообщайте нам, пожалуйста, о них. Исправление красного кода для нас (ReSharper C++) приоритет номер один.
Мне, честно говоря, показалось, что такие ошибки вы правите по остаточному принципу. Ок, я буду интенсивнее открывать тикеты.
Да, а вот ещё хотел спросить. Поддержка модулей планируется, и если да, то когда её ориентировочно ждать?
А что входит в поддержку модулей в вашем понимании? В CLion вообще с Clang подсветка, автодополнение и пр. из коробки будет работать вероятно.
Для немодифицированных файлов доступно готовое AST, что должно повысить скорость парсинга на порядок, определение циклических импортов.
Но даже самая начальная поддержка должна обрабатывать директивы module, import, export.
Хм, а можно очень тупой вопрос?
Давно хотел попробовать CLion, но так как основное моё занятие — embedded, то повода как-то не было.
Недавно начал ковырять современные плюсы(сейчас хочется врезать себе за многолетнее сидение на чистом Си) и начал пытаться участвовать в opensource.
Я правильно понимаю, что если проект использует Cmake — я смогу его запускать и отлаживать?
Да, CLion поддерживает CMake как нативную проектную модель. Можно открывать, запускать, отлаживать такие проекты. Также поддержан Gradle для C++ и compilation database, если создать custom build targets & custom run/debug configuration. То есть в целом, через compilation database можно любую проектную модель открыть.

Да можно, единственное, нормально поддерживается только GCC, причём не все версии, остальные немного кривовато поддерживаются или вообще не поддерживаются. Жду поддержку IAR нормальную.
Отладка через GDB работает не плохо, но если отладчик какой то китайский, то будьте готовы много и долго настраивать конфигурацию для него.


Ну т. е. если только CMake хотите для какого-то неизвестного тулчейна, то не все так просто. Работать будет, но не все.

Используем разные gcc с 4 по 9, свои тулчейны, расскажите пожалуйста, что не должно работать?

У меня как раз GCC, проект десктопный.
Вчера попробовал — указал путь к проекту, завелось с полпинка.
В общем, пока очень нравится. Проект большой(Kicad), но работает довольно шустро.
И такой вопрос — изучил варианты лицензирования, как понимаю, после 30 дней — только покупать? Так как, вроде, я не core developer и, увы, уже не студент.
Да, после 30 дней бесплатной триальной версии вам понадобится лицензия. Можно платить за год, можно по месяцам (если не часто будете использовать, это выгоднее). После непрерывного года оплаты, у вас появляется пожизненная лицензия на ту версию, с которой вы год начали (+баг фикс апдейты на нее). Есть еще бесплатные лицензии на опер сорс. Полный список всяких скидок и пр. можно здесь глянуть.
НЛО прилетело и опубликовало эту надпись здесь
Кажется, что баг, причем платорфменный. Попробуйте завести с подробным описанием, а мы посмотрим и поищем дубликат, если что.

Сижу ещё с eap, стало намного лучше. Хотелось бы, чтобы при rename запоминались места поиска, вроде last opened files.

Не очень пока поняла, поясните подробнее? Вызываете Rename в каком-то месте, есть несколько использований символа, они все переименовываются. Что значит запоминалось место поиска в этом случае?
При вызове диалога Rename есть возможность выбрать Scope: All Places, Project Files, Project Source Files и так далее. Выбор не запоминается, то есть, при следующем вызове Rename приходится опять выбирать нужный Scope. Хочется, чтобы выбор сохранялся между вызовами Rename, так как кодовая база очень большая, и даже при отключении поиска в тексте и комментариях, Rename работает очень долго, если не указать более узкий Scope.
Все, поняла, спасибо. Это, кажется, баг.
Обновился на свою голову, сразу же обнаружил, что работа с вкладками происходит теперь по другому. Раньше, при двух вертикальных вкладках, новый файл из Shift+Shift поиска или Ctrl+Tab селектора открывался в текущей активной вкладке, теперь же есть какая-то история, и если файлы был открыт ранее справа — то он упорно открывается справа. И никак не открыть файл одновременно в двух вкладках. В настройках таб ничего такого нет. Ну вот зачем такие поведенческие вещи менять без возможности вернуть обратно по явной галочке в настройках? Пришлось откатываться, и даже не знаю что теперь делать с дальнейшими обновлениями. Может быть есть ли возможность гибко настраивать такие вещи через конфиг файл?
Я правильно понимаю, что вы сделали Split Vertically и хотите, чтобы файл из Search Everywhere открывался в активной половине, даже если открыт в другой? У меня вот сейчас именно так все и работает. Поэтому уточняю.
Да, абсолютно верно.
И еще из Ctrl+Tab селектора.
Пример:
1. В двух вертикальных вкладках открыты два разных файла.
2. Я переключаюсь из одной вкладки на другую и один раз выполняю Ctrl+Tab
3. Результат — в обоих табах открыт один и тот же файл.
После обновления вместо открытия одного и того же файла в двух вкладках я получаю автоматическое переключение фокуса на предыдущую вкладку.
да, спасибо, обсудили с коллегами — действительно есть такая проблема, уже починена, попадет в апдейт.
Тикет тут
а ваши приборы не показывали часом увеличение потребления оперативной памяти?
Существенных изменений не видим, хотя, конечно, чем более точный парсинг, тем больше может памяти занимать.

Если вы видите какую-то конкретную проблему, то включите memory indicator в IDE и последите за ним, если слишком много или кажется, что память слишком быстро заканчивается, то пишите нам в саппорт — будем разбираться.
Сделайте наконец нормальную возможность работы с ардуинами и прочими микроконтроллерами. Честное слово, только с вашим подходом и вашими приложениями это будет лучшим предложением на рынке
Мы в процессе) А что такое «номальная возможность работы» можно поподробнее? Чтобы знать, чего конкретно вам не хватает.
Вау, это очень здорово! Жду с нетерпением!
Под нормальной возможностью подразумевалось что-то подобное существующим проектам (Arduino IDE, Platform IO), когда нужные библиотеки и платы можно подгружать на ходу. Выбирать компиляторы, отправлять на устройства и т.д.
Существующие решения уж очень неприятны. В ArduinoIDE вообще отвратительно с кодом работать, а PlatformIO уж очень сырая, настолько, что ее порой перезапускать приходится, чтоб она восстановилась.
В PlatformIO фреймворке есть интеграция с CLion. Вот ее начальное состояние. А вот тут новый плагин, пока экспериментальный, в фазе тестирования.
PlatformIO имеет возможность косо-криво, но интегрироваться с CLion
Спасибо за релиз. Есть чему порадоваться. Но в то же время после обновления вкрай испортилась кодогенерация. IDE предлагает какие угодно варианты подсказок, только не связанные с проектом. Подскажите пожалуйста как это исправить
Лучше более конкретно проблему описать и с примером. Так сложно что-то сказать.
Ну CLion «предугадывает», что я хочу написать. Если раньше в начале списка подсказок были названия контейнеров/ имена объектов из проекта, а недавно использованные имена поднимались вверх этого списка, то сейчас вверху то, что к проекту отношения не имеет.
Например в проекте есть переменная с именем «calc» когда я начинаю печатать, то сначала IDE предлагает calloc(), clock(), еще много чего, что я даже не инклюдил(calc будет где-то в середине списка), и только ближе к концу ввода имя нужной переменной/ класса. Кстати недавно использованные имена теперь в этом списке вверх не поднимаются.
Проблема появилась после обновления.
Спасибо за фидбэк, мы попробуем разобраться с проблемой. В основном она вызвана тем, что мы объединяем подсказки из двух движков, которые по разному работают с приоритетами. Пока вы можете отключить clangd completion (Language and Frameworks -> C/C++ -> Clangd -> Use code completions from clangd).
Ссылка на тикет по улучшению приоритетов элементов — youtrack.jetbrains.com/issue/CPP-18448
Эх… Пока нет полноценной поддержки Makefiles, придется ковылять на VSCode :(
Ну, пока что можно в полуавтоматическом режиме через compilation database. Нативная поддержка, надеемся, будет готова к 2020.1

Браво! Действительно крутые фичи.
Но когда ждать ждать поддержку дебага под MSVC?

Так есть уже экспериментальный отладчик на базе LLDB для MSVC с прошлого релиза! Вот тут описано, как его включить.

Мы с командой ужасно недовольно быстродействием отладчика. К 10-секундным ожиданиям подгрузки переменной я как-то привык (шучу — не привык, бесит ужасно), но то, что дебаг сессия иногда вообще отваливается из-за доолгого ожидания, это уже перебор. Вы делаете что-нибудь в этом направлении?

Мы, конечно, анализируем скорость отладчика. Но давайте начнем с того, сабмитили ли вы нам логи на конкретно ваш кейс? Вот так их надо собрать intellij-support.jetbrains.com/hc/en-us/articles/206560589-What-to-do-if-debugger-doesn-t-work-as-expected- Так будет проще понять, что именно у вас за проблема и какой естимейт на починку.
Спрошу здесь:
1) Подскажите как включить подсветку синтаксиса (просто базовую) Groovy (ну или чего похожего). У меня в корне проекта Jenkinsfile и править его хочется прям в Clion. Пробовал указать что это например JavaScript, но он ошибками разукрашивает так что становиться не читабельно.
2) В CentOS 7 ( Mate) если переключить на другое окно (например браузер), а затем нажать мышкой на панели (чтоб переключить обратно в Clion) то не разворачивается, приходиться нажать свернуть браузер.
3) Deployment по SFTP: все настроил, коннектится. В Mappings добавил 2 папки, в них складываются готовые бинарники (bin и lib), установил галочку Automatic Upload. Так вот при перекомпиляции новые бинарники не заливаются автоматом на сервер, приходиться на каждом мышкой: Upload to . Если же удалить бинарник, то он автоматом удаляется и с сервера.

Либо со мной что не так, либо лыжи не едут.

И еще:
Планируется ли «настоящая» удаленная разработка? как бы по системе клиент-сервер, чтобы парсер исходников работал на удаленной машине (и ресурсы на это потреблялись только там), а на клиенте только отображение. Проект большой и если подмонтировать по ssh папку и канал не очень, то это ужасные тормоза. Собирать проект локально — нужно локальную машину хорошую с нужной архитектурой, что не всегда возможно (напр для POWER8+).
То, что вы описываете, похоже на вот этот запрос. Можно повоутить.

А про «настоящую удаленную разработку», когда-нибудь наверное планируем, но не в самое ближайшее время. Сейчас вариант удаленной разработки — это локальный парсинг, а сборка/запуск/отладка — на удаленной машине. Тонкий клиент, который только UI фактически, это возможно теоретически и в эту сторону будем обязательно думать.
В этом релизе также появились настройки CMake по умолчанию.

На скриншотах мы видим поле ввода "CMake options:". Сделайте настройки параметров как это реализовали Qt Creator и cmake-gui. Да, при таком подходе получится взять реестр настроек у CMake только после его первого прохода. Но, для грамотно составленных CMakeLists.txt вполне возможно для редактирования полей использовать делегаты, к примеру для типа FILEPATH использовать диалог открытия файла, для PATH — директории; для значений типа BOOL использовать чек-боксы; для трюка с перечислениями — предоставлять выпадающие списки; для остального — поле ввода значения. Причём, есть возможность выводить и подсказку, что это за свойство и для чего оно нужно (это всё выполняется соглашениями в CMake и будет работать как минимум в cmake-gui и QtC):


CMake options screenshot


Примеры настроек (реальные имена удалил, NDA):


CMake options sample
##
## Options set, to keep different settings for different build configurations at the same time
##
#set(BOARD_MODEL     A1                         CACHE STRING   "Board model")
#set(LINUX_CONFIG    a1_defconfig               CACHE FILEPATH "Specify Linux building config for some projects")
#set(FACTORY_BUILD   Off                        CACHE BOOL     "Building factory firmware")
#set(USE_LINUX       Off                        CACHE BOOL     "Use Linux for project")
#set(BYPASS_TOOLCHAIN_CHECK Off                 CACHE BOOL     "Do not check toolchain for give SOC/RELEASE")
#set(VERBOSE         Off                        CACHE BOOL     "Enable verbose building")

# Now, BOARD_MODEL is ENUM ;-)
# Possible values for BOARD_MODEL in more-less Human-readable form.
#set_property(CACHE BOARD_MODEL PROPERTY STRINGS
#    A1
#    A2
#    B33
#    B34)

Remote GDB Server.
GDB Remote Debug

Слушайте, а не хотите посмотреть как у конкурентов сделано? Я опять про QtC. Кастомными шагами деплоя и грамотным набором подстановочных значений можно многого добиться. На снимке ниже, загружается код драйвера на тестовую машину, в зависимости от выбранного таргета на запуск собирается или PCIe или USB драйвер и производится его загрузка:


Deployment configuration


Да в этом примере нет удалённого отладчика, но не вижу проблем и kdbg прикрутить (пока потребности не было). Плюс в пару (точнее — три) кликов можно переключить, на какой "сервер" грузить код:


Deployment target selection


Да, у меня деплой сейчас выполнен одним скриптом. Изначально всё было отдельными шагами в самом QtC. Но потом потребовалось переносить между машинами, плюс захотелось подобную процедуру из консоли выполнять… В общем — унифицированный скрипт оказался удобнее.

Мы, конечно, смотрим, как сделано в других IDE. И попробовали уже несколько разных вариантов с CMake настройками.

Настройки CMake Profiles сделаны сейчас в виде диалога, но их можно менять и в CMakeCache напрямую (раньше был некий UI, потом нас попросили вернуть редактирование кеша как файла). Диалог имеет приоритет над кешом. В принципе, есть план в будущем сделать и какой-то GUI редактор кеша.

Кастомные шаги в Run/Debug конфигурациях сделать можно и сейчас. Там можно любой external tool вызвать на таком шаге. Наверное, можно каких-то предконфигурированных шагов тоже туда забить. Наверное, можно завести реквест в трекере и делиться там своими такими хотелками, мы посмотрим, какие шаги самые популярные и сделаем pre-config для них.

Сейчас там такой список:
image

Вообще сейчас команда уже довольно давно обсуждает переделки в районе Toolchains / CMake profiles. Скоро должно стать более гибко и удобно.
Имхо, очень неудобный folding сделали. Теперь collapse all сворачивает все блоки { } внутри функций, хотя функция — это обычно минимальный scope, который удобно держать перед глазами в развёрнутом виде.
Унифицировали с платформой поведение. Но изменения под ключом в регистре — можно вернуть, как было, если выставить в Registry: cidr.enable.show.block.folding в false.
Кто-нибудь сталкивался с внезапным исчезновением подсветки синтаксиса? Я поискал по багтрекеру, и ничего не нашёл. Проблему тяжело воспроизвести, но вроде помогает смена цветовой схемы подсветки.

Давайте попробуем посмотреть на логи IDE в момент, когда это произошло. Пришли к их в саппорт вместе с подробным описанием, что происходило в момент проблемы. Спасибо

Зарегистрируйтесь на Хабре, чтобы оставить комментарий