إصدار للتقييم. كل الميزات أدناه متاحة خلال الفترة التجريبية المجانية البالغة 14 يومًا. وبعدها يتوفر مفتاح ترخيص عند الطلب، يُصدر تلقائيًا، ويمكن للمفتاح تفعيل ميزات مفردة أو تقييدها لكل مستخدم. اطلب ترخيصًا →
حين يكتب الذكاء الاصطناعي الاختبارات
التغطية في مواجهة مجموعة اختبارات مُولَّدة
تعرض النظرة العامة الحجة في صورتها العامة. وهذه هي الحجة نفسها في مواجهة قائمة الميزات، لأن مجموعة اختبارات مُولَّدة تُخفق على نحو له شكل مميّز — كل سطر مسّته، ونصف القرارات لم تُتَّخذ قط، وبضع دوال تَرِد أسماؤها في عناوين الاختبارات ولا تُستدعى أبدًا — وخمسة مما يلي هي ما يجعل ذلك الشكل مرئيًا.
- تغطية الفروع و MC/DC، مع التلميح لكل فرع ولكل قرار، تفصل السطر نُفِّذ عن القرار جرى اختباره. المجموعة التي تسلك المسار السعيد وحده تُقرأ قرابة 100% على الأسطر وقرابة 50% على الفروع، وهذه الفجوة هي النتيجة. تشغيل اختبارات كلّه أخضر لا يُظهر منها شيئًا.
- الدرجة المركّبة هي وسط توافقي، فلا يستطيع مقياس قوي أن يحجب مقياسًا ضعيفًا — وهذا بالضبط الحساب الذي تحتاجه مجموعة مُولَّدة. أخذ متوسط رقم الأسطر مع رقم الفروع سيدفن الرقم الوحيد الجدير بالنظر.
- تحذيرات الشفرة الميتة تُنشئ مدخلًا في لوحة Problems لكل دالة لها أسطر قابلة للقياس وتغطيتها صفر. والمجموعة التي تذكر دالةً في عنوان اختبار ولا تصل إليها أبدًا لا تُخفق في أي موضع آخر.
- تغطية الفروق مقابل مرجع أساس في git تُضيّق كل ما سبق إلى الأسطر التي تغيّرت للتو — الشفرة التي قبِلتها بعد ظهر اليوم، لا متوسط عمر المستودع كله؛ فمع ذلك المتوسط تظل مجموعة كبيرة قائمة تبدو بصحة جيدة بلا عناء.
- Copy Uncovered Lines يُخرج بالضبط ما لم يُنفَّذ قط، بصيغة Markdown — أي شيء يُلصق مباشرةً في المساعد الذي كتب المجموعة أصلًا.
لا شيء من هذا يقرأ اختبارًا ويحكم عليه، ولا ينبغي فهم أي مما هنا على أنه ادّعاء بذلك: فالاختبار الذي لا يحوي أي تأكيد على الإطلاق يغطي مع ذلك كل سطر يمسّه. ما يُقاس هنا هو الجزء الذي لا يستطيع المراجع أن يحمله في رأسه — أي شفرة لم تُنفَّذ قط.
ميزة فريدة لهذا الامتداد
تغطية الأسطر لديك تقول 100%. لكن 312 بايت من ملفك الثنائي لم تُنفَّذ قط.
كل مقياس آخر هنا يُقاس من المصدر: تُجهَّز الشيفرة، ويُشغَّل البناء المجهَّز، ويُحصى ما تفعّل. أما تغطية الشيفرة الهدف فتقيس شيئًا لا تصل إليه أي أداة قائمة على المصدر — كم من الملف الثنائي المبني نُفِّذ فعليًا، ببايتات التعليمات، عبر مراقبة تدفّق التعليمات. يُصدر المترجم شيفرةً لا يقابلها أي سطر في مصدرك: فحوص حدود المصفوفات، وجداول قفز switch، وإفراغ المسجّلات، وروتينات المساعدة في زمن التشغيل للقسمة أو الفاصلة العائمة. لا يظهر شيء من ذلك في مصدرك، لذا لا تستطيع أي أداة قائمة على المصدر — بما فيها هذا الامتداد نفسه، بالنسبة لأي مقياس آخر يقرؤه — أن تخبرك إن كان قد نُفِّذ. وهي أيضًا المقياس الوحيد هنا الذي يجيب عن سؤال هل يغطي هذا لغة التجميع؟، لأن شيفرة التجميع المكتوبة يدويًا لا تُجهَّز أبدًا.
تُسمّي DO-178C ذلك صراحةً: عند المستوى A، يُطلب هذا بالإضافة إلى MC/DC. لا يقرأه أي امتداد آخر لـ VS Code. كيفية الحصول عليه من هدف مضمّن →
القدرات
الأساسيات
- عرض Coverage لكل ملف مقيس، ومسطرة النظرة العامة، وAnnotated Source؛ وفي هامش المحرر نفسه، افتراضيًا، ما يستحق علامة فحسب — أشرطة MC/DC، ومثلثات «منذ آخر تشغيل»، ونقاط الأسطر المحرَّرة — مع أشرطة على الأسطر غير المغطّاة وحدها أو خريطة حرارية لأعداد الإصابات على بُعد إعداد واحد.
- تغطية لكل سطر من العبارات والفروع والدوال والمناطق وMC/DC ونسخ C++، وفقًا لما يوفره ملف التتبع.
- استيعاب صيغ متعددة ودمج حتمي لعدة عمليات تشغيل مع تسجيل المصدر.
- إعادة تعيين المسارات — مسارات جهاز بناء CI ← مساحة العمل المحلية لديك.
- تغطية الفروقات — تُزيّن فقط الأسطر التي تغيرت مقارنة بمرجع أساسي في git.
- شارات Explorer وعنصر شريط حالة على مستوى التشغيل، ملون حسب الدرجة المركّبة.
- وضع المراقبة — إعادة تحميل تلقائية عند تغيّر ملف التتبع.
- Run Tests with Coverage — يتعرّف على مشغّل الاختبارات من جذر مساحة العمل ويشغّله مع تفعيل التغطية، محمّلًا ما يكتبه.
- ملفات التتبع البعيدة — يجوز أن يكون مدخل
coverageFile.pathsعنوانhttps://: يُجلب ملف CI الناتج جلبًا مشروطًا (ETag / Last-Modified)، بالترويسات التي تضبطها فيremote.headers، ويُحمَّل كملف محلي، ويُعاد جلبه على مؤقّت عبرremote.refreshMinutes؛ وحين يفشل الجلب تُحمَّل آخر نسخة منزَّلة بدلًا منه. - المتغيّرات في المسارات —
${workspaceFolder}و${workspaceFolderBasename}و${userHome}و${env:NAME}،${command:id}و${config:section.key}في كل إعداد مسار؛ والمتغيّر المجهول يُترك كما كُتب، فيظهر الخطأ المطبعي في سجل الاكتشاف بدل أن يختفي. - مساحات العمل متعددة الجذور — يُكتشف كل مجلد من إعداداته هو (ملف
.vscode/settings.jsonالخاص به أو مدخله في.code-workspace)، وتندمج ملفات تتبعه في تشغيل واحد، ويجمّع عرض Coverage الملفات حسب المجلد، والمجلد الذي يُضاف أو يُزال يعيد تحميل التغطية من تلقاء نفسه. - مُطلقان آخران لإعادة التحميل — مدخل
coverageFile.pathsالمطلق خارج مساحة العمل يُستطلع، فالملف الذي يظهر هناك يُحمَّل؛ ويسمّيwatch.reloadAfterTasksمهامّ (npm: test) يعيد انتهاؤها تحميل التغطية، سواء كان وضع المراقبة مفعّلًا أم لا. - تقدّم يمكن إلغاؤه — تحميل عشرة ملفات تتبع أو أكثر، أو 8 ميغابايت أو أكثر منها، وكل Generate Full HTML Report يجريان تحت إشعار تقدّم بزر Cancel؛ والإلغاء يُبقي التشغيل السابق محمَّلًا.
- عرض Test Coverage الخاص بـ VS Code نفسه — يُنشر كل تحميل أيضًا عبر واجهة Test Coverage الخاصة بالمحرر (
testCoverage.publish)، فتعرض لوحة التغطية في Test Explorer والنسب المئوية لكل ملف في Explorer ومفتاح Show Inline Coverage في المحرر الأرقام نفسها؛ وينشر Show in Test Coverage View عند الطلب ويفتح اللوحة. عندما تكون للاختبارات أسماء (TN:في lcov)، يصفّي العرض تغطية الملف حسب الاختبار. - قاعدة إعادة تعيين مقترحة — حين يترك التحميل ملفات بلا تطابق (مسارات حاوية أو CI مقابل نسخة محلية)، يستنتج الامتداد قاعدة
pathRemapالتي تفسّر أكبر عدد منها، ويعرض Apply Suggested Remap في نتيجة التحميل وSuggest Path Remap Rule في لوحة الأوامر؛ ولا يُكتب شيء من دون النقرة. - أنماط التجاهل — يُسقط
fuciniCoverage.ignore(vendor/**،**/*.generated.ts) ملفات كاملة من التشغيل عند التحميل، فيَعُدّ كل عرض وبوابة وتصدير من دونها؛ وتقول نتيجة التحميل كم ملفًا وتسمّي المخرجات كلًّا منها. - غير مقيس مقابل غير مغطّى — الملف الذي لم يحمّله أي اختبار لا يُحتسب 0% من وراء ظهرك؛ يقول شريط الحالة غير مقيس عنه، ويستطيع
unmeasured.modeسرد هذه الملفات في عرض Coverage أو احتساب كلٍّ منها ملفًا غير مغطّى، معthreshold.unmeasuredFilesللتحكّم بعددها. - ما فعله الدمج، ظاهرًا — مع تحميل عدة ملفات تتبع، يذكر كل صف ملف التقرير الذي جاءت منه أرقامه، وتُحاط الشارة بإطار حيث طغت تلك الأرقام على تقرير أقدم، ويعدّ كل صف ملف تتبع كم من ملفاته طُغي عليها أو طغت على غيرها، والنقر على صف ملف تتبع يُبرز ملفاته في الشجرة (
coverageView.mergedMarks).
الدرجة المركّبة والامتثال
متوسط توافقي مرجّح واحد عبر الأسطر والفروع والدوال والمناطق وMC/DC والنسخ. نظرًا لكونه متوسطًا توافقيًا، لا يمكن إخفاء مقياس ضعيف بواسطة مقياس مثالي. تتوافق الأوزان افتراضيًا مع مستويات IEC 61508 / ISO 26262 / DO-178C، ويتم تحديد حكم COMPLIANT / NON-COMPLIANT بواسطة عتبات لكل مقياس بالإضافة إلى وضع قابل للتكوين.
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، أو Cobertura XML، أو SARIF، أو شارة SVG مستقلة. بخمسة وعشرين قارئًا وهذه الكاتبات يحوّل الامتداد بين التنسيقات: حمّل JaCoCo أو llvm-cov JSON وأصدر LCOV الذي تقرأه Codecov وCoveralls وSonarQube، أو Cobertura XML الذي تستوعبه Jenkins وGitLab وAzure DevOps.
- Generate Coverage Badge — شارة SVG على طراز shields تُكتب مباشرةً في مساحة العمل (
badge.outputPath، افتراضيًاcoverage-badge.svg) ليضمّنها README بـمن دون خدمة مستضافة؛ يختارbadge.metricالأسطر أو الفروع أو MC/DC أو الدرجة المركّبة، ويتبع اللون مستوياتcolorScale.*، ويعيدbadge.autoUpdateكتابتها بعد كل تحميل.
Screenshot pending — add assets/img/report.png (see SCREENSHOTS.md).
Screenshot pending — add assets/img/annotated-source.png (see SCREENSHOTS.md).Community وPro، ميزة بميزة
قائمتان، قاعدة كود واحدة. Community هو المستوى المجاني دائمًا، وهو ما تستقر عليه قائمة Pro بعد تجربتها ذات الأربعة عشر يومًا؛ أما 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 Report | CSV (لكل ملف، لكل دالة) | أيضًا Markdown وLCOV وCobertura XML وSARIF وشارة SVG |
| ملف لم يعد مطابقًا لتغطيته | يُبلَّغ عنه ويُخفَّت | أيضًا السطر أو الدالة أو مجموع التحقق الذي أثبت ذلك |
| الطفرات الناجية | تُعلَّم على السطر، مع عددها | وكذلك ما غيّرته كل طفرة |
| الاختبارات التي نفّذت السطر | عددها | وكذلك أسماؤها |
| CRAP | Max 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 Code | Visual 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 هي واجهة VS Code API |
| شارات المستكشف | ✓ | — (لا يستطيع Solution Explorer تزيين الملفات) |
| Annotated Source، تقرير HTML، التصديرات، Check Thresholds، Error List، السجل والاتجاه، تغطية الفروق | ✓ | ✓ |
| أي الاختبارات نفّذت سطرًا، الاستبعاد من الشجرة ومن المحرر، منظور مساحات الأسماء ومربع البحث، جلسات التغطية، مخطط الاتجاه، خط الأساس لـ CI | ✓ | ✓، بالإضافة إلى Run Native Project with Coverage لمشروع C++ |
| المستوى المجاني، التجربة، الدفع | ✓ | — (خطة مدفوعة؛ يُعثر على المفتاح على جهاز فُعِّل فيه VS Code) |
الآتي: كل هذه التغطية في Azure DevOps، في امتداد مجاني. لا يعرض Azure DevOps التغطية على البناء إلا بقدر ما يبلغه تنسيقه هو — الأسطر، والفروع نسبةً مئوية. سيعرض Fucini DevOps Studio كل ما يقرؤه Coverage Studio: كل واحد من هذه التنسيقات الخمسة والعشرين، لكل لغة، مع 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} فيه ذلك المجلد.
التوطين
| الإعداد | الافتراضي | ما الذي يفعله |
|---|---|---|
language | auto | يثبّت واجهة التشغيل الخاصة بهذا الامتداد (شريط الحالة، الإشعارات، التلميحات، عروض الويب للترخيص والتقرير) على لغة محددة، بصرف النظر عن لغة عرض 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 | [] | ملفات التتبّع التي تُحمَّل وتُدمَج، بالنسبة إلى المجلد الأساسي، أو مطلقة (بالمتغيّرات نفسها المذكورة أعلاه)، أو عنوان http(s):// يُجلب عند كل تحميل — أضف #lcov.info (أو اسم ملف آخر) جزءًا مُلحقًا بالعنوان حين لا يحمل العنوان نفسه امتدادًا. نمط * النسبي يبحث بشكل متكرر تحت المجلد الأساسي؛ ويمكن أن يحوي المدخل المطلق أيضًا حرف بدل (${workspaceFolder}/build/coverage-merged/*.lcov.info، و** لأي عمق)، ويُبحث عنه تحت المجلدات التي تسبقه. لكل مجلد. |
watch.enabled | true | إعادة تحميل التغطية عند تغيّر ملف تتبّع — أو ظهوره، في حالة مدخل مطلق خارج مساحة العمل. لكل مجلد. |
watch.reloadAfterTasks | [] | أسماء المهام (label، أو source: name مثل npm: test) التي يعيد انتهاؤها تحميل التغطية، سواء كان watch.enabled مفعّلًا أم لا. لكل مجلد. |
remote.headers | [] | ترويسات Name: value تُرسل مع كل جلب لعنوان URL؛ تُوسَّع المتغيّرات، فيُبقي Authorization: Bearer ${env:CI_TOKEN} الرمز خارج settings.json. لكل مجلد. |
remote.refreshMinutes | 0 | إعادة جلب مدخلات URL كل N دقيقة (GET مشروط؛ 0 = عند التحميل فقط). لكل مجلد. |
baseline.report | "" | التقرير الذي يُقارن به كل تشغيل محمَّل — تقرير الفرع الرئيسي، كما ينشره خادم البناء: عنوان URL يُجلب بترويسات remote.headers ويُخزَّن مؤقتًا كما يُخزَّن عنوان URL في coverageFile.paths، أو مسار مُخرَج بناء منزَّل، مطلقًا أو نسبيًا إلى المجلد. تقول بطاقة شريط الحالة عندها أين يقف هذا التشغيل منه، ويسرد Compare with CI Baseline الملفات التي تحرّكت. فارغ: لا خط أساس. لكل مجلد. |
مقياس الألوان والشارات
| الإعداد | الافتراضي | ما الذي يفعله |
|---|---|---|
colorScale.preset | default | يستبدل colorblind الأحمر والكهرماني والأخضر بالقرمزي والبرتقالي والأزرق (Okabe–Ito) أينما تُلوَّن التغطية؛ والألوان التي غيّرتها أدناه لها الأولوية. |
colorScale.lowColor | #8b1a1a | الطرف الأدنى من تدرّج التغطية. |
colorScale.midColor | #b8860b | اللون المحوري للتدرّج. |
colorScale.highColor | #228b22 | الطرف الأعلى (100%) من التدرّج. |
colorScale.lowThreshold | 80 | النسبة التي تنتقل عندها الشارة من منخفض إلى متوسط. |
colorScale.highThreshold | 90 | النسبة التي تنتقل عندها الشارة من متوسط إلى مرتفع (وهي أيضًا محور التدرّج). |
heatmap.colors | ["#fff1a8", …, "#a63603"] | درجات الخريطة الحرارية الخمس في السمة الفاتحة، من السطر الأقل تنفيذًا إلى السطر الأكثر تنفيذًا. |
heatmap.colorsDark | ["#6e5f22", …, "#ff6a00"] | الشيء نفسه للسمة الداكنة، حيث يعني الأسطع مراتٍ أكثر. |
الدرجة المركّبة (المتوسط التوافقي المرجّح)
| الإعداد | الافتراضي | ما الذي يفعله |
|---|---|---|
whmWeights.lines | 1 | وزن تغطية الأسطر/العبارات. |
whmWeights.functions | 1 | وزن تغطية الدوال. |
whmWeights.regions | 1.5 | وزن تغطية المناطق (llvm-cov). |
whmWeights.branches | 2 | وزن تغطية التفرّعات. |
whmWeights.mcdc | 4 | وزن تغطية MC/DC. القيمة 0 تستبعدها. |
whmWeights.instantiations | 0.5 | وزن إنشاء نسخ قوالب C++ (llvm-cov). |
العتبات والامتثال
| الإعداد | الافتراضي | ما الذي يفعله |
|---|---|---|
threshold.profile | standard | يضبط standard القيم الافتراضية الواردة أدناه؛ ويضع safety كل بوابة عند 100 باستثناء درجة الطفرات؛ أما custom فيترك ما ضبطته كما هو. وفي الملف الافتراضي تبقى مقاييس السلامة بلا بوابة — فالمشروع الذي لا يقيس MC/DC لا يُعدّ راسبًا بسبب ذلك. |
threshold.statement | 80 | أدنى نسبة للعبارات. القيمة 0 تعطّل الفحص. |
threshold.branch | 70 | أدنى نسبة للتفرّعات. |
threshold.mcdc | 0 | أدنى نسبة لـ MC/DC. |
threshold.functions | 80 | أدنى نسبة للدوال. |
threshold.regions | 75 | أدنى نسبة للمناطق (llvm-cov). |
threshold.instantiations | 0 | أدنى نسبة لإنشاء النسخ (llvm-cov)؛ تُتخطّى المشاريع المكتوبة بلغة C فقط. |
threshold.conditions | 0 | أدنى نسبة للشروط. |
threshold.functionCalls | 0 | أدنى نسبة لاستدعاءات الدوال، حيثما وفّرها التقرير. |
threshold.objectCode | 0 | أدنى نسبة للشيفرة الهدف، حيثما وفّرها التقرير. |
threshold.mutation | 0 | أدنى درجة للطفرات، حيثما كان تقرير طفرات محمَّلًا. |
threshold.weighted | 75 | أدنى درجة مركّبة. |
compliance.mode | strict | strict | whm | both | either. |
compliance.diagnostics | false | خطأ واحد في المشكلات لكل عتبة لم تتحقق، على ملف التتبّع. |
threshold.unmeasuredFiles | -1 | أقصى عدد للملفات غير المقيسة (يتطلّب ضبط unmeasured.mode على list أو count). -1 لا يفحص؛ و0 يُخفق عند أول ملف لم يحمّله أي اختبار. |
problems.perLine | off | off | uncovered | uncoveredAndPartial: مدخل Information (خط متعرّج في المحرر) لكل كتلة من الأسطر غير المغطّاة المتتالية في كل مستند مفتوح، واختياريًا مدخل لكل سطر فيه فرع لم يُسلك قط. مستقل عن problems.enabled. لكل مجلد. |
الفروقات وإعادة التعيين والتقارير
| الإعداد | الافتراضي | ما الذي يفعله |
|---|---|---|
pathRemap | [] | عمليات إعادة كتابة المسارات {from,to} بالترتيب؛ يجوز أن يستخدم to المتغيّر ${workspaceRoot}، الذي يجرّب مجلد ملف التتبّع نفسه أولًا ثم كل مجلد آخر في مساحة العمل. حين يترك التحميل ملفات بلا تطابق، تعرض نتيجة التحميل Apply Suggested Remap بالقاعدة المستنتجة من المسارات غير المتطابقة (وكذلك Suggest Path Remap Rule في لوحة الأوامر)؛ ولا يُكتب شيء حتى تنقر عليه. لكل مجلد. |
ignore | [] | أنماط glob لملفات كاملة تُستبعد من التشغيل (vendor/**، **/*.generated.ts، build/**) — تُسقَط عند التحميل، فيَعُدّ كل عرض وبوابة وتصدير من دونها. تُطابَق مع المسار النسبي لمساحة العمل ومع المسار المطلق؛ والنمط الخالي من / يطابق اسمًا على أي عمق، مثل .gitignore. لكل مجلد. |
ignore.generated | true | يُبقي ملفات .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.perTest | false | يشغّل Run Tests with Coverage وصفة dotnet test صنفَ اختبار واحدًا في كل مرة ويسم كل تقرير بصنفه، فيستطيع التلميح وCodeLens وShow Tests That Ran This Line أن تقول أي الاختبارات نفّذت سطرًا — أبطأ، ولـ .NET فقط، الذي لا يستطيع تقرير Cobertura الخاص به قول ذلك بنفسه. لكل مجلد. |
testRun.onSave | false | حفظ ملف مصدر يشغّل الاختبارات التي تغطّيه، مع التغطية، بعد لحظة من الحفظ: لحلّ .NET مشاريعُ الاختبار التي تشير إلى مشروع الملف المحفوظ فقط، بأمر dotnet test واحد لكل منها؛ ولأي مشغّل آخر وصفته كاملةً. عدة عمليات حفظ تشغيلٌ واحد؛ والتشغيل الجاري لا يُقاطَع. لكل مجلد. |
testRun.skipWhenTestsFail | false | يترك Run Tests with Coverage التغطية على الشاشة كما كانت عندما يخرج المشغّل بفشل، ويقول ذلك في جزء Output — فلا يصبغ تشغيلٌ أحمر ملفًا أخضر بالأحمر. لكل مجلد. |
unmeasured.mode | off | off | list | count: ما يُفعل بملفات مساحة العمل من نوع التشغيل التي لم يحمّلها أي اختبار (راجع غير مقيس مقابل غير مغطّى). يسمّيها list في عرض Coverage ونتيجة التحميل؛ ويحتسب count كلًّا منها أيضًا ملفًا غير مغطّى بعدد أسطر شيفرته. وتغييره يعيد التحميل. |
unmeasured.exclude | ["**/*.h", "**/*.hpp", "**/*.hh", "**/*.inl", "**/*.d.ts"] | ملفات لا تُسمّى غير مقيسة أبدًا، بصيغة glob الخاصة بـ ignore — الملفات المقتصرة على الترويسات أو التصريحات افتراضيًا. لكل مجلد. |
hotspots.crapThreshold | 30 | الدالة التي تبلغ درجة CRAP هذه أو تتجاوزها هي بؤرة خطر، تُسرد تحت شجرة عرض Coverage، الأسوأ أولًا — و30 هو الرقم الذي اقترحه واضعو هذا المقياس. ولا يحوي أيًّا منها إلا التقارير التي تحمل التعقيد الدوري. لكل مجلد. |
hotspots.complexityThreshold | 0 | الدالة التي تبلغ هذا التعقيد أو تتجاوزه بؤرة خطر أيضًا، أيًّا كانت تغطيتها؛ و0 يعطّله. لكل مجلد. |
gitDiff.enabled | false | قصر التغطية على الأسطر المتغيّرة مقارنةً بمرجع أساسي. لكل مجلد. |
gitDiff.baseRef | origin/master | مرجع Git الأساسي لتغطية الفروق. لكل مجلد. |
externalHtmlReport.dir | "" | قراءة مجلد HTML جاهز من llvm-cov show من أجل Annotated Source. لكل مجلد. |
htmlReport.outputDir | "" | مجلد الإخراج لأمر Generate Full HTML Report. لكل مجلد. |
badge.outputPath | coverage-badge.svg | المكان الذي يكتب فيه Generate Coverage Badge ملف SVG — نسبةً إلى مجلد مساحة العمل أو مطلقًا، بالمتغيّرات نفسها التي في coverageFile.defaultLocation؛ وتُنشأ المجلدات الأصل. لكل مجلد. |
badge.metric | lines | lines | branches | mcdc | weighted: الرقم على مستوى التشغيل الذي يظهر على الشارة (weighted هو الدرجة المركّبة لشريط الحالة). لا بيانات له ← n/a رمادية. لكل مجلد. |
badge.autoUpdate | false | إعادة كتابة الشارة بعد كل تحميل ناجح، بصمت (تُسجَّل بوصفها [FUCINI_BADGE]). لكل مجلد. |
العرض والتحليل
| الإعداد | الافتراضي | ما الذي يفعله |
|---|---|---|
mcdcGutter.enabled | false | شريط هامش MC/DC ملوّن. |
statusBar.enabled | true | إظهار عناصر شريط الحالة للتشغيل بأكمله ولكل ملف. |
statusBar.showLauncher | true | مشغّل قائمة سريعة متاح دائمًا. |
statusBar.showModeToggle | true | زر في شريط الحالة يسمّي وضع الهامش؛ ونقرة واحدة تنقله إلى الوضع التالي. |
codeLens.enabled | true | CodeLens للتغطية لكل دالة. |
deadCode.enabled | true | التحذير من الدوال ذات التغطية الصفرية. |
staleWarning.enabled | true | تمييز الملفات التي لم يعد محتواها مطابقًا لتشغيلها. |
explorerBadges.enabled | false | شارات التغطية والتلميح بجوار الملفات في المستكشف. |
coverageFile.rememberPicks | true | كتابة كل ملف مختار في coverageFile.paths. |
coverageFile.sources | [] | من أي تقرير محمَّل تأتي أرقام الملف حين يقيسه أكثر من تقرير: قواعد مرتّبة { "files": glob, "report": glob }، تحسم أولاها مطابقةً. ومع "combine": "union" (مغطى حيث نفّذ أي تقرير السطر) أو "agree" (فقط حيث نفّذه كل تقرير، والاختلافات بالأزرق المخضر) تُدمج التقارير المطابقة. الخطط المدفوعة. لكل مجلد. |
coverageFile.mergeStrategy | newest | للملفات التي لا تقرّر فيها أي قاعدة: newest (يفوز التقرير الذي كُتب أخيرًا) أو order (يفوز الإدخال اللاحق في coverageFile.paths، أيًّا كانت الأوقات). لكل مجلد. |
sinceLastRun.enabled | true | علامات هامش على الأسطر التي تغيّرت تغطيتها منذ التشغيل السابق. |
dirtyMarks.enabled | true | نقطة هامش رمادية على الأسطر المعدَّلة منذ تحميل التشغيل. |
editorGutter.mode | off | off | uncovered | coverage | heatmap: لا شيء غير النتائج المذكورة أعلاه، أو أشرطة على الأسطر غير المغطّاة (والمغطّاة جزئيًا) فقط، أو تلك مع شريط أخضر على كل سطر مغطّى، أو تلك مع ظلّ دافئ على كل سطر نُفِّذ بحسب عدد الإصابات. لكل مجلد. |
lineHighlight | off | off | uncovered | coverage | heatmap: لون شبه شفاف خلف السطر نفسه، لما يعلّمه الهامش. إعداد مستقل، حتى يبقى الهامش نظيفًا بينما تُلوَّن الفجوات، أو العكس. لكل مجلد. |
overviewRuler | follow | follow | uncovered | off: ما إذا كانت الأسطر غير المغطاة تحصل على شريط في مسطرة النظرة العامة لشريط التمرير. يرسمه uncovered حتى مع إيقاف الهامش — خريطة لفجوات الملف على امتداد شريط التمرير ولا شيء بجوار الشفرة؛ ويُبقي off الأعمدة ويحذف الشريط. لكل مجلد. |
hitCounts.inline | false | ×N بعد كل سطر تبدأ عنده عبارة، بما في ذلك ×0. لكل مجلد. |
testCoverage.publish | true | نشر كل تشغيل محمَّل إلى عرض Test Coverage الخاص بـ VS Code نفسه (لوحة Test Explorer، والنسب المئوية في Explorer، وShow Inline Coverage). عند التعطيل: لا مدخل Fucini Coverage في Test Explorer؛ وما زال Show in Test Coverage View ينشر عند الطلب. |
coverageView.perspective | folders | أي شجرة يعرضها عرض Coverage: مجلدات مساحة العمل وملفاتها، أو — لتقرير .NET يسمّي أصنافه (Cobertura وCoverlet وOpenCover) — مساحات الأسماء والأصناف والتوابع، لكل منها أرقامها. تكتب القائمة المنسدلة في العرض هذا الإعداد؛ ولا تُعرض إلا عندما يحمل التشغيل أسماء أصناف. |
coverageView.mergedMarks | true | مع تحميل عدة ملفات تتبع: إحاطة شارة ملف التتبع بإطار لكل ملف طغت أرقامه على تقرير أقدم، والسماح للنقر على صف ملف تتبع بإبراز الملفات التي قاسها. عند الإيقاف: شارات عادية وبلا إبراز؛ وتظل صفوف ملفات التتبع تعدّ ما طُغي عليه. |
excludeComments | true | استبعاد أسطر التعليقات والأسطر الفارغة & أسطر LCOV_EXCL_*، وموجّهات المعالج المسبق في C وC++ وObjective-C وCUDA وC#. |
excluded.includeInTotals | false | احتساب الأسطر المستبعدة ضمن الإجماليات. |
السجل
| الإعداد | الافتراضي | ما الذي يفعله |
|---|---|---|
history.enabled | false | حفظ عمليات التشغيل محليًا للاتجاه والمقارنة. |
history.retention | 20 | أقصى عدد لعمليات التشغيل المحفوظة. |
إجراءات سريعة لشريط الحالة
الكل افتراضيًا false عدا الأخيرين؛ فعّل لإضافة الإجراء المطابق إلى القائمة السريعة: quickActions.compareWithLastRun، openAnnotatedSource، openAnnotatedSourceToSide، toggleAnnotatedSource، toggleWatch، worstCoveredFiles, worstCoveredFolders، worstCoveredFunctions، nextUncovered، previousUncovered، checkThresholds، copyUncoveredLines، compareHistoryRuns، exportJson، exportReport، generateBadge، showTestCoverage، chooseGutterMode، toggleInlineHitCounts.
القياس عن بُعد
| الإعداد | الافتراضي | ما الذي يفعله |
|---|---|---|
telemetry.enabled | false | بيانات الاستخدام، مُعطَّلة افتراضيًا. في مستوى Community، يبادلها Unlock Full Features بكل ميزات Pro، بما فيها MC/DC، لمدة 30 يومًا، مرة واحدة لكل جهاز؛ والترخيص المدفوع لا يتأثر بها. لمعرفة ما يُرسَل، راجع سياسة الخصوصية. ويخضع الملخّص اليومي وإشعار الإزالة أيضًا لإعداد telemetry.telemetryLevel الخاص بـ VS Code؛ أمّا إشعار التثبيت وبعض الأحداث الصغيرة فلا. |
التحديثات
| الإعداد | الافتراضي | ما الذي يفعله |
|---|---|---|
update.checkForUpdates | true | التحقق دوريًا من fucini.software ومن VS Code Marketplace بحثًا عن إصدار أحدث، واقتراح تثبيت الأحدث منهما. |
الترخيص
| الإعداد | الافتراضي | ما الذي يفعله |
|---|---|---|
license.key | "" | مفتاح التفعيل للإصدار التجريبي المسبق (سلسلة بالشكل FCK1.…). مرتبط بهذا الجهاز/المستخدم، وقد يحمل تاريخ انتهاء وحدودًا لكل ميزة. راجع التقييم والتفعيل. |