ВОЗМОЖНОСТИ И НАСТРОЙКИ

Всё, что он умеет, всё, что вы можете настроить

Полный обзор набора функций и полный справочник конфигурации — каждая настройка со значением по умолчанию.

Скачать VSIX

Ознакомительный выпуск. Все возможности ниже доступны в течение бесплатного 14-дневного пробного периода. После него лицензионный ключ доступен по запросу, выдаётся автоматически, и ключ может включать или ограничивать отдельные возможности для каждого пользователя. Запросить лицензию →

Когда тесты написал ИИ

Покрытие против сгенерированного набора тестов

Обзор излагает общий аргумент. Здесь тот же аргумент приложен к самому списку возможностей: сгенерированный набор тестов ошибается характерным образом — каждая строка задета, половина решений так и не принята, а несколько функций названы в заголовках тестов, но ни разу не вызваны, — и пять пунктов ниже как раз и делают эту форму видимой.

  • Покрытие ветвей и MC/DC вместе с подсказкой по каждой ветви и каждому решению отделяют строка выполнилась от решение было проверено. Набор тестов, идущий только счастливым путём, показывает почти 100% по строкам и около 50% по ветвям — и именно этот разрыв и есть находка. Зелёный прогон тестов не показывает из него ничего.
  • Составной балл — это гармоническое среднее, поэтому сильная метрика не может прикрыть слабую; ровно такая арифметика и нужна сгенерированному набору тестов. Усреднение числа по строкам с числом по ветвям похоронило бы единственное число, на которое стоит смотреть.
  • Предупреждения о мёртвом коде заводят запись в панели Problems для любой функции с измеримыми строками и нулевым покрытием. Набор тестов, который называет функцию в заголовке теста и никогда до неё не доходит, больше нигде не упадёт.
  • Diff-покрытие относительно базового git-рефа сужает всё вышесказанное до строк, которые только что изменились, — до кода, который вы приняли сегодня днём, а не до среднего за всю жизнь репозитория, с которым большой существующий набор тестов будет и дальше преспокойно выглядеть здоровым.
  • Copy Uncovered Lines выдаёт ровно то, что не выполнялось, в Markdown — то есть то, что вставляется прямо обратно тому ассистенту, который этот набор тестов и написал.

Ничто из этого не читает тест и не выносит о нём суждения, и ничего здесь не следует понимать как такое заявление: тест вообще без единой проверки всё равно покрывает каждую строку, которой касается. Измеряется та часть, которую ревьюер не удержит в голове, — какой код никогда не выполнялся.

Уникально для этого расширения

Ваше покрытие строк говорит 100%. 312 байт вашего двоичного файла ни разу не выполнились.

Все остальные метрики здесь измеряются по исходнику: инструментируйте код, запустите инструментированную сборку, посчитайте, что сработало. Покрытие объектного кода измеряет то, до чего не доберётся ни одно средство уровня исходного кода — сколько собранного двоичного файла действительно выполнилось, в байтах инструкций, за счёт наблюдения за потоком инструкций. Компилятор порождает код, за которым не стоит ни одна строка вашего исходника: проверки границ массивов, таблицы переходов switch, выгрузка регистров, вспомогательные подпрограммы среды выполнения для деления или плавающей точки. Ничего из этого не появляется в вашем исходнике, поэтому ни одно средство уровня исходного кода — включая это расширение, для любой другой читаемой им метрики — не скажет, выполнилось ли это. Это также единственная здесь метрика, отвечающая на вопрос покрывает ли это ассемблер?, поскольку написанный вручную ассемблер никогда не инструментируется.

DO-178C прямо называет это: на уровне A это требуется в дополнение к MC/DC. Ни одно другое расширение VS Code это не читает. Как получить это со встраиваемой цели →

Возможности

