Финальный релиз этого года — CLion 2020.3! С новыми функциями в отладчике, проверками MISRA и улучшениями для Qt +12


AliExpress RU&CIS

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

Год подходит к концу, и мы в JetBrains выпускаем традиционный «паровоз» релизов для наших десктопных инструментов. Про некоторые из них (WebStorm, DataGrip) мы уже писали тут на Хабре. А сегодня пришло время рассказать про обновление нашей кроссплатформенной среды разработки на C и C++ — CLion 2020.3!

CLion 2020.3 release

Коротко о самом главном:

  • В отладчике появились возможности исследовать дампы памяти и запускать конфигурацию с привилегиями администратора. А еще теперь можно перемещать точку исполнения по коду в любом направлении прямо во время сеанса отладки.
  • Для модульного тестирования мы добавили поддержку CTest — инструмента запуска тестов, идущего в комплекте с проектной моделью CMake.
  • Для проектов на Qt добавлены шаблоны для создания новых Qt-проектов и новых классов UI, функция автодополнения адаптирована для работы с сигналами и слотами, а автоимпорт следует принятому в Qt стилю.
  • Существенно расширилось множество проектов, использующих Makefile, которые можно успешно открывать в CLion. А для проектов CMake появилась возможность отключать временно неиспользуемые профили CMake.
  • Для разработчиков встроенных систем мы включили начальную поддержку стандартов MISRA C 2012 и MISRA C ++ 2008.
  • А также множество других улучшений для конфигураций запуска и отладки, в поддержке систем контроля версий и для режима удаленной разработки. Разнообразные приятные улучшения в UI. И… долгожданное превью нового сервиса для совместной разработки и парного программирования.

Новую версию можно скачать с сайта и попробовать бесплатно в течение 30 дней.Если у вас есть активная подписка на CLion или All Products Pack, просто обновите версию на 2020.3. Напоминаем, что при покупке годовой подписки на любой продукт предоставляется резервная бессрочная лицензия.

А теперь поговорим о нововведениях и улучшения версии 2020.3 подробнее.

Отладчик


Релиз 2020.3 стал большой вехой в развитии интеграций с отладчиками в CLion. И это неспроста, ведь эту интеграцию использует не один, а сразу несколько продуктов компании! CLion, плагин IntelliJ Rust и раннее превью среды для разработки игр Rider for Unreal Engine. Совместными усилиями мы смогли реализовать много важных новых возможностей в отладчике.

Отладка с дампами памяти


Процесс завершился нештатно, проще говоря, упал, оставив после себя дамп памяти? Новое действие Run | Open Core Dump, доступное для Linux и macOS, позволит открыть дамп памяти упавшего процесса в CLion для дальнейшей отладки:

Open Core Dump

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

Диалог умеет показывать список уже созданных конфигураций. Конфигурации также можно создавать вручную из меню Run | Edit Configurations. Во время отладки с дампом памяти можно анализировать информацию о фреймах, изучать значения переменных, просматривать состояние памяти и код на ассемблере, вычислять выражения и запускать команды из консоли отладчика. При этом, по понятным причинам, отключена пошаговая отладка и недоступно окно вывода процесса.

Debug Core Dump

Из текущих ограничений, помимо недоступности новой функции на платформе Windows, стоит еще отметить, что в случае LLDB пока что не используется файл с отладочными символами. А возможности отладки дампов, собранных на другой машине, и удаленная отладка дампов сильно ограничены (CPP-22736, CPP-22656).

Запуск и отладка с привилегиями администратора


В конфигурациях запуска и отладки с этого релиза появился новый флажок — запускать конфигурацию с привилегиями администратора. Настройка поддержана для многих типов конфигураций: CMake, Makefile, Gradle Native, Custom Build, CTest.

Чтобы использовать новую возможность было удобнее на практике, мы написали специальный демон, который предлагает вам оставаться авторизованным от имени администратора при запуске таких конфигураций в течение выбранного периода времени:

Elevation Settings

Подробнее о работе этой новой возможности читайте здесь (на английском).

Установка точки исполнения


Пользователи Visual Studio могут быть знакомы с такой полезной возможностью, как изменение точки исполнения во время сеанса отладки. Для всех остальных: представьте, что вы хотите пропустить исполнение целого цикла, поменять ветку условного оператора, вернуться на несколько шагов назад в потоке исполнения программы прямо во время сеанса отладки. Теперь для этого в CLion есть новое действие Set Execution Point to Cursor, или можно вручную переставлять желтую стрелочку на нужную строку прямо в редакторе:

