![]() |
В сети крайне мало толковых билдов под C++. В основном хорошие билды только на web-разработку. В результате расширения очень долго собирались в попытках найти что-то полезное в тонне софта на маркетплейсе, а так же из рекомендаций в рандомных источниках, типа LLVM-канала в ДС. При чем что самое странное - некоторые из расширений очень плохо ищутся по тегу C++ на маркетплейсе, при том, что являются популярными (и при этом их так же нет в подборках).
Сначала пройдусь по C++ экстеншенам, а в конце докину всякого на юзабилити. Языковой сервер Microsoft C/C++ - идет на***, ну или почтиРасширение из коробки нормально работает с CMake от того же Microsoft, но оно имеет не очень хороший анализатор кода:
Если решили оставлять расширение ради кнопочки дебага с авто-сгенерированым конфигоом, то отключайте Intelli Sense Engine: JSON: Код:
{Настоящий языковой сервер C++clangd и C-mantic- вместе дают защеку некоторым большим IDE, типа CLion. При том, что второй даже не надо настраивать clangd не имеет интеграции с CMake и другими системами сборки, так что для него надо экспортировать compile_commands.json (у CMake это флаг Код:
-DCMAKE_EXPORT_COMPILE_COMMANDS=1Замечание: clangd и C-mantic оба имеют функцию переключения между исходником и заголовком, но C-mantic делает это лучше, когда файлы находятся в разных папках Цитата:
CodeLLDB крут тем, что это очень качественная обертка над lldb - можно задать команды инициализации и даже больше:
Более медленные проверки, такие как утечки памяти можно запустить через CodeChecker CodeChecker поддерживает следующие анализаторы:
P.S. clang из дефолтной поставки android-ndk не умеет в CTU (утечки не найдет) CodeCoverage или просмотр посещенных/не посещенных участков кода при выполненииCoverage Gutters выводит информацию из lcov файлов, а сами lcov файлы можно сгенерировать при помощи Lcov Generator (он поддерживает интеграцию с CMake и launch.json) Цитата:
Требует что бы в PATH, или по одному пути с компилятором была утилита c++filt. Для подсветки кода нужно ставить отдельное расширение для asm Цитата:
Подсветка кодаBetter C++ Syntax - фикс подсветки C++ кода. Так же может использоваться другими расширениями, такими как следующее std::format placeholder highlighter- подсветка фигурных скобок для std::format Color Identifiers- семантическая подсветка (советую в tokenKinds оставить только variable и parameter) Doxygen Documentation Generator - подсветка doxygen-документации в комментариях, а так же генерация блоков для документации Error Lens - вывод ошибок слева от строки с кодом, как в QtCreator Build Output Colorizer - подсветка кода и ошибок, которые выводятся в окно OUTPUT (у CMake будет нормально показывать ошибки компиляции) ТаскиTasks- вывод тасков в статусбар (можно выводить не все, выводить группой, а так же задавать иконки и тултипы) TaskNotify (Fork) - вывод уведомлений о завершении тасков Поведение VSCodeAuto Hide (fork)- автоматическое скрытие нижней панели и сайдбаров (можно настроить, что бы все скрывалось по отдельности) Automatic Editor Sorter- автоматичская сортировка вкладок по алфовиту cmake-build - дополнение для расширения от Microsoft - выводит уведомления об успешной/неуспешной сборке и открывает вывод CMake в случае ошибок GITGit Graph - отображение коммитов в виде графа. Оттуда же их можно черипикать и мерджить ветки GitLess - не жадная версия GitLens (и inlay hints коммиты тут по ощущению быстрее показывает) AICodeium - просто классный AI-ассистент. Из того, что понравилось - у них своя нейронка для автокомплита, которая работает лучше, чем GH Copilot (сравнивал в июле 2023). В качестве чата классика - ChatGPT |
Благодарю
но цлион остается в наших сердцах |
и все эти анализы полнейшная хуета, потому что под капотом ебучий clangd, который нихуя не умеет, и ломается от любой незакрытой скобки или точки запятой.
Покажите уже людям решарпер в Visual Studio(в CLion Nova он пока не полностью интегрирован) |
Цитата:
|
Цитата:
|
Докинул свое расширение, которое автоматически открывает вывод CMake в случае ошибки сборки
Для использования надо перебиндить сборку на команды из этого расширения, а оно уже само дернит оригинальный CMake. По дефолту расширение добавляет бинды:
cmake-build - Visual Studio Marketplace Extension for Visual Studio Code - Wrapper for cmake-tools to open output on build fails marketplace.visualstudio.com |
Дополню насчет генерации compile_commands.json в случае если система сборки из коробки этого не может. Существует прикольная утилита Bear которая позволяет получить базу данных компиляции. Отлично работает в случае легаси проектов с самописными Makefiles. Из больших минусов - на данный момент поддерживается только Linux (можно использовать WSL).
|
Обновил патченый clangd:
|
Есть ли какой то способ заставить clangd искать ссылки в заголовочных файлах так же как это делает расширение от майкрософта?
|
Цитата:
|
Есть допустим функция по классике объявленная в .hpp и описанная в .cpp, в VS code я запрашиваю все ссылки на эту функцию (ПКМ →Find all references) и clangd почему-то ищет их только в .cpp упорно игноря .hpp такая же фигня и с глобальным ренеймингом. Это какое-то ограничение clangd или ему нужны доп. флаги ? Что-то похожее описывается тут и тут.
|
Цитата:
Так же можешь попробовать повторить проблему на патченном клиенте clangd. Я точно не помню, но когда я добавлял поддержку cmake в расширение clangd, CMake вроде как включал хидеры в модель кодаю Но для этого хидеры должны быть указаны в проекте: Код: Код:
add_library(foo main.cpp main.h) # Хидер указан для компиляцииУ либы foo - должны норм работать ссылки с патченным clangd клиентом. При этом compile_commands.json для либ foo и bar будут одинаковым - CMake исключает хидеры при его генерации. |
Срчик, спасибо тебе за помощь с кросскомпляцией и топовейший пропатченный clangd. Проблем действительно нет, когда Microsoft идёт на***. Надо бы сделать "Normal C/C++ Enjoyer Extensions Pack"
|
Сегодня смерджили API clangd, который дает full-доступ к LSP-серверу - будет обновление без модифицированного клиента - перекину все с него на отдельные плагины
Export client from activation as API for use in other extensions by thegecko · Pull Request #575 · clangd/vscode-clangd This PR exports the language client so other VS Code extensions can take advantage of the clangd LSP features. For example, domain specific functionality (e.g. intrinsics) could be implemented in a... github.com UPDATE: Расширения готовы: 1, 2, 3. Но в PR обнаружился баг, ждем исправения в основной ветке Restarting clangd break the exported API · Issue #648 · clangd/vscode-clangd Write an extension what used the clangd API added in #575 (for example https://github.com/HighCommander4/vscode-clangd-api-example) Trigger extension activation (in provided example hover informati... github.com UPDATE: fix, ждем релиза новой версии на маркетплейсах |
Цитата:
|
Цитата:
https://forum.antichat.xyz/attachments/28585352/ UPD Хотя по идее можно попробовать похукать middleware клиента через API, что бы сделать без отключения |
Спасибо, очень полезная информация!
Есть ли какое-то решение для запуска таргетов? У меня большой cmake проект и много таргетов. Хочется уметь запускать их с различными аргументами. Расширение cmake не дает возможность запускать их с аргументами, а в launch.json запускается только через gdb/lldb. Неудобно капец |
Цитата:
|
Цитата:
|
Цитата:
UPD: Из того что начитал по workbench.action.debug.run - оно использует отладчик как лаунчер, но не аттачится к процессу. Сделано, что бы соблюсти все правила описаные в launch.json, т.к. там могут быть поля специфичные для отладчика. Думаю для запуска на локальной машине можно поискать расширения с дебагером-заглушкой, который будет юзать launch.json просто как конфиг для запуска. Но для кейсов с деплоем, например apk, такое вряд ли есть. Так что встроенное решение в VSCode наверно самое нормальное в этом плане |
Цитата:
.clangd: Код:
CompileFlagsCMakePresets.json: Код:
{ |
| Время: 08:09 |