Основное

  • Представление «Покрытие» для каждого измеренного файла, обзорная линейка и Annotated Source; в собственном поле редактора по умолчанию — только то, что заслуживает отметки: полосы MC/DC, треугольники «с последнего прогона», точки изменённых строк, — а полосы только на непокрытых строках или тепловая карта попаданий включаются одной настройкой.
  • Построчное покрытие операторов, ветвей, функций, регионов, MC/DC и инстанциаций C++, в зависимости от того, что предоставляет файл трассировки.
  • Приём нескольких форматов и детерминированное объединение нескольких прогонов с зафиксированным происхождением.
  • Переотображение путей — пути сборочной машины CI → ваше локальное рабочее пространство.
  • Дифференциальное покрытие — оформляет только строки, изменённые относительно базовой ветки git.
  • Значки Explorer и элемент строки состояния для всего прогона, окрашенный в соответствии с комплексной оценкой.
  • Режим наблюдения — автоматическая перезагрузка при изменении файла трассировки.
  • Run Tests with Coverage — распознаёт тестовый раннер по корню рабочего пространства и запускает его с включённым покрытием, загружая записанное.
  • Удалённые файлы трассировки — запись coverageFile.paths может быть URL https://: артефакт CI скачивается условно (ETag / Last-Modified), с заголовками, которые вы настроили в remote.headers, загружается как локальный файл и скачивается заново по таймеру через remote.refreshMinutes; когда скачивание не удаётся, вместо него загружается последняя скачанная копия.
  • Переменные в путях — ${workspaceFolder}, ${workspaceFolderBasename}, ${userHome}, ${env:NAME}, ${command:id} и ${config:section.key} в каждой настройке путей; неизвестная переменная остаётся как записана, так что опечатка появляется в журнале обнаружения, а не исчезает бесследно.
  • Многокорневые рабочие области — каждая папка обнаруживается из собственных настроек (её .vscode/settings.json или её записи в .code-workspace), её файлы трассировки сливаются в один прогон, представление «Покрытие» группирует файлы по папкам, а добавленная или удалённая папка сама перезагружает покрытие.
  • Ещё два повода для перезагрузки — абсолютная запись coverageFile.paths вне рабочей области опрашивается, так что появившийся там файл загружается; а watch.reloadAfterTasks называет задачи (npm: test), завершение которых перезагружает покрытие, независимо от того, включён ли режим наблюдения.
  • Ход выполнения с возможностью отмены — загрузка десяти и более файлов трассировки, или 8 МБ и более, и каждый Generate Full HTML Report идут под уведомлением о ходе выполнения с кнопкой «Отмена»; отмена оставляет предыдущий прогон загруженным.
  • Собственное представление Test Coverage VS Code — каждая загрузка публикуется и через Test Coverage API редактора (testCoverage.publish), так что панель покрытия в Test Explorer, проценты по файлам в Проводнике и переключатель редактора Show Inline Coverage показывают те же числа; Show in Test Coverage View публикует по запросу и открывает панель. Если тесты названы (TN: в lcov), представление фильтрует покрытие файла по тесту.
  • Предлагаемое правило переотображения — когда после загрузки остаются несопоставленные файлы (пути контейнера или CI против локального чекаута), расширение выводит правило pathRemap, объясняющее большинство из них, предлагает Apply Suggested Remap в результате загрузки и Suggest Path Remap Rule в палитре; без щелчка ничего не записывается.
  • Glob-шаблоны исключения — fuciniCoverage.ignore (vendor/**, **/*.generated.ts) отбрасывает целые файлы из прогона при загрузке, так что каждое представление, каждый барьер и каждый экспорт считают без них; результат загрузки говорит сколько, а вывод называет каждый.
  • Неизмеренное против непокрытого — файл, который не загружал ни один тест, не засчитывается как 0% у вас за спиной; строка состояния говорит о нём не измерено, а unmeasured.mode может перечислять такие файлы в представлении «Покрытие» или считать каждый непокрытым файлом, с threshold.unmeasuredFiles как порогом на их число.
  • Видно, что сделало слияние — при нескольких загруженных файлах трассировки каждая строка файла называет отчёт, из которого взяты её числа, значок обведён там, где эти числа перекрыли более старый отчёт, каждая строка файла трассировки считает, сколько её файлов перекрыто или перекрыло другие, а щелчок по строке файла трассировки подсвечивает её файлы в дереве (coverageView.mergedMarks).

Комплексная оценка и соответствие

Единое взвешенное среднее гармоническое по строкам, ветвям, функциям, регионам, MC/DC и инстанциациям. Поскольку это среднее гармоническое, слабая метрика не может быть замаскирована идеальной. Веса по умолчанию соответствуют уровням IEC 61508 / ISO 26262 / DO-178C, а вердикт COMPLIANT / NON-COMPLIANT определяется порогами для каждой метрики и настраиваемым режимом.

The status-bar hover card: NON-COMPLIANT, 3 of 5 gates below threshold — functions and regions pass, lines and branches miss narrowly (amber), MC/DC misses outright (red)Screenshot pending — add assets/img/statusbar.png (see SCREENSHOTS.md).

