В данной статье рассматривается процесс настройки vscode для разработки встроенного ПО на базе ядер cortex-M и процессе превращения редактора в полноценную IDE. При этом большинство представленных расширений являются универсальными и применимы в широком спектре задач программирования.

В отличии от проприетарных решений, таких как Keil, подход использования редактора vscode + компилятор gcc позволяет гибко настроить каждый пункт от начала разработки до релиза продукта. За время своей работы мною было опробованы разные решения: от классического keil до связки sublime и CodeSourcery. В последние годы я перешел на vscode + msys2: практически все ПО Open Source, не требует лицензий, не ограничено 32 Кб кода и может работать без сети интернет.

0. MSYS2: Набор инструментов для разработки

Данный этап не является обязательным, так как компилятор, OpenOCD, Python, Qt и другие компоненты можно установить как отдельные программы. Однако использование MSYS2 предпочтительнее: этот подход позволяет управлять всеми зависимостями в рамках единой экосистемы, а обновление всей среды разработки сводится к одной команде: pacman -Syu.

Для настройки msys2 необходимо:

  1. Скачайте и установите msys2.

  2. В VS Code вызовите палитру команд (Ctrl+Shift+P или F1).

  3. Выберите пункт Preferences: Open User Settings (JSON).

  4. Добавьте конфигурацию для интеграции терминала MSYS2 в VS Code:

Настройка терминала msys2 в vscode
// Настройки терминала MSYS2
"terminal.integrated.profiles.windows": {
    "PowerShell": {
        "source": "PowerShell",
        "icon": "terminal-powershell"
    },
    "Command Prompt": {
        "path": [
            "${env:windir}\\Sysnative\\cmd.exe",
            "${env:windir}\\System32\\cmd.exe"
        ],
        "args": [],
        "icon": "terminal-cmd"
    },
    "Git Bash": {
        "source": "Git Bash"
    },
    "MSYS2": {
        "path": "C:\\msys64\\usr\\bin\\bash.exe",
        "label": "MSYS2",
        "args": [
            "--login",
            "-i"
        ],
        "env": {
            "CHERE_INVOKING": "1",
            "MSYS2_PATH_TYPE": "inherit",
            "MSYSTEM": "MINGW64"
        }
    },
},
"terminal.integrated.defaultProfile.windows": "MSYS2",

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

pacman -Syu
# необходимо перезапустить MSYS2 и выполнить вторую часть обновления:
pacman -Su

Затем установите компилятор, отладчик и инструменты сборки:

pacman -S base-devel git mingw-w64-x86_64-arm-none-eabi-gcc mingw-w64-x86_64-gdb-multiarch

После выполнения этих шагов ваша среда будет готова к работе с проектами на базе Makefile (использование CMake в данной статье не рассматривается). Теперь перейдем к настройке самого VS Code и разбору расширений, которые значительно оптимизируют процесс разработки.

1. Arm Assembly. Подсветка синтаксиса ассемблерных файлов

Arm Assembly

Идентификатор

dan-c-underwood.arm

Описание

Arm assembly syntax support for Visual Studio Code

Издатель

dan-c-underwood

Ссылка на Visual Studio Marketplace

https://marketplace.visualstudio.com/items?itemName=dan-c-underwood.arm

Подсветка синтаксиса
arm-assembly
arm-assembly

2. Better C++ Syntax. Улучшенная подсветка синтаксиса для разных тем оформления

Better C++ Syntax

Идентификатор

jeff-hykin.better-cpp-syntax

Описание

The bleeding edge of the C++ syntax

Издатель

Jeff Hykin

Ссылка на Visual Studio Marketplace

https://marketplace.visualstudio.com/items?itemName=jeff-hykin.better-cpp-syntax

Подсветки синтаксиса для темы Dark+
better-cplusplus-syntax
better-cplusplus-syntax

3. Better Comments. Разделение комментариев на категории и их уникальное форматирование

Better Comments

Идентификатор

aaron-bond.better-comments

Описание

Improve your code commenting by annotating with alert, informational, TODOs, and more!

Издатель

Aaron Bond

Ссылка на Visual Studio Marketplace

https://marketplace.visualstudio.com/items?itemName=aaron-bond.better-comments

Подсветка комментариев
better-comments
better-comments