Set Execution Point

Оговоримся, что подобное действие может сломать программу (например, если вы пропустите команду инициализации переменной). Но при умелом использовании, оно позволит вам отлаживать приложение очень эффективно.

Интерактивные подсказки


Практически во всех наших IDE на основе платформы IntelliJ в версии 2020.3 появились интерактивные подсказки и встроенные watches. Еще до 2020.3 во время сеанса отладки вы могли видеть значения переменных прямо в редакторе. Теперь эти подсказки стали интерактивными — переменную можно раскрыть и посмотреть значение всех ее полей:

Interactive hints

А еще можно добавить произвольное выражение для подсчета и просмотра прямо в редакторе (рядом с нужной строкой кода). Это оказывается удобнее обычных watches (которые постоянно показываются в окне отладчика) тогда, когда используемые в выражении переменные имеют смысл только в конкретном месте кода (например, локальные переменные).

Хотите увидеть новые возможности в действии? Попробуйте сами или посмотрите это видео от нашего девелопер-адвоката:


Модульное тестирование


Что касается фреймворков для модульного тестирования, CLion поддерживает Google Test, Catch(2), Boost.Test и doctest. По результатам нашего исследования экосистемы разработки 2020 года 31% C++-разработчиков используют Google Test. Поэтому мы потратили время, чтобы улучшить представление результатов запуска Google Test в CLion:

  • Научились строить дерево тестов сразу, еще до выполнения всех тестов.
  • Начали отображать значения параметров тестов (для параметризованных тестов).
  • Ввели специальный значок для пометки отключенных (DISABLED) тестов в дереве.
  • А главное, существенно ускорили процесс поиска тестов в проекте.

GT run

Наши пользователи (в частности, здесь на Хабре) активно просили добавить поддержку CTest — инструмента запуска тестов, идущего в комплекте с проектной моделью CMake. Это было не очень просто, так как CTest — это сам по себе инструмент запуска, а не очередной фреймворк, и поэтому в существующий API укладывался плохо. Но мы наконец сделали это! CLion теперь автоматически находит тесты CTest в проекте, создает для них конфигурации запуска и отладки, строит дерево с отображением результатов тестов. Вы даже можете отлаживать тесты — при этом CLion запустит именно тест, а не процесс ctest.

Что касается ограничений, стоит отметить, что CLion поддерживает версии CTest 3.14 и выше. К тому же, если в качестве теста CTest запускается блок тестов из уже поддерживаемого фреймворка (Google Test, Catch(2), Boost.Test и doctest), такой блок будет иметь одну запись в дереве результатов (то есть соответствовать одному тесту).

Традиционное видео от Фила Нэша, посвященное улучшениям для модульного тестирования:


Проекты Qt


Мы видим, что в CLion часто пишут проекты с использованием фреймворка Qt. И, хотя делать свой дизайнер интерфейсов или поддерживать проектную модель qmake мы пока не планируем, кое-что для улучшения пользовательского опыта в CLion в этом направлении мы все же решили сделать.

Шаблоны проектов и классов UI


Диалог создания нового проекта теперь предлагает два новых типа — Qt Console Executable и Qt Widgets Executable:

New Qt project

Указываете необходимые значения — CLion создает стартовый CMake-проект выбранного типа, и вот уже простейший виджет или консольное приложение у вас в кармане! Кстати, говоря о CMake и Qt, Qt6 предлагает устанавливать некоторые библиотеки через Conan (у CLion также есть соответствующий плагин) и собирать их через CMake и Ninja. Чем не повод попробовать CLion для разработки с использованием Qt?

Кстати, при добавлении нового класса Qt UI, CLion умеет создавать сразу три файла (.ui и файлы класса). Для этого выберите действие QT UI Class в меню добавления нового файла.

Работа с кодом Qt


Код Qt — это, в целом, обычный код на C++, но есть и свои особенности. Так, в Qt принят определенный стиль импортов заголовочных файлов. Например, можно корректно включить QtCore/qurl.h, но будет более правильным использовать QUrl. Стиль теперь поддержан при автоимпорте в CLion:

Qt autoimport

Функция дополнения кода теперь понимает, когда необходимо предлагать варианты только сигналов или только слотов для основных сущностей Qt:

Qt completion

Это удобно, так как в выпадающем списке показываются только подходящие по смыслу варианты, а не все те, которые совпадают по набранным символам.

А какой возможности для Qt лично вам не хватает в CLion? Пишите в комментариях!

Проектные модели в CLion


Мы постепенно включаем в CLion поддержку все большего числа видов проектов с использованием Makefile (список протестированных проектов мы ведем тут). В релизе 2020.3 мы поддержали проекты, которые использую инструменты ccache, libtool, dolt, slibtool и jlibtool. Это проекты ZFS, PHP, Mono, Curl и другие. Конфигурации запуска и отладки для целей из файла Makefile верхнего уровня создаются автоматически. Кроме того, для проектов Makefile появилась возможность перекомпиляции отдельного файла без необходимости пересобирать весь проект (в раскладке по умолчанию — Ctrl+Shift+F9 на Windows/Linux и ??F9 на macOS).

Для проектов CMake теперь можно отключить временно неиспользуемые профили CMake. Это особенно полезно, если в проекте настроено сразу несколько профилей для удаленной разработки (часть из них может быть временно отключена) или для разнообразных тулчейнов (тоже не всегда используемых все вместе). При отключении таких профилей время загрузки проекта заметно сокращается. Раньше для этого профили надо было удалять, а теперь вы просто можете их выключить. Сделать это можно из настроек профилей в Settings/Preferences | Build, Execution, Deployment | CMake либо из диалога загрузки CMake:

Disable/enable CMake profiles

Чтобы узнать подробнее об улучшениях для проектов на Qt и в проектных моделях, смотрите выступление нашего девелопера-адвоката.

Стандарты MISRA


Среди наших клиентов много разработчиков встроенных систем и представителей автомобильной отрасли. Для них важной частью процесса разработки является сертификация кода по стандартам MISRA. С самой сертификацией помочь мы пока не можем, а вот указать на возможные несоответствия стандартам MISRA на раннем этапе разработки нам вполне по силам! В версии CLion 2020.3 мы начали добавлять проверки стандартов MISRA C 2012 и MISRA C++ 2008 во встроенный статический анализатор кода:

MISRA checks

Поддержано еще не все; полный список можно найти на этой странице. Настроить инспекции довольно просто:

MISRA settings

В будущем мы добавим больше проверок MISRA. Возможно, также появятся проверки AUTOSAR.

Code With Me — новый инструмент для совместной разработки


Практикует ли ваша команда парное программирование? Как насчет инструмента для совместного изучения кода? Совсем недавно мы запустили программу раннего доступа для нашего нового инструмента совместной разработки — Code With Me. По сути, это плагин, доступный почти для всех наших десктопных IDE (пока что за исключением JetBrains Rider и DataGrip). С помощью него вы и ваша команда можете совместно работать над проектами прямо из своих IDE. Чтобы попробовать Code With Me, установите плагин в Preferences / Settings | Plugins.

Code With Me

Подробнее о возможностях плагина можно почитать в этих блог-постах. Code With Me все еще в стадии активной разработки. Если вы столкнетесь с какими-либо проблемами при его использовании, пожалуйста, сообщите нам об этом тут.

И многое другое


Из других важных улучшений хочется отметить:

  • Теперь, чтобы настроить окружение, в котором будет запускаться конфигурация запуска/отладки, можно использовать скрипт. К тому же, редактировать конфигурации запуска/отладки теперь можно прямо во время индексирования проекта.
  • Мы расширили возможности автодополнения сниппетами Clang. Они помогут поправить не только ключевые слова, но и синтаксис целых выражений:

    Clang snippets
  • Цветовую схему CLion теперь можно синхронизировать с темой вашей операционной системы. Чтобы включить эту возможность, зайдите в меню Settings / Preferences | Appearance & Behavior | Appearance и выберите опцию Sync with OS.
  • Чтобы разделить окно на несколько частей и иметь перед глазами сразу несколько открытых вкладок, теперь можно использовать простейшее перетаскивание файлов (Drag&Drop). То же самое можно сделать при помощи действия Open in Right Split, выбрав нужные файлы в окне Project, Recent Files или Search Everywhere.
  • В интеграции с системой контроля версий появилась поддержка Git-стейджинга. Меню VCS теперь учитывает то, какую VCS вы используете в проекте (например, Git). А в диалоге Search Everywhere появилась вкладка Git. Теперь там можно искать хэши, сообщения коммита, теги и ветки.