Анализ в редакторе

  • CodeLens функции — % покрытия для каждой функции, нажмите, чтобы перейти к её первой непокрытой строке.
  • Наведение на ветвь и MC/DC — количество пройденных/непройденных ветвей и разбивка условие/вектор для каждого решения; опциональный цветной индикатор поля MC/DC.
  • Предупреждения о мёртвом коде — предупреждение на панели Problems для функций с измеримыми строками и нулевым покрытием.
  • Навигация Next/Previous Uncovered.
  • Предупреждение о несоответствии, когда содержимое файла больше не соответствует прогону — обновляется при сохранении или изменении файлов на диске, с точной разницей при наведении.
  • С последнего прогона — красный треугольник на каждой строке, выполненной в предыдущем прогоне и не выполненной в этом, зелёный для обратного случая, с обзорной линейкой и числом попаданий при наведении.
  • Изменённые буферы — каждая отметка, подсказка и CodeLens движутся вместе с текстом при редактировании и снимаются с переписанной строки, где серая точка объясняет почему.
  • Режимы поля редактора — editorGutter.mode оставляет полю только находки (off), ставит полосу на каждую строку, которая ни разу не выполнялась, и янтарную там, где одна из ветвей ни разу не была пройдена (uncovered), либо добавляет тёплый оттенок на каждую выполненную строку — тем горячее, чем чаще она выполнялась (heatmap); Choose Editor Gutter Mode... переключает из палитры или меню строки состояния.
  • Встроенные числа попаданий — hitCounts.inline пишет ×12 после каждой строки, на которой начинается оператор, включая ×0; Toggle Inline Hit Counts переключает это.
  • Записи в Problems на каждую строку — problems.perLine ставит диагностику уровня Information на каждый блок строк, которые ни разу не выполнялись в открытом документе (мёртвая функция — одна запись, а не сорок), и по желанию на каждую строку, где одна из ветвей ни разу не была пройдена; записи следуют за своими строками при правке.
  • Подсветка строки и карта на полосе прокрутки — lineHighlight кладёт полупрозрачный фон за сами строки вместо (или вдобавок к) метки в поле, а overviewRuler сам решает насчёт полосы на полосе прокрутки: при выключенном поле это карта пробелов файла и ничего рядом с кодом.
  • Какой файл трассировки покрыл эту строку — когда объединено несколько отчётов, подсказка со счётчиком выполнений называет каждый, покрывший строку (включая имя набора из TN: в lcov), а щелчок по строке файла трассировки в представлении Coverage подсвечивает внесённые им строки.
  • Красный, янтарный и зелёный — режим coverage у editorGutter.mode и lineHighlight окрашивает каждую измеренную строку цветами цветовой шкалы; кнопка режима в строке состояния и Alt+G переходят от одного режима к следующему.
  • Ваши цвета, с предпросмотром — цветовая шкала и оттенки тепловой карты (heatmap.colors, heatmap.colorsDark) — это настройки, и страница настроек показывает их на светлом и тёмном редакторе прямо во время выбора.
  • Из какого отчёта берётся файл — когда два отчёта измеряют один и тот же код, правила coverageFile.sources или Choose Coverage Source for This File... решают, какой из них показывает каждый файл, вместо того чтобы побеждал самый новый.

Отчётность и история

  • Generate Full HTML Report — самостоятельно формируемый, многостраничный отчёт по каждому каталогу; Open Annotated Source для одного файла.
  • Опциональная локальная история прогонов с трендом покрытия (▲/▼), а также Compare Two History Runs и Compare with Last Run.
  • Show Worst-Covered Files / Functions и Copy Uncovered Lines (Markdown).
  • Export Fucini JSON — полная нормализованная модель.
  • Export Coverage Report... — тот же запуск как CSV (по файлам или по функциям), сводка в Markdown, файл трассировки LCOV, XML Cobertura, SARIF или автономный значок SVG. С двадцатью пятью читателями и этими записями расширение конвертирует между форматами: загрузите JaCoCo или llvm-cov JSON и выдайте LCOV, который читают Codecov, Coveralls и SonarQube, или XML Cobertura, который читают Jenkins, GitLab и Azure DevOps.
  • Generate Coverage Badge — SVG в стиле shields, записанный прямо в рабочую область (badge.outputPath, по умолчанию coverage-badge.svg), чтобы README встраивал его через ![coverage](coverage-badge.svg) без размещённого сервиса; badge.metric выбирает строки, ветви, MC/DC или комплексную оценку, цвет следует уровням colorScale.*, а badge.autoUpdate перезаписывает его после каждой загрузки.