Для настройки нажмите ctrl+shift+p и выберите Preferences: Open User Settings (JSON). В файле настроек добавьте параметры для расширения

Настройки better-comments

// better-comments
"better-comments.multilineComments": true, // поддержка многострочных комментариев
"better-comments.highlightPlainText": true, // Определение тега будет идти по первому символу
"better-comments.tags": [
    {
        "tag": "!",
        "color": "#FF2D00",
        "strikethrough": false,
        "underline": false,
        "backgroundColor": "transparent",
        "bold": false,
        "italic": false
    },
    {
        "tag": "?",
        "color": "#3498DB",
        "strikethrough": false,
        "underline": false,
        "backgroundColor": "transparent",
        "bold": false,
        "italic": false
    },
    {
        "tag": "//",
        "color": "#474747",
        "strikethrough": true,
        "underline": false,
        "backgroundColor": "transparent",
        "bold": false,
        "italic": false
    },
    {
        "tag": "todo",
        "color": "#FF8C00",
        "strikethrough": false,
        "underline": false,
        "backgroundColor": "transparent",
        "bold": false,
        "italic": false
    },
    {
        "tag": "*",
        "color": "#98C379",
        "strikethrough": false,
        "underline": false,
        "backgroundColor": "transparent",
        "bold": false,
        "italic": false
    },
    {
        "tag": "/* !",
        "color": "#FF2D00",
        "strikethrough": false,
        "underline": false,
        "backgroundColor": "transparent",
        "bold": false,
        "italic": false
    },
    {
        "tag": "/*?",
        "color": "#3498DB",
        "strikethrough": false,
        "underline": false,
        "backgroundColor": "transparent",
        "bold": false,
        "italic": false
    },
    {
        "tag": "/* todo",
        "color": "#FF8C00",
        "strikethrough": false,
        "underline": false,
        "backgroundColor": "transparent",
        "bold": false,
        "italic": false
    }
],

Расширение Better Comments может показаться избыточным, если вы не собираетесь использовать паттерны в комментариях вроде “!” или “?”. Если вам нужна только подсветка вроде “todo”, “bug” - достаточно будет расширения todo-tree

4. Bookmarks. Закладки для конкретной строки в файле

Bookmarks

Идентификатор

alefragnani.Bookmarks

Описание

Mark lines and jump to them

Издатель

Alessandro Fragnani

Ссылка на Visual Studio Marketplace

https://marketplace.visualstudio.com/items?itemName=alefragnani.Bookmarks

Закладки в боковой панели
bookmarks
bookmarks

Позволяет расставлять закладки на строку с добавлением своего комментария и осуществлять быстрый переход по клику из боковой панели. Удобно, когда не хватает alt + ⇄ и ctrl + tab

5. C/C++. Базовое расширение для разработки на c/c++

C/C++

Идентификатор

ms-vscode.cpptools

Описание

C/C++ IntelliSense, debugging, and code browsing.

Издатель

Microsoft

Ссылка на Visual Studio Marketplace

https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools

Настройки c/c++ находятся в файле c_cpp_properties.json в корне рабочей области.

Настройки расширения c/c++
{
    "name": "cortex",
    "includePath": [
        // Пути к библиотекам
    ],
    // Что бы работали директивы #ifdef для определений, задаваемых в MAKEFILE, которые редактор "не видит"
    "defines": [
        "DEBUG",
        "UART1"
    ],
    "cppStandard": "c++17",
    "cStandard": "c17",
    "intelliSenseMode": "windows-gcc-arm",
}

6. Code Spell Checker. Проверка орфографии для EN/RU

Code Spell Checker

Идентификатор

streetsidesoftware.code-spell-checker

Описание

Spelling checker for source code

Издатель

Street Side Software

Ссылка на Visual Studio Marketplace

https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker

Проверка орфографии
code-spell-checker
code-spell-checker

Подсвечивает опечатки и предлагает их исправление (ctrl + .). Слова, которых нет в словарях, вроде GPIOA, можно добавить в пользовательский словарь (Add: “word” to user settings). Так же подсвечивает ошибки в тексте коммита встроенной системы управления версиями.

Для поддержки русского языка установите Russian - Code Spell Checker. Еще пригодятся Scientific Terms - Code Spell Checker и Win32 - Code Spell Checker. По умолчанию расширение отображает опечатки на панели “проблемы” т.к. они считаются “warning”. Для того, что бы убрать предупреждения из вкладки, нужно нажать ctrl+shift+p, выбрать Preferences: Open User Settings (JSON). В файле настроек добавьте параметры для расширения:

Настройки Code Spell Checker
// Проверка орфографии, поддерживаемые словари
"cSpell.language": "en,ru,scientific-terms-us",
"cSpell.spellCheckOnlyWorkspaceFiles": true,
// Убрать из окна "Проблемы"
"cSpell.diagnosticLevel": "Hint",

7. Cortex-Debug. Полноценный отладчик МК на ядрах Cortex-M

Cortex-Debug

Идентификатор

marus25.cortex-debug

Описание

ARM Cortex-M GDB Debugger support for VSCode

Издатель

marus25

Ссылка на Visual Studio Marketplace

https://marketplace.visualstudio.com/items?itemName=marus25.cortex-debug

Cortex-Debug
cortex-debug
cortex-debug

Cortex-Debug — это полноценный интерфейс для отладки, обладающий всеми функциями отладчика:

  • Работа с множеством серверов отладки: segger, st-link, openocd, pyocd или внешний external.

  • Просмотр регистров периферии за счет интеграции SVD (System View Description) файлов.

  • Полноценный интерфейс отладки: установка точек остановки, приостановки работ, “прыжка” через функцию

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

  • Просмотр значения переменных. При этом в окне ввода переменной для просмотра можно вводить выражения типа взятия адреса, разыменования, приведения типов,стандартных функций типа sizeof и т.п.

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

Cortex Debug умеет работать с несколькими серверами отладки: нативный segger, stlink и openocd. Последним удобно пользоваться, т.к. это бесплатный продукт, поддерживающий множество программаторов, не требующий пары сотен тысяч за лицензионный jlink - достаточно st-link за пару сотен рублей.

Openocd из состава msys2 (пакет mingw-w64-x86_64-openocd) может не поддерживать ваш МК. В таком случае ищите нужную сборку на профильных форумах или попробуйте openocd-xpack.

Для корректной работы программатора с openocd необходима установка драйверов libusb. Установить их можно через программы Zadig или UsbDriverTools.

Для работы расширения нужно добавить в папку .vscode файл launch.json со следующим содержимым:

Настройки launch.json
{
    "version": "0.2.0",
        "configurations": [
        {
            "name": "openocd",
            "showDevDebugOutput": "none",
            "request": "launch",
            "type": "cortex-debug",
            "cwd": "${workspaceRoot}",
            // Если используется openocd не из состава msys2
            "servertype": "openocd",
            "serverpath": "путь_к_openocd.exe",
            "executable": "${workspaceRoot}/путь_к_elf_файлу",
            "searchDir": [
                "путь_к_папке_scripts"
            ],
            // путь к файлу конфигурации, если необходимы особые настройки
            "configFiles": [
                "${workspaceRoot}/openocd_debug.cfg"
            ],
            // liveWatch работает только для "servertype": "openocd"
            "liveWatch": {
                "enabled": true,
                "samplesPerSecond": 1
            },
            // Если openocd запускается отдельно
            // "servertype": "external",
            // "executable": "${workspaceRoot}/путь_к_elf_файлу",
            "gdbPath": "C:/msys64/mingw64/bin/gdb-multiarch.exe",
            "gdbTarget": "localhost:3333",
            "svdFile": "${workspaceRoot}/ваш_мк.svd",
            // "preLaunchTask": "debug" // выполнить задачу из файла tasks.json (например запуск внешнего отладчика или reset микроконтроллера)
            // "runToEntryPoint": "my_func" // останавливает выполнение в начале функции my_func
        }
    ]
}

Соединение с микроконтроллером через openocd можно запускать как самому: ("servertype": "external") через цель в makefile так и через расширение: ("servertype": "openocd").

Иногда может потребоваться первый способ. Для этого я использую отдельную цель, и потом нажимаю F5:

ifndef CUSTOM_TARGET_D
%.d: %.$(TARGET)
    $(OPENOCD) -s $(OPENOCD_SCRIPTS_DIR) -s $(OPENOCD_CFG_FOLDER) -f $(OPENOCD_CFG) \
    -c init \
    -c "reset halt" &
    sleep 3
    $(GDB) -q -ex 'target remote localhost:3333' $<
endif