На этом у нас все. Мы рады, что вы дочитали до конца. Спасибо за внимание! Оставляйте свои вопросы, мысли и предложения в комментариях — нам интересно, что вы думаете, и мы всегда рады помочь!

Команда CLion
The Drive to Develop




Комментарии (37):

  1. tendium
    /#22397088

    Интересно, у нового CLion такая же проблема, как и у PhpStorm с Goland'ом? А именно — после апгрейда слетают настройки цветовой схемы и шрифтов.

    • anastasiak2512
      /#22397092

      С одной стороны, звучит как платформенная проблема. С другой, за прошедшие пол недели с релиза что-то не припомню таких жалоб. Расскажите обязательно, если у вас в CLion воспроизведется!

      • ghostinushanka
        /#22397176

        tendium
        У вас случаем не x86_64 10.15+ макось с автоматическим переключением день/ночь? Тожесамое.

        • anastasiak2512
          /#22397182

          Мы несколько раз встречали ситуацию, когда потеря настроек происходила из-за Settings Sync плагина, когда плагин не мог залогиниться. Что-то вроде такого.

        • tendium
          /#22397946

          Не, у меня это случилось на маке и на винде, но автопереключения у меня нет. У меня своя кастомная тема и свои шрифты. Всё слетело и там, и там. К счастью, тема осталась на месте — пришлось возвращать.


          P.S. Синхронизация выключена, так как у меня разные настройки на разных девайсах.

          • anastasiak2512
            /#22399528

            Заведите, пожалуйста, тикет в трекере и приложите логи IDE. Ну и настройки экспортом, чтобы мы попробовали воспроизвести.

      • dr_di
        /#22399530

        То же самое на Ubuntu 18.04. Слетело после обновления GoLand'а.

        • anastasiak2512
          /#22399536

          А тикет заводили?

          • dr_di
            /#22400132

            Нет. А нужно? Я просто обратно нужный шрифт поставил :).

            • anastasiak2512
              /#22400270

              Лишний раз беспокоить, конечно, не хочется) Хотя и интересно разобраться все же, что именно случилось.

  2. panter_dsd
    /#22397136

    Когда уже добавите в отладчик просмотр данных в Qt типах? Очень не хватает этого. И таска на счет этого у вас уже ой как долго висит…

    • anastasiak2512
      /#22397154

      Мы не планируем писать рендеры Qt самостоятельно. А те, что поставляются с фреймворком, защищены лицензией. Но если они есть у вас на машине, то можете просто передать их отладчику через gdbinit/lldbinit — это работает для конфигов как в домашней директории, так и в директории проекта.


      Таска на этот счет скорее всего будет под собой включать только какую-то помощь с поиском этих рендеров на пользовательской машине и упрощение процедуры подключения рендеров (чтобы руками в конфиги не писать).

  3. storoj
    /#22397150

    Всё замечательно, но тормозит неимоверно, невозможно печатать. А если вырезать в буфер обмена какую-нибудь функцию, то всё может и вообще повиснуть на несколько секунд. Ну нельзя так жить.


    И только не надо рассказывать про "увеличьте Xmx, отправьте дампы CPU, бла-бла-бла". Это всё повторяется из года в год, работать невозможно.

    • storoj
      /#22397158

      Но спасибо за то, что я худо-бедно, но наконец начал пользоваться vim+lsp

    • anastasiak2512
      /#22397170

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


      • переписываем многие тяжелые операции (требующие резолва в C++) по возможности на другой языковой движок, на базе Clang, который работает как демон
      • в 2020.2 перенесли на Clang-движок свой самый тяжелый анализ — Data Flow Analysis, что сильно улучшило его производительность
      • в 2020.3 переписали процедуру поиска юнит тестов в проекте, что существенно улучшило отзывчивость на проектах с Google Test.
      • стараемся на каждый релиз исправлять разнообразные подвисания UI

      К сожалению, проблемы еще остаются. Они связаны с архитектурными решениями платформы, не слишком подходящими для C++. Для их правки у нас тоже есть идеи и внутренние прототипы. Но быстро мы их осуществить не можем, требуется время.


      CPU снэпшоты и дампы от подвисаний просим у пользователей всегда, чтобы проверить, мало ли это еще какая-то проблема, о которой мы не знаем, но, например, ее можно поправить. При этом, зачастую одни и те же симптомы в разных версиях IDE имеют разные причины. Дампы тоже полезны в таких ситуациях. Так что присылайте – мы обязательно посмотрим!


      Надеемся на понимание. И приносим извинения за несоответствие ожиданиям.

    • GreySS
      /#22397338

      Подтверждаю, тоже самое. Очень часто, просто на ровном месте, зависает и необходимо ждать сек 20-30, чтобы все прогрузилось. А если окно долгое время было свернуто (несколько часов), то при разворачивании 100% будет глючить. Сам редактор очень удобный, не хочется уходить.

      • anastasiak2512
        /#22397342

        Если происходит подвисание UI, то IDE автоматически собирает thread dump и сохраняет их в директорию с логами. Пришлите их в нашу поддержку (clion-support@jetbrains.com), мы посмотрим в чем дело конкретно в вашем случае и постараемся помочь.

    • yeswolf
      /#22404086

      Да не надо собирать дампы, это все я виноват — я говорил, что соберу после разговора с тобой, но руки не дошли. Но я все-таки соберу.

  4. Artifeks
    /#22397178

    Небольшое имхо, возможно я совсем не прав. На сколько я помню то в clion используется clang code model, которая парсит код и позволяет делать переходы между определениями, реализациями и т.п. и вот она очень долго это делает, может стоит написать некоторые свои более легкие парсеры, которые будут выполнять необходимый минимум за минимум времени, пока тяжелые функции будут в фоне делать свое дело? ну и отвязать это от UI? Повторюсь что я могу быть совсем не прав, clion пользовался мало, но поведение было очень похоже на то когда QtCreator тоже переехал со своего более быстрого парсера на clang code model(clang code model еще любит и позависать).
    P.S. для Qt теперь поддерживаются QML файлы из коробки?
    P.P.S Мои поздравления с релизом!

    • anastasiak2512
      /#22397196

      Спасибо за поздравления.


      CLion использует два языковых движка — свой более старый на Java/Kotlin, который отвечает за все кросс-проектные действия (такие как рефакторинги) и новый на базе Clangd, на который мы пытаемся перетаскивать те действия, которые возможно. На Clang пока нельзя написать индекс, который позволит делать на нем рефакторинги всего проекта, но штуки вроде подсветки, показа ошибок, автодополнения — вполне можно. К тому же, мы стали на Clang писать новые фичи, вроде parameter hints, которые показывают имена параметров в вызовах функции. С точки зрения производительности, пока явного лидера нет, просто потому что функционал не одинаков. При этом Clang вполне может работать и быстрее, и медленнее, зависит от ситуации. С зависаниями же его справляться проще — это отдельный процесс (мы используем не libclang, как Qt Creator, а Clangd, демон) и потом его можно просто перезапускать.


      QML из коробки не поддерживается. Пока. Есть плагин, но он довольно сырой и не официальный. Возможно, чуть попозже мы возьмемся сами за эту задачку, но пока есть более приоритетные.

      • Artifeks
        /#22398916

        Спасибо за подробное разъяснение. А Qml плагин там очень плох, грубо говоря просто добавляет расширение которое можно открыть.

    • storoj
      /#22397334

      с удивлением обнаружил, что vim с плагином для lsp просто летает. мгновенно прыгает к определениям, находит usages, переименовывает символы, показывает диагностики. всё работает очень быстро, ничего никогда не зависает. а clion в том же проекте совершенно неюзабелен, редактор кода абсолютно неотзывчивый.


      попробуйте vim или какой-нибудь другой редактор с поддержкой lsp, возможно приятно удивитесь

      • raiSadam
        /#22397902

        Здорово, что у вас получилось подружиться с редактором текста, как с IDE, но все же IDE — это не только ценный мех редактор текста, а еще и комбайн дополнительных утилит, таких как поддержка юнит-тестов, интеграция с профилировщиками и санитайзирами, интеграции с таск-менеджерами и т.д.. Безусловно настроенный vim и/или emacs будет быстрее работать с текстом(кодом), но проблема тут в слове «настроенный». Для личных нужд проблем нет, настроил, сохранил и забыл, а вот в командной разработке — это дополнительный издержки на «вхождение» в проект их хочется избежать, зачастую IDE решает этот вопрос, особенно если IDE кросс-платформенная.

        • storoj
          /#22399410

          Как мне кажется, полезность всех этих фич умножается на ноль, если в IDE невозможно печатать текст из-за постоянных зависаний и задержек. Нажимаешь точку – ждёшь, вставил или вырезал кусок кода – ждёшь.


          Всё-таки центральная функция IDE – это именно редактирование кода проекта. Если с редактированием есть какие-то проблемы – на мой взгляд их решение должно иметь самый высшайший приоритет, и никакие интеграции с тестами и таск-трекерами никого не спасут.

          • anastasiak2512
            /#22399568

            Я кстати с Вами полностью согласна. Крутая машина с кучей функций — это хорошо, но при условии, что она едет) Именно поэтому отзывчивость и производительность для нас приоритетнее многих новых фич, хотя их активно от нас просят пользователи.


            Возвращаясь к конкретным проблемам, а вы репортили нам дампы от подвисаний? Если да, можете указать на конкретные задачи или может вы в саппорт обращались?

      • Artifeks
        /#22398922

        ну я скорее описал ощущение от работы с сlion, а так как я работаю с Qt, то на данный момент мой выбор только QtCreator, vim мне не подойдет, но спасибо за совет.

  5. vt4a2h
    /#22398528

    Пользуюсь IDE каждый день и для работы и для своих проектов. Отличный продукт, спасибо всей команде Clion!


    Так как я работаю над проектом, который содержит много кода на C++ и QML+JS, то у меня есть некоторые хотелки, многие из которых уже озвучили в этой теме:


    • gdb рендеры типов Qt (из коробки или с плагином)
    • clazy (по трекеру вижу, что в работе)
    • поддержку QML (это больше чем просто синтаксис, на самом деле и довольно большая работа)
    • поддержку vcpkg (хотелось бы конечно как pip в PyCharm, но с поправками на то, что C++ программист должен страдать). Было бы удобно как для VS Code.

    Для меня лично наиболее высокий приоритет имеет поддержка QML, в первую очередь потому что довольно много кода предполагает интеграцию C++ и QML. Например, "выставление" некоторых методов классов C++ (или даже целых классов) в QML — обычная практика, в особенности если это какой-то "тяжёлый" код. Хочется, условно, иметь возможность перейти к объявлению/определению кода в C++ из QML или увидеть часть документации во всплывающей подсказке. Такого даже QtCreator не умеет.


    Графический редактор, к слову, для QML вообще не нужен — просто трата времени. Язык и так декларативный и если программист умеет сворачивать блоки кода в IDE и выносить код в отдельные компоненты, то всё нормально. То что ещё как-то может пригодится — Qt Design Studio уже есть, но это больше для UX дизайнеров.

    • anastasiak2512
      /#22399610 / +1

      Спасибо большое! Очень рады видеть довольных пользователей.


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


      Про рендеры тоже отвечала выше.


      Clazy действительно в работе) Сложно пока предсказать, когда закончим. Там еще и вопросы по лицензии есть небольшие.


      Интеграция с vcpkg может быть интересной фичей. В случае с CMake там вообще все более или менее хорошо. Но тут опять вопрос ресурсов. FYI, JFrog плагин для Conan написали сами, просто приходили консультироваться – мы с радостью помогали. Может кто-то в коммьюнити хочет написать плагин для vcpkg? Мы с радостью поможем подсказками по технической стороны)

  6. SerafimArts
    /#22404712

    Подскажите пожалуйста, а когда C/C++ будет в виде плагина, так же как и остальные языки? Хотя бы только в виде подсветки синтаксиса.


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

    • anastasiak2512
      /#22405566

      Нельзя C/C++ вынести просто в виде плагина "только для подсветки", надо тащить всю проектную модель, чтобы иметь возможность правильно код резолвить, понимать, откуда брать header search path, и пр. Это большая задача.


      Мы рассматриваем эту возможность, но очень хочется понять, ради каких случаем мы "утяжелим" IntelliJ IDEA таких плагином. Судя по комментариям в известном тикете, довольно большое количество случаев — это Андройд разработка, которая покрывается AS в полной мере. Есть еще interop в C ради производительности, как частый случай. Почему случаи важны? Нам надо понимать, какая проектная модель будет для C/C++ в таких гибридных проектах.


      Простой случай, который наверное рано или поздно будет реализован — смешанные проекты, где есть какая-то C/C++ библиотека, с CMake/Makefile файлом для сборки. Такое можно решить привнесением CLion как плагина в почти неизменном виде относительно сейчас.

      • SerafimArts
        /#22405770

        Нам надо понимать, какая проектная модель будет для C/C++ в таких гибридных проектах.

        В моём случае это PHP, где поддержка C идёт из коробки и нужна только подсветка, синтаксический анализ, и ничего более. Даже анализа препроцессора не нужно. И никаких CMake/Makefile и прочего. Сишные хедеры просто реализует маршаллер между языком и неуправляемым кодом.


        Проблема усугубляется ещё тем, что PhpStorm/IDEA не умеют даже в примитивный language injection для C/C++ на основе Text Mate, так что кусок стандартного функционала языка просто не работает.

        • anastasiak2512
          /#22405836

          Text mate bundles вроде как раз работают для C/C++. Почему не умеют?


          А вообще, примитивная подсветка не такая примитивная для C++. К сожалению, язык такой, что в общем то даже для подсветки может потребоваться резолв, потому что надо будет понимать каждый раз — перед нами тип или не тип.


          Для таких случаев как ваш, больше бы подошел C-базовый плагин к PhpStorm и другим языкам, где на C некая низкоуровневая прослойка написана. Но тоже не понятно в общем случае, откуда мы возьмем флаги компиляции и header search paths для правильного резолва. Но мы думаем в этом направлении (да, я понимаю, что прозвучит как "лежим в сторону выхода", но нет, думаем чуть более активно), обсуждаем с коллегами из других IDE разные варианты и примеры живые, которые они знают).

          • SerafimArts
            /#22405898

            Text mate bundles вроде как раз работают для C/C++. Почему не умеют?

            Ну вот потому что так. В SQL умеет, в C# умеет, в CSS умеет, да во всё умеет, кроме C/C++.


            А вообще, примитивная подсветка не такая примитивная для C++.

            Это да. Как минимум возникают проблемы с препроцессором, т.к. для корректного анализа нужно выполнять этот препроцессинг в самой IDE. А половина правил берётся из самого компилятора, вроде PREREQ для гцц. С другой стороны — для таких ситуаций можно сделать стабы по аналогии с PHP (https://github.com/JetBrains/phpstorm-stubs), но непосредственно под каждый компилятор. Это должно решить проблемы с выводом типов.


            Но тоже не понятно в общем случае, откуда мы возьмем флаги компиляции и header search paths для правильного резолва.

            Можно выставлять руками, по аналогии с include paths в других языках:


            Типа такого

            image

            • anastasiak2512
              /#22405932

              Ну вот потому что так. В SQL умеет, в C# умеет, в CSS умеет, да во всё умеет, кроме C/C++.

              Надо пойти в File Types в настройках и из абстрактного типа C/C++ удалить расширения C/C++ файлов. Это мешает text bundles использоваться.


              Header search path это не include path. Это вообще завязка на тулчейн и где лежат библиотеки. Об этом обычно осведомлена проектная модель и это может быть довольно тяжелой настройкой. Ну разве что как-то тулчейн весь где-то указывать.

              • SerafimArts
                /#22406038

                Надо пойти в File Types в настройках и из абстрактного типа C/C++ удалить расширения C/C++ файлов. Это мешает text bundles использоваться.

                Да даже если удалить всё — ничего не поменяется.


                Заголовок спойлера

                image

                • anastasiak2512
                  /#22407906

                  Ну мое дело предложить вариант решения. Разницы между этими двумя терминологиями я не представляю. Если имеется ввиду, что хедеры завязаны на директивы компилятора, то вариант решения я озвучил выше — можно организовать набор стабов под каждый компилятор.

                  Да, спасибо за идею. Пока кажется просто, что это какой-то UI-ад выйдет) К тому же, есть еще и разные конфигурации, с разным набором компиляторных флагов и опций. Количество настроек начинает расти экспоненциально или появляется своя новая проектная модель, чего не хочется делать.