Generated multi-page HTML coverage reportScreenshot pending — add assets/img/report.png (see SCREENSHOTS.md).
The report’s annotated page for src/calc.c: per-line hit counts, a fully covered function, an uncovered else branch, a 1/2 partial branch, an MC/DC expansion and a never-called functionScreenshot pending — add assets/img/annotated-source.png (see SCREENSHOTS.md).

Community и Pro, функция за функцией

Два листинга, одна кодовая база. Community — навсегда бесплатный уровень, и именно на него переходит листинг Pro после 14-дневного пробного периода; Pro и пробный период — это всё, без ограничений. Граница проведена так, чтобы бесплатный уровень всегда видел каждую находку и платил лишь за удобство, доказательство и масштаб — в VS Code команда Fucini Coverage: What Community Includes показывает тот же список с сегодняшними счётчиками по каждому лимиту.

ВозможностьCommunity (бесплатно)Pro и пробный период
Все 25 форматов, слияние нескольких файлов, переназначение путей✓✓
Поля редактора, обзорная линейка, значки в Проводнике, представление «Покрытие», CodeLens, подсказки✓✓
Режим наблюдения с автоматической перезагрузкой; Run Tests with Coverage✓✓
Покрытие диффа, история и тренд, отметки «с последнего прогона»✓✓
Загрузка покрытия командой25 в день (автоматические загрузки не считаются)без ограничений
Сравнение прогонов, Check Coverage Thresholds, Open HTML Report, Export Coverage Report, Export Fucini JSONпо 5 в неделюбез ограничений
Annotated Source на месте5 в неделюбез ограничений, плюс постоянная боковая панель и Generate Full HTML Report
Export Coverage ReportCSV (по файлам, по функциям)также Markdown, LCOV, Cobertura XML, SARIF, SVG-значок
Файл, больше не соответствующий своему покрытиюсообщается и приглушаетсятакже строка, функция или контрольная сумма, которые это доказали
Выжившие мутантыотмечены на строке, с указанием числатакже то, что изменил каждый мутант
Тесты, выполнившие строкусколько ихтакже их имена
CRAPMax CRAP прогона, CRAP для каждой функциитакже ранжированный список Riskiest Methods
Risk hotspotsсколько их и худший показательтакже ранжированный список, каждый пункт открывает свою функцию
Покрытие MC/DC, полосы на поле и подсказка—✓
Покрытие объектного кода с оценкой и контролемсообщается только о наличии✓
Файл, измеренный несколькими отчётамисамый новый отчёттакже выбор одного отчёта для каждого файла или их объединение (agree / union)
Требуется телеметриянет — по желанию и один раз для каждой машины Unlock Full Features обменивает подробную телеметрию использования на 30 дней всего из правого столбцанет

Неделя длится семь дней с первого использования, которое её открыло, и ничто из того, что только читает покрытие, не учитывается. Не готовы к подписке? Пропуск на 7 дней — это всё из правой колонки на одну неделю, с разовой оплатой, и отменять ничего не нужно.

VS Code и Visual Studio бок о бок

Один продукт, два редактора, один читатель: один и тот же отчёт даёт одни и те же числа, до цифры, в обоих. Coverage Studio для Visual Studio работает в Visual Studio 2022 и 2026 — Community, Professional и Enterprise и не использует собственное покрытие кода Visual Studio, которое в 2022 есть только в Enterprise; он включён в каждый платный план, а устройство с обоими редакторами — это одно место. Всё над чертой есть в обоих; под ней — то, чему в Visual Studio нет аналога, и то, что там ещё впереди.

ВозможностьVS CodeVisual Studio
Все 25 форматов, слияние нескольких файлов, переназначение путей, те же настройки fuciniCoverage.* и .vscode/settings.json✓✓
Поля, обзорная линейка, счётчики, линза для каждой функции, всплывающие подсказки, окно Coverage, строка состояния и её карточки✓✓
Режим наблюдения с автоматической перезагрузкой; Next Uncovered, Next Partly-Tested Decision; копирование как Markdown✓✓
Составной балл, пороги и вердикт COMPLIANT; MC/DC; CRAP✓✓
Getting Started, на 18 языкахпошаговое руководствостраница в Tools → Coverage Studio
Run Tests with Coverage, Run This Test with Coverage, покрытие после каждого сохранения; собственная панель Test Coverage редактора✓✓, а также Collect Coverage in Test Explorer… — панель Test Coverage — это API VS Code
Значки в проводнике✓— (Solution Explorer не может помечать файлы)
Annotated Source, HTML-отчёт, экспорт, Check Thresholds, Error List, история и тренд, diff-покрытие✓✓
Какие тесты выполнили строку, исключение из дерева и из редактора, перспектива пространств имён и поле поиска, сеансы покрытия, график тренда, базовая линия CI✓✓, плюс Run Native Project with Coverage для проекта C++
Бесплатный уровень, пробный период, оплата✓— (платный план; ключ находится на машине, где активирован VS Code)