Можно так же добавить в tasks.json эту цель и указать ее в параметре preLaunchTask файла launch.json.

8. Doxygen Documentation Generator. Генератор комментариев по doxygen

Doxygen Documentation Generator

Идентификатор

cschlosser.doxdocgen

Описание

Let me generate Doxygen documentation from your source code for you.

Издатель

Christoph Schlosser

Ссылка на Visual Studio Marketplace

https://marketplace.visualstudio.com/items?itemName=cschlosser.doxdocgen

Doxygen - система документирования кода с автоматической генерацией документации на основе специально оформленных комментариев. Не важно, генерируете ли вы pdf документации, требуют ли от вас её заказчики - оформлять комментарии в едином стиле по всему проекту - база. И что бы её проще было соблюдать - поможет данное расширение. Оно автоматически генерирует шаблон комментария по вводу трех символов, которые определяются в настройках:

Настройки Doxygen Documentation Generator в launch.json
// Doxygen
"doxdocgen.c.firstLine": "/*!",
"doxdocgen.c.triggerSequence": "/*!",
"doxdocgen.file.copyrightTag": [
    "\\ваш (c) копирайт"
],
"doxdocgen.file.versionTag": "\\version 1.0",
"doxdocgen.generic.authorEmail": "ваша@почта",
"doxdocgen.generic.authorName": "Ваше имя",
"doxdocgen.generic.commandSuggestionAddPrefix": true,
"doxdocgen.generic.useGitUserEmail": true,
"doxdocgen.cpp.tparamTemplate": "\\tparam {param} ",
"doxdocgen.file.fileTemplate": "\\file {name}",
"doxdocgen.generic.authorTag": "\\author {author} ({email})",
"doxdocgen.generic.briefTemplate": "\\brief {text}",
"doxdocgen.generic.dateTemplate": "\\date {date}",
"doxdocgen.generic.paramTemplate": "\\param {param} ",
"doxdocgen.generic.returnTemplate": "\\return {type} ",