Следующим: всё это покрытие в Azure DevOps, в бесплатном расширении. Azure DevOps показывает покрытие сборки лишь в пределах собственного формата — строки и ветви в процентах. Fucini DevOps Studio покажет всё, что читает Coverage Studio: каждый из этих 25 форматов, для каждого языка, с MC/DC, условиями, составной оценкой и порогами — как вкладку Coverage на конвейере, который его создал. Следите за новостями, чтобы не пропустить первый выпуск.

Справочник настроек

Настройте в интерфейсе настроек (поиск Fucini Coverage) или в settings.json.

Download the complete settings reference — a commented settings.json holding every fuciniCoverage.* setting at the same default the packaged extension uses, ready to copy into your workspace or user settings. Regenerated from the extension on every release, so it cannot drift from what the VSIX ships.

Строка, заканчивающаяся на По папкам., принимает значение уровня папки в многокорневой рабочей области: каждая папка обнаруживается со своим .vscode/settings.json или своей записью в .code-workspace, и ${workspaceFolder} в ней означает эту папку.

Локализация

ПараметрПо умолчаниюЧто делает
languageautoЗакрепляет собственный интерфейс расширения (строка состояния, уведомления, подсказки, веб-панели лицензии и отчёта) за конкретным языком, независимо от языка интерфейса VS Code. auto — как в VS Code. Одно из auto, en, uk, nl, de, fr, es, hr, pl, it, pt, ru, tr, he, ja, zh, hi, ko, ar. Не меняет записи палитры команд и подписи/описания интерфейса настроек — их VS Code берёт из своего языка интерфейса.

Обнаружение и загрузка

ПараметрПо умолчаниюЧто делает
coverageFile.defaultLocation""Базовая папка для поиска и диалогов выбора файлов. Переменные: ${workspaceFolder}, ${workspaceFolderBasename}, ${userHome}, ${env:NAME}, ${command:id}, ${config:section.key}. По папкам.
coverageFile.paths[]Файлы трассировки для загрузки и объединения, относительно базовой папки, абсолютные (те же переменные, что и выше) или URL http(s)://, скачиваемый при каждой загрузке — добавьте #lcov.info (или другое имя файла) как фрагмент URL, когда у самого URL нет расширения. Относительный шаблон с * ищет рекурсивно под базовой папкой; абсолютная запись тоже может содержать подстановочный знак (${workspaceFolder}/build/coverage-merged/*.lcov.info, ** для любой глубины), и поиск идёт под папками перед ним. По папкам.
watch.enabledtrueПерезагружать покрытие при изменении файла трассировки — или при его появлении, для абсолютной записи вне рабочей области. По папкам.
watch.reloadAfterTasks[]Имена задач (label или source: name, например npm: test), завершение которых перезагружает покрытие, независимо от того, включён ли watch.enabled. По папкам.
remote.headers[]Заголовки Name: value, отправляемые при каждом скачивании по URL; переменные раскрываются, так что Authorization: Bearer ${env:CI_TOKEN} держит токен вне settings.json. По папкам.
remote.refreshMinutes0Скачивать записи-URL заново каждые N минут (условный GET; 0 = только при загрузке). По папкам.
baseline.report""Отчёт, с которым сверяется каждый загруженный прогон — отчёт ветки main, как его публикует сборочный сервер: URL, запрашиваемый с remote.headers и кэшируемый так же, как URL из coverageFile.paths, или путь к скачанному артефакту, абсолютный или относительно папки. Карточка в строке состояния тогда говорит, где этот прогон стоит относительно него, а Compare with CI Baseline перечисляет файлы, которые изменились. Пусто: без базовой линии. По папкам.

Цветовая шкала и значки

coverage: 83%

ПараметрПо умолчаниюЧто делает
colorScale.presetdefaultcolorblind заменяет красный, янтарный и зелёный на киноварный, оранжевый и синий (Okabe–Ito) везде, где раскрашивается покрытие; цвета, изменённые ниже, имеют приоритет.
colorScale.lowColor#8b1a1aНижний край градиента покрытия.
colorScale.midColor#b8860bОпорный цвет градиента.
colorScale.highColor#228b22Верхний край градиента (100%).
colorScale.lowThreshold80% при котором значок переходит с низкого на средний.
colorScale.highThreshold90% при котором значок переходит со среднего на высокий (и опора градиента).
heatmap.colors["#fff1a8", …, "#a63603"]Пять оттенков тепловой карты для светлой темы — от строки, выполнявшейся реже всего, до строки, выполнявшейся чаще всего.
heatmap.colorsDark["#6e5f22", …, "#ff6a00"]То же для тёмной темы, где ярче означает больше.

Комплексная оценка (взвешенное среднее гармоническое)

ПараметрПо умолчаниюЧто делает
whmWeights.lines1Вес покрытия строк/инструкций.
whmWeights.functions1Вес покрытия функций.
whmWeights.regions1.5Вес покрытия регионов (llvm-cov).
whmWeights.branches2Вес покрытия ветвей.
whmWeights.mcdc4Вес покрытия MC/DC. 0 исключает его.
whmWeights.instantiations0.5Вес инстанцирований шаблонов C++ (llvm-cov).

Пороги и соответствие

ПараметрПо умолчаниюЧто делает
threshold.profilestandardstandard задаёт приведённые ниже значения по умолчанию; safety поднимает каждый барьер до 100, кроме мутационной оценки; custom оставляет то, что вы задали сами. В профиле по умолчанию метрики безопасности остаются без барьера — проект, который не измеряет MC/DC, из-за этого не считается непройденным.
threshold.statement80Минимальный % инструкций. 0 отключает проверку.
threshold.branch70Минимальный % ветвей.
threshold.mcdc0Минимальный % MC/DC.
threshold.functions80Минимальный % функций.
threshold.regions75Минимальный % регионов (llvm-cov).
threshold.instantiations0Минимальный % инстанцирований (llvm-cov); проекты только на C пропускаются.
threshold.conditions0Минимальный % условий.
threshold.functionCalls0Минимальный % вызовов функций, если отчёт их содержит.
threshold.objectCode0Минимальный % объектного кода, если отчёт его содержит.
threshold.mutation0Минимальная мутационная оценка, если загружен отчёт о мутациях.
threshold.weighted75Минимальная сводная оценка.
compliance.modestrictstrict | whm | both | either.
compliance.diagnosticsfalseОдна ошибка в «Проблемах» на каждый недостигнутый порог, на файле трассировки.
threshold.unmeasuredFiles-1Максимальное число неизмеренных файлов (требует unmeasured.mode со значением list или count). -1 не проверяет; 0 проваливает проверку на первом же файле, который не загружал ни один тест.
problems.perLineoffoff | uncovered | uncoveredAndPartial: запись уровня Information (волнистая линия в редакторе) на каждый блок подряд идущих непокрытых строк в каждом открытом документе, по желанию плюс одна на каждую строку, где одна из ветвей ни разу не была пройдена. Не зависит от problems.enabled. По папкам.

Diff, переотображение и отчёты