Параметр doxdocgen.c.triggerSequence отвечает за триггер для формирования комментария. Когда вы введете последовательно /*! и нажмете “Ввод” - шаблон комментария сформируется автоматически.

Тема doxygen и документации идет вместе с codestyle - набором правил и соглашений, используемых при написании исходного кода. В vscode есть встроенный способ форматирования кода под ваш кодстайл. Вам нужен файл .clang-format с описанием стиля кода:

Настройки формитрования кода в launch.json
// Форматтер
// "C_Cpp.clang_format_path": "путь_к_clang-format.exe",
"C_Cpp.clang_format_style": "путь_к_.clang-format",
"C_Cpp.default.intelliSenseMode": "gcc-arm",
"C_Cpp.formatting": "clangFormat",
"editor.formatOnSave": true, // форматировать файл при сохранении

9. Draw.io Integration. Создание диаграмм

Draw.io Integration

Идентификатор

hediet.vscode-drawio

Описание

This unofficial extension integrates Draw.io into VS Code.

Издатель

Henning Dieterichs

Ссылка на Visual Studio Marketplace

https://marketplace.visualstudio.com/items?itemName=hediet.vscode-drawio

Draw.io Integration
drawio
drawio

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

10. Git Graph. Визуализация репозитория

Git Graph

Идентификатор

mhutchie.git-graph

Описание

View a Git Graph of your repository, and perform Git actions from the graph.

Издатель

mhutchie

Ссылка на Visual Studio Marketplace

https://marketplace.visualstudio.com/items?itemName=mhutchie.git-graph

Git Graph
git-graph
git-graph

Наглядно показывает историю репозитория в виде графа. Имеет инструменты для работы с git прямо из интерфейса графа.

Однако для работы с git, а мой взгляд, удобнее использовать встроенный клиент в vscode. Он предоставляет удобный доступ ко всем функциям системы контроля версий. Из него удобно скопировать шаблон предыдущего коммита и вставить для текущего. Таким образом формируется единый стиль коммитов, не нужно каждый раз ломать вспоминать шаблон оформления плюс если вы используете CI/CD - единый стиль облегчит формирование релизов и заполнение CHANGELOG.md. Так же сразу видны изменения по файлам и рабочим областям, что позволяет писать ченжлог “на лету” и пушить сразу во все репозитории рабочей области. По сравнению с другими инструментами, вроде клиента sublime, tortoise или просто git.exe - система контроля версий vscode обеспечивает наилучший пользовательский опыт и скорость работы. Но тут конечно дело вкуса и привычки.

Так же есть расширение GitLens, которое красиво разрисует граф репозитория с аватарками и графиком активности, но т.к. оно платное - его я не использую.

GitLens
git-lens
git-lens

11. GNU Linker Map files. Подсветка синтаксиса map-файлов

GNU Linker Map files

Идентификатор

trond-snekvik.gnu-mapfiles

Описание

Syntax highlighting and symbol listing for GNU linker .map files

Издатель

Trond Snekvik

Ссылка на Visual Studio Marketplace

https://marketplace.visualstudio.com/ items?itemName=trond-snekvik.gnu-mapfiles

GNU Linker Map files
map-files
map-files

Подсветка синтаксиса для удобного отображения структуры map-файлов.

12. Hex Editor. Просмотр и редактирование бинарных файлов

Hex Editor

Идентификатор

ms-vscode.hexeditor

Описание

Allows viewing and editing files in a hex editor

Издатель

Microsoft

Ссылка на Visual Studio Marketplace

https://marketplace.visualstudio.com/ items?itemName=ms-vscode.hexeditor

Hex Editor
hex-editor
hex-editor

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

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

HxD
hxd
hxd

13. LinkerScript. Подсветка синтаксиса LD-файлов

LinkerScript

Идентификатор

ZixuanWang.linkerscript

Описание

Language support for GNU linker script

Издатель

Zixuan Wang

Ссылка на Visual Studio Marketplace

https://marketplace.visualstudio.com/ items?itemName=ZixuanWang.linkerscript

LinkerScript
linker-script
linker-script

Подсветка синтаксиса для удобного отображения структуры LD-файлов.

14. Markdown All in One. Мощный инструмент для верстки Markdown

Markdown All in One

Идентификатор

yzhang.markdown-all-in-one

Описание

All you need to write Markdown (keyboard shortcuts, table of contents, auto preview and more)

Издатель

Yu Zhang

Ссылка на Visual Studio Marketplace

https://marketplace.visualstudio.com/ items?itemName=yzhang.markdown-all-in-one

Для написания wiki, readme, release notes используется язык разметки Markdown. Данное расширение предостовляет инструменты для работы с этим языком: подстветка синтаксиса, проверка стандартов, исправление ошибок, автодополнения и т.п.

Дополнительно можно установить Markdown Kroki и Markdown Preview Mermaid Support если вы используете отрисовку диаграмм с помощью Kroki и Mermaid. Markdown Kroki поддерживается GitLab self hosted “из коробки” без дополнительных зависимостей и доступом к интернет.

Markdown Kroki
kroki
kroki
Markdown Mermaid
Mermaid
Mermaid

markdownlint - линтер для markdown. Дополнительно подсказывает какие правила разметки вы нарушаете. Для отключения конкретного типа предупреждения (например для MD033), в settings.json добавьте:

    // markdownlint
    "markdownlint.config": {
        "MD033": {
            "allowed_elements": [
                "details",
                "summary"
            ]
        }
    },

15. Serial Monitor. Последовательный монитор

Serial Monitor

Идентификатор

ms-vscode.vscode-serial-monitor

Описание

Send and receive text from serial ports.

Издатель

Microsoft

Ссылка на Visual Studio Marketplace

https://marketplace.visualstudio.com/items?itemName=ms-vscode.vscode-serial-monitor

Serial Monitor
serial-monitor
serial-monitor

При работе с железом часто бывает что единственным способом отладки и взаимодействия с железом является интерфейс uart, на котором запускается CLI (просто printf или полноценный терминал). Из всех опробованных терминалов, Serial Monitor пока устроил больше всего: все в одном окне, есть режим терминала, есть запись логов в файл и не нужно отдельно ставить terraterm, putty, docklight и т.п. Хотя чего не хватает в этом терминале - набор пресетов для отправки как в docklight.

По умолчанию скорости Serial Monitor ограничены 250000 бит/с. Для добавления своих скоростей и установки параметров порта по умолчанию добавьте в settings.json:

// терминал
"vscode-serial-monitor.dataBits": 8,
"vscode-serial-monitor.stopBits": 1,
"vscode-serial-monitor.parity": "none",
"vscode-serial-monitor.customBaudRates": [
    921600
]

16. Todo Tree. Комментарии TODO

Todo Tree

Идентификатор

Gruntfuggly.todo-tree

Описание

Show TODO, FIXME, etc. comment tags in a tree view

Издатель

Gruntfuggly

Ссылка на Visual Studio Marketplace

https://marketplace.visualstudio.com/items?itemName=Gruntfuggly.todo-tree

Todo Tree
todo-tree
todo-tree

Инструмент для расстановки комментариев типа “fixme”, “bug”, “todo” и т.п. Расширение будет мозолить глаза своими иконками и не позволит вам забыть о баге, который нужно исправить. Мощный инструмент за счет своей кастомизации, позволяющий придумать множество паттернов его использования.

Настройки в settings.json
/* Список TODO */
// Регулярное выражение для поддержки doxygen-комментариев
"todo-tree.regex.regex": "((//|//!|///|#|<!--|;|/\\*|/\\*\\*|/\\*!|/\\*!<|^|^[ \\t]*(-|\\d+\\.)|^[ \\t]*\\*|[ \\t]*\\*)\\s*\\\\?($TAGS))",
"todo-tree.regex.enableMultiLine": true,
"todo-tree.general.showActivityBarBadge": true,
"todo-tree.general.showIconsInsteadOfTagsInStatusBar": true,
"todo-tree.general.statusBar": "current file",
/* Так же можно задавать свои теги */
// "todo-tree.general.tags": [
//     "BUG",
//     "HACK",
//     "FIXME",
//     "TODO",
//     "XXX",
//     "[ ]",
//     "[x]",
//     "todo",
//     "\\todo",
//     "* \\todo",
//     " * \\todo ",
//     "fixme",
//     "\\fixme",
//     "* \\fixme",
//     " * \\fixme ",
//     "bug",
//     "\\bug",
//     "* \\bug",
//     " * \\bug "
// ],
"todo-tree.general.tags": [
    "TODO",
    "FIXME",
    "BUG"
],
"todo-tree.general.tagGroups": {
    "FIXME": [
        "FIXME",
        "FIXIT",
        "FIX",
        "fixme",
        "\\fixme",
        "* \\fixme",
        " * \\fixme ",
        "fix"
    ]
},
"todo-tree.tree.showCountsInTree": true,
"todo-tree.highlights.customHighlight": {
    "TODO": {
        "icon": "pencil",
        "type": "tag",
        "foreground": "#F3E40E",
        "iconColour": "#F3E40E",
        "gutterIcon": true
    },
    "todo": {
        "icon": "pencil",
        "type": "tag",
        "foreground": "#F3E40E",
        "iconColour": "#F3E40E",
        "gutterIcon": true
    },
    "FIXME": {
        "icon": "alert",
        "type": "text-and-comment",
        "foreground": "#FF2D00",
        "iconColour": "#FF2D00",
        "gutterIcon": true
    },
    "fixme": {
        "icon": "alert",
        "type": "text-and-comment",
        "foreground": "#FF2D00",
        "iconColour": "#FF2D00",
        "gutterIcon": true
    },
    "BUG": {
        "icon": "bug",
        "type": "text-and-comment",
        "foreground": "#FF2D00",
        "iconColour": "#FF2D00",
        "gutterIcon": true
    },
    "bug": {
        "icon": "bug",
        "type": "text-and-comment",
        "foreground": "#FF2D00",
        "iconColour": "#FF2D00",
        "gutterIcon": true
    }
},

Теперь, если вы напишите в комментарии BUG - на панели появится пометка об этой записи и внутри файла так же будет наглядное выделение строки.

Заключение

Настройка среды разработки — это баланс между временем, затраченным на конфигурацию, и комфортом в процессе написания кода. Переход от проприетарных IDE к гибкой связке VS Code + MSYS2 может показаться сложным на первых этапах, но возможности кастомизации и полный контроль над инструментами окупают эти усилия. Правильно подобранные расширения превращают редактор в мощный инструмент, позволяя разработчику сосредоточиться на главном — реализации сложной логики встраиваемых систем, а не на борьбе с инструментами (что с opensource периодически бывает:).

Буду рад узнать ваше мнение: какие инструменты помогают вам в работе с встраиваемыми системами? Какие расширения используете вы? Напишите о них в комментариях.