ПараметрПо умолчаниюЧто делает
pathRemap[]Упорядоченные замены путей {from,to}; to может использовать ${workspaceRoot}, который сначала пробует папку самого файла трассировки, а затем каждую другую папку рабочей области. Когда после загрузки остаются несопоставленные файлы, результат загрузки предлагает Apply Suggested Remap с правилом, выведенным из несопоставленных путей (также Suggest Path Remap Rule в палитре); пока вы не нажмёте, ничего не записывается. По папкам.
ignore[]Glob-шаблоны целых файлов, исключаемых из прогона (vendor/**, **/*.generated.ts, build/**) — отбрасываются при загрузке, так что каждое представление, каждый барьер и каждый экспорт считают без них. Сопоставляются с путём относительно рабочей области и с абсолютным путём; шаблон без / соответствует имени на любой глубине, как в .gitignore. По папкам.
ignore.generatedtrueИсключать сгенерированные файлы .NET из каждого итога, страницы и экспорта — *.Designer.cs, *.g.cs, *.g.i.cs, *.generated.cs, *.razor.g.cs, *.AssemblyInfo.cs, GlobalUsings.g.cs, Migrations/** и obj/** — до применения ignore. Выключите для проекта, который тестирует свои миграции. По папкам.
ignore.namespaces[]Пространства имён, исключаемые из каждого итога и каждой страницы, для исходников .NET: файл, чьё объявление пространства имён совпадает с одним из них, не считается. Префикс с * в качестве подстановочного знака — Acme.Generated, Acme.*.Migrations, *Tests. По папкам.
ignore.attributes["ExcludeFromCodeCoverage"]Атрибуты, выводящие класс, метод или свойство .NET из подсчёта, читаются из исходника: член под одним из них исключается так же, как его исключил бы LCOV_EXCL_START/STOP, каким бы инструментом ни был записан отчёт. Имена с суффиксом Attribute или без него, с пространством имён или без; добавьте GeneratedCode, Obsolete или свои. По папкам.
testRun.perTestfalseRun Tests with Coverage выполняет рецепт dotnet test по одному тестовому классу за раз и помечает каждый отчёт его классом, чтобы подсказка при наведении, CodeLens и Show Tests That Ran This Line могли сказать, какие тесты выполнили строку — медленнее, и только для .NET, чей отчёт Cobertura сам этого сказать не может. По папкам.
testRun.onSavefalseСохранение исходника запускает тесты, которые его покрывают, с покрытием, через мгновение после сохранения: для решения .NET — только тестовые проекты, ссылающиеся на проект сохранённого файла, по одному dotnet test на каждый; любой другой раннер — весь свой рецепт. Несколько сохранений — один прогон; уже идущий прогон не прерывается. По папкам.
testRun.skipWhenTestsFailfalseRun Tests with Coverage оставляет покрытие на экране как было, когда исполнитель завершается с ошибкой, и сообщает об этом в панели Output — красный запуск не красит зелёный файл в красный. По папкам.
unmeasured.modeoffoff | list | count: что делать с файлами рабочей области того же вида, что и прогон, которые не загружал ни один тест (см. Неизмеренное против непокрытого). list называет их в представлении «Покрытие» и в результате загрузки; count к тому же засчитывает каждый как непокрытый файл размером в его строки кода. Изменение перезагружает.
unmeasured.exclude["**/*.h", "**/*.hpp", "**/*.hh", "**/*.inl", "**/*.d.ts"]Файлы, которые никогда не называются неизмеренными, в glob-синтаксисе ignore — по умолчанию файлы, состоящие только из заголовков и только из объявлений. По папкам.
hotspots.crapThreshold30Функция с таким показателем CRAP или выше — risk hotspot: она попадает в список под деревом представления Coverage, худшие первыми; 30 — значение, предложенное авторами метрики. Они есть только у отчётов, несущих цикломатическую сложность. По папкам.
hotspots.complexityThreshold0Функция такой сложности или выше — тоже hotspot, каким бы ни было её покрытие; 0 выключает это. По папкам.
gitDiff.enabledfalseОграничить покрытие строками, изменёнными относительно базовой ссылки. По папкам.
gitDiff.baseReforigin/masterБазовая ссылка Git для diff-покрытия. По папкам.
externalHtmlReport.dir""Читать готовый HTML-каталог llvm-cov show для Annotated Source. По папкам.
htmlReport.outputDir""Каталог вывода для Generate Full HTML Report. По папкам.
badge.outputPathcoverage-badge.svgКуда Generate Coverage Badge записывает SVG — относительно папки рабочей области или абсолютно, те же переменные, что и в coverageFile.defaultLocation; родительские папки создаются. По папкам.
badge.metriclineslines | branches | mcdc | weighted: число по всему прогону на значке (weighted — комплексная оценка строки состояния). Нет данных для него → серое n/a. По папкам.
badge.autoUpdatefalseПерезаписывать значок после каждой успешной загрузки, молча (в журнале как [FUCINI_BADGE]). По папкам.

Отображение и анализ

ПараметрПо умолчаниюЧто делает
mcdcGutter.enabledfalseЦветная полоса MC/DC на полях.
statusBar.enabledtrueПоказывать элементы строки состояния для всего запуска и по файлам.
statusBar.showLaunchertrueВсегда доступная кнопка быстрого меню.
statusBar.showModeToggletrueКнопка в строке состояния с названием режима поля; щелчок переключает его на следующий.
codeLens.enabledtrueCodeLens покрытия для каждой функции.
deadCode.enabledtrueПредупреждать о функциях с нулевым покрытием.
staleWarning.enabledtrueПомечать файлы, содержимое которых больше не соответствует прогону.
explorerBadges.enabledfalseЗначки покрытия и подсказка рядом с файлами в Проводнике.
coverageFile.rememberPickstrueЗаписывать каждый выбранный файл в coverageFile.paths.
coverageFile.sources[]Из какого загруженного отчёта берутся числа файла, когда его измеряет больше одного: упорядоченные правила { "files": glob, "report": glob }, решает первое совпавшее. С "combine": "union" (покрыто там, где строку выполнил любой отчёт) или "agree" (только там, где это сделал каждый отчёт, расхождения бирюзовым) подходящие отчёты объединяются. Платные планы. По папкам.
coverageFile.mergeStrategynewestДля файлов, о которых не решает ни одно правило: newest (побеждает отчёт, записанный последним) или order (побеждает более поздняя запись в coverageFile.paths, независимо от времени). По папкам.
sinceLastRun.enabledtrueОтметки на поле редактора у строк, покрытие которых изменилось с предыдущего прогона.
dirtyMarks.enabledtrueСерая точка на поле редактора у строк, изменённых после загрузки прогона.
editorGutter.modeoffoff | uncovered | coverage | heatmap: ничего сверх находок выше, полосы только на непокрытых (и частично покрытых) строках, они же плюс зелёная полоса на каждой покрытой строке, либо они же плюс тёплый оттенок на каждой выполненной строке по числу попаданий. По папкам.
lineHighlightoffoff | uncovered | coverage | heatmap: полупрозрачный фон за самой строкой, для того, что отмечает поле. Отдельная настройка, чтобы поле оставалось чистым, пока пробелы подкрашены, или наоборот. Для каждой папки.
overviewRulerfollowfollow | uncovered | off: получают ли непокрытые строки полосу на обзорной линейке полосы прокрутки. uncovered рисует её даже при выключенном поле — карта пробелов файла вдоль полосы прокрутки и ничего рядом с кодом; off сохраняет столбики и убирает полосу. Для каждой папки.
hitCounts.inlinefalse×N после каждой строки, на которой начинается оператор, включая ×0. По папкам.
testCoverage.publishtrueПубликовать каждый загруженный прогон в собственное представление Test Coverage VS Code (панель Test Explorer, проценты в Проводнике, Show Inline Coverage). Выключено: записи Fucini Coverage в Test Explorer нет; Show in Test Coverage View по-прежнему публикует по запросу.
coverageView.perspectivefoldersКакое дерево показывает представление Coverage: папки и файлы рабочей области или — для отчёта .NET, называющего свои классы (Cobertura, Coverlet, OpenCover) — пространства имён, классы и методы, каждый со своими числами. Выпадающий список в представлении записывает это; он предлагается, только когда прогон несёт имена классов.
coverageView.mergedMarkstrueПри нескольких загруженных файлах трассировки: обводить значок файла трассировки у каждого файла, чьи числа перекрыли более старый отчёт, и позволять щелчку по строке файла трассировки подсвечивать измеренные им файлы. Выключено: обычные значки, без подсветки; строки файлов трассировки по-прежнему считают, что было перекрыто.
excludeCommentstrueИсключать строки комментариев, пустые и LCOV_EXCL_*, а также директивы препроцессора в C, C++, Objective-C, CUDA и C#.
excluded.includeInTotalsfalseУчитывать исключённые строки в итогах.

История

ПараметрПо умолчаниюЧто делает
history.enabledfalseХранить запуски локально для трендов и сравнения.
history.retention20Максимальное число сохранённых запусков.

Быстрые действия строки состояния

Все по умолчанию false, кроме двух последних; включите, чтобы добавить соответствующее действие в быстрое меню: quickActions.compareWithLastRun, openAnnotatedSource, openAnnotatedSourceToSide, toggleAnnotatedSource, toggleWatch, worstCoveredFiles, worstCoveredFolders, worstCoveredFunctions, nextUncovered, previousUncovered, checkThresholds, copyUncoveredLines, compareHistoryRuns, exportJson, exportReport, generateBadge, showTestCoverage, chooseGutterMode, toggleInlineHitCounts.

Телеметрия

ПараметрПо умолчаниюЧто делает
telemetry.enabledfalseТелеметрия использования, по умолчанию выключена. На уровне Community команда Unlock Full Features обменивает её на все возможности Pro, включая MC/DC, на 30 дней, один раз на машину; на платную лицензию это не влияет. Что отправляется, см. в политике конфиденциальности. Ежедневная сводка и уведомление об удалении также зависят от собственного параметра VS Code telemetry.telemetryLevel; сигнал об установке и несколько небольших событий — нет.

Обновления

ПараметрПо умолчаниюЧто делает
update.checkForUpdatestrueПериодически проверять fucini.software и VS Code Marketplace на новый выпуск и предлагать установить более новый.

Лицензирование

ПараметрПо умолчаниюЧто делает
license.key""Ключ активации для ознакомительного пре-релиза (строка FCK1.…). Привязан к этому компьютеру/пользователю; может иметь срок действия и ограничения по функциям. См. Ознакомление и активация.