Coverage Studio בשורת הפקודה 2.2026.4 — קובץ שנמדד בשני מנועים נספר פעם אחת, מאיזו תיקייה שלא תפעילו את הפקודה
2026-10-04
תוקן
- התיקייה שממנה אתם מפעילים את הפקודה אינה קובעת מה דוח אומר. גרסה 2.2026.3 מעגנת את הנתיבים היחסיים של דוח בתיקייה שבה אותו דוח נכתב — אך רק לפקודה שהופעלה במקום אחר. כשהופעלה משורש העץ שהיא מודדת, כלומר מהמקום שממנו פקודת כיסוי מופעלת בדרך כלל, נתיב יחסי עדיין נענה על ידי אותה תיקייה, וקובץ ש-llvm-cov כבר נקב בשמו המלא נספר פעם שנייה: עץ של 5,258 שורות נקרא כ-5,836. כעת מכריעים רק
--cwd ומיקומו של הדוח עצמו. אותו תיקון נמצא בשתי המהדורות, שבהן התיקייה הייתה זו שממנה הופעלו VS Code או Visual Studio. export --format json כתב את הריצה על גבי ההגדרות שלכם. הקובץ שלו היה fucini-coverage.json — אותו שם שממנו נקראות ההגדרות — ולכן בתיקייה שהוגדרה בדרך הרגילה הייצוא השמיד את הספים שלפיהם זה עתה שפט. הריצה נכתבת אל coverage-run.json, ו-export ו-badge מסרבים ל---out שנוקב בשם קובץ ההגדרות. --cwd מקבל תיקייה בכל דרך שתכתבו אותה. תיקייה יחסית — --cwd ., --cwd ../tree — נלקחה כפי שהוקלדה ונקראה לפי כללי הנתיב השגויים: ב-Windows היא השיבה שקובץ הגדרות שחציו POSIX וחציו Windows אינו ניתן לקריאה, ולא מצאה דוחות כלל. גם מפריד בסוף אינו עוד חלק מהתיקייה. - דגל שאיש לא הגדיר אינו דוח.
summary -o out.json לקח את -o כדוח ואמר שאין קובץ כזה. רק -h ו--v קצרים; -- עדיין מעביר קובץ ששמו מתחיל במקף, ודגל שהוקלד לפני הפקודה נקרא בשמו בהודעת השגיאה במקום לקבל בתשובה את כל העזרה. check --json אומר את מה שקוד היציאה שלו אומר. ללא סף מוגדר הוא כתב "passed": false לצד קוד יציאה 0, וצינור שקרא את ה-JSON במקום את קוד היציאה הכשיל ריצה שהפקודה העבירה. passed הוא קוד היציאה במילה אחת; configured הוא זה שאומר שלא היה שער כלל. --lines "" ריק נדחה במקום לכבות את אותו שער בשקט. - השוואה מניחה את קו הבסיס במקום שבו היא מניחה את הריצה.
pathRemap והשורש שדוח מצהיר עליו הוחלו על הריצה ולא על קו הבסיס, ולכן קו בסיס שנכתב בשרת בנייה לא הותאם לדבר, וההשוואה דיווחה ששום דבר לא זז לצד סך כול שבבירור זז.
Coverage Studio בשורת הפקודה 2.2026.3 — קובץ שנמדד בשני מנועים הוא שוב קובץ אחד
2026-10-04
תוקן
- הנתיבים היחסיים של דוח מעוגנים במקום שבו אותו דוח נכתב. llvm-cov כותב את הנתיב המלא של קובץ; gcovr כותב אותו ביחס לתיקיית הבנייה שבה מונח הדוח שלו. כשניתנו שני הדוחות של אותו עץ,
summary מנה פעמיים כל קובץ שהיה משותף לשניהם — פעם עם המספרים של כל מנוע — והוסיף את שניהם לסך הכול, מפני שלנתיב יחסי לא היה שורש להיפתר כנגדו והוא נפתר כנגד התיקייה שבה המסוף הזדמן להיות. עץ של 5,258 שורות דווח כ-5,836, והעודף היה שייך לקבצים תחת נתיב שאינו מכיל אף אחד מהם. כל דוח מעוגן כעת בתיקייה שלו ובתיקיות שמעליה, עד לתיקייה שבה הפקודה רצה, כפי ששתי המהדורות עושות כבר — וכך השניים נפגשים כאוסף קבצים אחד, בלי כלל pathRemap לכל תיקיית בנייה. - קובץ הגדרות שמתחיל בסימן סדר בתים (BOM) נדחה גם הוא. עורך ב-Windows עשוי לכתוב אותו לפני הטקסט; הוא אינו נחשב יותר לחלק מה-JSON.
- פלט שמופנה לקורא שעוצר מוקדם מסתיים בשקט.
summary שהופנה ל-head, או ל-Select-Object -First של PowerShell, מת עם EPIPE שלא טופל ועם עקבות מחסנית. סגירת הצינור בידי הקורא היא בחירתו, לא כשל של הפקודה: היא מסתיימת כעת בקוד היציאה שאליו הגיעה.
Coverage Studio בשורת הפקודה 2.2026.1 — קובץ הגדרות שיש בו תבניות נקרא כעת
2026-10-04
תוקן
- קובץ הגדרות שיש בו תבניות נדחה. כאשר בנתיב אחד של
fuciniCoverage.coverageFile.paths הופיע **/*.lcov.info ובנתיב הבא **/coverage.json, כל פקודה הסתיימה בהודעה is not JSON: מה שנמצא בין השניים נחשב להערה. כעת הקובץ נקרא כפי שעורכי הקוד קוראים אותו, כולל הערה אחרי ערך ופסיק לפני סגירת סוגריים.
Coverage Studio בשורת הפקודה 2.2026.0 — fucini-coverage, הגרסה הראשונה
2026-10-04
נוסף
- הקורא בשורת הפקודה, בחינם.
npm install -g fucini-coverage — אותו קורא כמו בשתי המהדורות, למקומות שבהם אין עורך. חבילה אחת, התנהגות אחת על Windows, Linux, WSL ו-macOS, Node 20 ומעלה.
check, השער. קוד יציאה 1 מתחת לסף על שורות, ענפים, פונקציות, MC/DC, תנאים, אזורים, מוטציות או הציון המשוקלל, מההגדרות או משורת הפקודה; --new-code 80 --base-ref origin/main שופט את השורות שענף שינה, מתוך git diff שהכלי מריץ בעצמו; --require-reasons מכשיל סמן החרגה ללא סיבה.
summary, export, report, badge, compare. הסיכומים וכל קובץ; ההרצה כ-CSV לפי קובץ או לפי פונקציה, Markdown, LCOV, Cobertura, SARIF, רשימת ההחרגות, תג או ה-JSON של Fucini; דוח ה-HTML מרובה העמודים; התג צבוע לפי הסולם שבהגדרות; ההרצה הזו מול קו בסיס, רגרסיות תחילה, עם --fail-on-regression לבדיקה של pull request.
mcp, לסוכן AI. ששת הכלים של המהדורות, מוגשים מתוך ההרצה על 127.0.0.1 מאחורי אסימון, עם הרשומה ל-mcp.json של הלקוח מודפסת.
- קובץ ההגדרות של מהדורת Visual Studio.
fucini-coverage.json לצד הקוד, עם מפתחות ה-fuciniCoverage.* של הגדרות VS Code; .vscode/settings.json מתחתיו. דוחות מצוינים כקבצים, כתיקיות או כתבניות, קובץ .gz נפתח, וכל פקודה מתעדת את עצמה: fucini-coverage help <command>.
Coverage Studio ל-VS Code 2.2026.2 — תקופת הניסיון מתחילה עם תשובת שרת הרישיונות
2026-10-04
שונה
- תקופת הניסיון של התקנה חדשה מתחילה עם התשובה הראשונה של שרת הרישיונות. עד שההרחבה מגיעה פעם אחת אל fucini.software היא פועלת ברמת Community ואומרת מדוע. התקנה שכבר נמצאת בתקופת ניסיון, או שיש לה רישיון, אינה מבחינה בדבר.
- אין תקופת ניסיון בקונטיינר פיתוח או ב-Codespace. שם ההרחבה מתחילה ברמת Community; קוד מנוי, מפתח או הכרטיס ל-7 ימים פותחים הכול.
- פנקס השימוש מכיר מכונה לפי גיבוב שני, של המזהה של מערכת ההפעלה עצמה. נשלח רק הגיבוב; ראו את מדיניות הפרטיות.
Coverage Studio ל-Visual Studio 2.2026.1 — תיקונים קטנים
2026-10-04
תוקן
- תיקונים קטנים. גרסת תחזוקה: תיקונים קטנים מאחורי הקלעים, ושום דבר שמשנה את מה שאתם רואים או את אופן השימוש.
Coverage Studio ל-VS Code 2.2026.1 — תיקונים קטנים
2026-10-04
תוקן
- תיקונים קטנים. גרסת תחזוקה: תיקונים קטנים מאחורי הקלעים, ושום דבר שמשנה את מה שאתם רואים או את אופן השימוש.
Coverage Studio ל-Visual Studio 2.2026.0 — הכיסוי שעל המסך, לסוכני AI
2026-10-04
נוסף
- הכיסוי שעל המסך, לסוכני AI. סוכן שכותב בדיקות יכול היה להריץ אותן ולקרוא אחוז; הוא לא יכול היה לשאול מה Visual Studio יודע. שישה כלים עונים על כך, במילים שסוכן יכול לפעול לפיהן:
coverage_summary, coverage_gaps, tests_for_line, patch_coverage, coverage_delta ו-test_run_command. סוכן שמדבר MCP מגיע אליהם דרך שרת ש-Visual Studio מריץ כאשר fuciniCoverage.mcp.enabled מופעל — כבוי כברירת מחדל, על 127.0.0.1 בלבד, מאחורי אסימון משלכם, וסגור לדפי אינטרנט. Copy MCP Server Configuration מעתיקה ללוח את הרשומה של הלקוח. - אותם מספרים כמו על המסך. הכלים עונים מתוך ההרצה הטעונה — אותן החרגות, אותו מיפוי מחדש — כך שסוכן שהתבקש לכסות את הפערים של פונקציה, וסוקר שמסתכל על השוליים, מדברים על אותן שורות.
שונה
- התוכנית של מפתח רישיון מכריעה ב-Visual Studio את מה שהיא מכריעה ב-VS Code. תוכנית שאינה כוללת יכולת — MC/DC, דוח ה-HTML, שמות הבדיקות שהריצו שורה — השמיטה אותה ב-VS Code ולא כאן. שתי המהדורות קוראות כעת את אותה טבלה: יכולת שהתוכנית אינה כוללת אינה זמינה, והפקודה שלה אומרת זאת.
- הגרסה המזערית ששרת הרישיונות דורש תקפה גם כאן. שתי המהדורות נושאות את אותה גרסה החל מ-2.2026.0, כך ש-build ישן מהמינימום הזה מבקש להתעדכן, כפי שעושה המהדורה ל-VS Code.
Coverage Studio ל-VS Code 2.2026.0 — הכיסוי שעל המסך, לסוכני AI
2026-10-04
נוסף
- הכיסוי שעל המסך, לסוכני AI. סוכן שכותב בדיקות יכול היה להריץ אותן ולקרוא אחוז; הוא לא יכול היה לשאול מה העורך יודע. שישה כלים עונים על כך, במילים שסוכן יכול לפעול לפיהן:
coverage_summary, coverage_gaps, tests_for_line, patch_coverage, coverage_delta ו-test_run_command. לסוכן של VS Code עצמו הם זמינים ככלי מודל שפה, בלי צורך להגדיר דבר. כל סוכן אחר שמדבר MCP מגיע אליהם דרך שרת שההרחבה מריצה כאשר fuciniCoverage.mcp.enabled מופעל — כבוי כברירת מחדל, על 127.0.0.1 בלבד, מאחורי אסימון משלכם, וסגור לדפי אינטרנט. Copy MCP Server Configuration מעתיקה ללוח את הרשומה של הלקוח. - אותם מספרים כמו על המסך. הכלים עונים מתוך ההרצה הטעונה — אותן החרגות, אותו מיפוי מחדש — כך שסוכן שהתבקש לכסות את הפערים של פונקציה, וסוקר שמסתכל על השוליים, מדברים על אותן שורות.
Coverage Studio ל-Visual Studio 1.2026.22 — קובץ שנמדד בשני מנועים הוא קובץ אחד
2026-10-04
תוקן
- קובץ שנמדד בשני מנועים הוא קובץ אחד. llvm-cov כותב את הנתיב המלא של קובץ; gcovr כותב אותו ביחס לתיקיית הבנייה שבה מונח הדוח שלו. נתיב יחסי מעוגן בתיקייה של הדוח עצמו ובתיקיות שמעליה — אך לפני כן המפענח שאל אם הנתיב קיים כפי שהוא, ועל השאלה הזאת עונה התיקייה שממנה הופעל Visual Studio עצמו. אם אותה תיקייה הכילה את הקובץ, הנתיב נשאר יחסי: לקובץ היו שני שמות, הוא הופיע פעמיים בחלון Coverage ונספר פעמיים בסיכומים. עץ של 5,258 שורות נקרא כ-5,836. נתיב שאינו נוקב במקום משל עצמו אינו נשאל עוד כלל; הוא מעוגן במקום שבו נכתב הדוח, והשורה אומרת זאת.
Coverage Studio ל-VS Code 1.2026.23 — קובץ שנמדד בשני מנועים הוא קובץ אחד, ומצב השוליים שתבחרו נשאר מחוץ להגדרות שלכם
2026-10-04
תוקן
- קובץ שנמדד בשני מנועים הוא קובץ אחד. llvm-cov כותב את הנתיב המלא של קובץ; gcovr כותב אותו ביחס לתיקיית הבנייה שבה מונח הדוח שלו. נתיב יחסי מעוגן בתיקייה של הדוח עצמו ובתיקיות שמעליה — אך לפני כן המפענח שאל אם הנתיב קיים כפי שהוא, ועל השאלה הזאת עונה התיקייה שממנה הופעל מארח ההרחבות, שאחרי
code . היא שורש הפרויקט שלכם. הנתיב נשאר אז יחסי: לקובץ היו שני שמות, הוא הופיע פעמיים בתצוגת Coverage ונספר פעמיים בסיכומים. עץ של 5,258 שורות נקרא כ-5,836. נתיב שאינו נוקב במקום משל עצמו אינו נשאל עוד כלל; הוא מעוגן במקום שבו נכתב הדוח, והשורה אומרת זאת. - מצב השוליים שתבחרו מחזיק למשך ההפעלה, וההגדרות שלכם נשארות כפי שכתבתם אותן. בחירת מצב משורת המצב, מהבורר או באמצעות Toggle Coverage Painting כתבה אותו אל
settings.json — קובץ שבפרויקטים רבים נמצא תחת בקרת גרסאות, ושכפתור שנועד להילחץ פעמיים בדקה שכתב אותו. הבחירה חיה כעת למשך ההפעלה, ומצב שכתבתם בהגדרות שלכם עדיין מנצח כשהחלון נפתח.
Coverage Studio ל-Visual Studio 1.2026.21 — האם בדיקה הייתה שמה לב? הרצת מוטציות במיקום הסמן
2026-10-03
נוסף
- Run Mutation Tests Here. כיסוי אומר ששורה רצה; כלי מוטציות אומר אם בדיקה הייתה שמה לב שהיא שגויה. הפונקציה שהסמן נמצא בה — או השורות שנבחרו, או הקובץ — היא מה שמריץ המוטציות של התיקייה מתבקש לשנות במוטציות, והדוח שלו נטען לצד הכיסוי שעל המסך: Stryker.NET ל-C#, StrykerJS ל-JavaScript ול-TypeScript, PIT עם Maven ל-Java. הרצת מוטציות של פרויקט נמשכת שעה; של פונקציה אחת, דקה.
Coverage Studio ל-VS Code 1.2026.22 — האם בדיקה הייתה שמה לב? הרצת מוטציות במיקום הסמן
2026-10-03
נוסף
- Run Mutation Tests Here. כיסוי אומר ששורה רצה; כלי מוטציות אומר אם בדיקה הייתה שמה לב שהיא שגויה. הפונקציה שהסמן נמצא בה — או השורות שנבחרו, או הקובץ — היא מה שמריץ המוטציות של התיקייה מתבקש לשנות במוטציות, והדוח שלו נטען לצד הכיסוי שעל המסך: Stryker.NET ל-C#, StrykerJS ל-JavaScript ול-TypeScript, PIT עם Maven ל-Java. הרצת מוטציות של פרויקט נמשכת שעה; של פונקציה אחת, דקה.
Coverage Studio ל-Visual Studio 1.2026.20 — האפליקציה עצמה, עם כיסוי
2026-10-03
נוסף
- Run App with Coverage… מודדת את מה שאדם מגיע אליו, לא רק את מה שהבדיקות עושות: אפליקציית ה-.NET של התיקייה מופעלת תחת
dotnet-coverage של Microsoft, בחלון מסוף משלה, ורצה עד שסוגרים אותה. מה שעברו בו נטען לאחר מכן כמו כל הרצה, ובסשן של כיסוי מתווסף למה שהבדיקות הריצו. נדרש dotnet tool install --global dotnet-coverage.
Coverage Studio ל-VS Code 1.2026.21 — האפליקציה עצמה, עם כיסוי
2026-10-03
נוסף
- Run App with Coverage… מודדת את מה שאדם מגיע אליו, לא רק את מה שהבדיקות עושות: אפליקציית ה-.NET של התיקייה מופעלת תחת
dotnet-coverage של Microsoft, בחלון מסוף משלה, ורצה עד שסוגרים אותה. מה שעברו בו נטען לאחר מכן כמו כל הרצה, ובסשן של כיסוי מתווסף למה שהבדיקות הריצו. נדרש dotnet tool install --global dotnet-coverage.
Coverage Studio ל-Visual Studio 1.2026.19 — תוצרי zip מ-GitHub ומ-GitLab
2026-10-03
נוסף
- בסיס השוואה מ-CI מתוך תוצר zip. GitHub ו-GitLab מפרסמים תוצר כארכיון. היכן ש-
baseline.report מציין כזה — כתובת URL, או zip בדיסק — הוא נפתח והדוח שבתוכו נשמר: הפריט שצוין אחרי ה-# (ci/artifact.zip#coverage/lcov.info), אחרת הקובץ היחיד בארכיון, אחרת הקובץ היחיד בו שנראה כמו דוח.
Coverage Studio ל-VS Code 1.2026.20 — תוצרי zip מ-GitHub ומ-GitLab
2026-10-03
נוסף
- תוצרי zip מ-GitHub ומ-GitLab. CI מפרסם תוצר, ותוצר הוא ארכיון. zip שנמשך נפתח כעת והדוח שבתוכו נשמר — הפריט שצוין אחרי ה-
# בכתובת ה-URL (…/zip#coverage/lcov.info), אחרת הקובץ היחיד בארכיון, אחרת הקובץ היחיד בו שנראה כמו דוח. עבור כתובת URL ב-coverageFile.paths, עבור baseline.report, ועבור בסיס השוואה שהוא zip בדיסק.
תוקן
- הקבצים של בסיס השוואה בפורמט Cobertura לא נמצאו תחת ה-
<source> של הדוח עצמו. ההשוואה אמרה 0 file(s) moved לצד סיכום שזז. כעת נעשה שימוש בשורש שהדוח מציין, כמו בדוח שנטען.
Coverage Studio ל-Visual Studio 1.2026.18 — קוד חדש לפי מחבר ולפי תאריך
2026-10-03
נוסף
- קוד חדש לפי מחבר ולפי תאריך. קוד חדש היה השורות שהשתנו לעומת ref של git. שתי הגדרות שואלות את מה ש-ref אינו יכול:
fuciniCoverage.gitDiff.author — השורות שאדם אחד כתב — ו-fuciniCoverage.gitDiff.since — השורות שנכתבו מאז יום מסוים. שתיהן נקראות מתוך git blame וחלות על כיסוי ה-diff ועל סף הקוד החדש.
Coverage Studio ל-VS Code 1.2026.19 — קוד חדש לפי מחבר ולפי תאריך
2026-10-03
נוסף
- קוד חדש לפי מחבר ולפי תאריך. קוד חדש היה השורות שהשתנו לעומת ref של git. שתי הגדרות שואלות את מה ש-ref אינו יכול:
fuciniCoverage.gitDiff.author — השורות שאדם אחד כתב — ו-fuciniCoverage.gitDiff.since — השורות שנכתבו מאז יום מסוים. שתיהן נקראות מתוך git blame וחלות על כיסוי ה-diff ועל סף הקוד החדש.
Coverage Studio ל-Visual Studio 1.2026.17 — בדיקה אחת עם כיסוי, ב-Go וב-Rust
2026-10-02
נוסף
- Run This Test with Coverage קוראת Go ו-Rust. בקובץ Go, ה-
func TestXxx שהסמן נמצא בה רצה לבדה, בחבילה שלה ולפי שמה המדויק — go test ./pkg/calc -run "^TestTotal$". בקובץ Rust, פונקציית #[test] רצה לפי הנתיב שלה ב-crate, עם --exact; בתוך mod, הבדיקות של אותו מודול; בדיקת אינטגרציה תחת tests/, בקובץ הבינארי שלה.
Coverage Studio ל-VS Code 1.2026.18 — בדיקה אחת עם כיסוי, ב-Go וב-Rust
2026-10-02
נוסף
- Run This Test with Coverage קוראת Go ו-Rust. בקובץ Go, ה-
func TestXxx שהסמן נמצא בה רצה לבדה, בחבילה שלה ולפי שמה המדויק — go test ./pkg/calc -run "^TestTotal$". בקובץ Rust, פונקציית #[test] רצה לפי הנתיב שלה ב-crate, עם --exact; בתוך mod, הבדיקות של אותו מודול; בדיקת אינטגרציה תחת tests/, בקובץ הבינארי שלה.
Coverage Studio ל-Visual Studio 1.2026.16 — כיסוי התנאים של GCC 14, שורה אחר שורה
2026-10-02
נוסף
- כיסוי התנאים של GCC 14, שורה אחר שורה.
-fcondition-coverage נקרא כשתי ספירות לכל קובץ; כעת כל תנאי מסומן בשורה שלו ומצוין בריחוף — תנאי 1 אף פעם לא היה אמת, תנאי 0 אף פעם לא היה אמת ולא שקר — מתוך ה-JSON של gcov ומתוך פלט הטקסט שלו. threshold.conditions קובע לו סף, ב-Copy Coverage Summary יש עמודת Conditions, badge.metric מקבל conditions, והחיפוש מקבל conditions < 80.
תוקן
- נתון הענפים של פונקציה ספר גם את התוצאות של התנאים שלה.
branches 8/12 היכן שהכלי אמר 4 מתוך 6. התנאים מושמטים שם, כמו בנתונים של הקובץ ושל ההרצה.
Coverage Studio ל-VS Code 1.2026.17 — כיסוי התנאים של GCC 14, שורה אחר שורה
2026-10-02
נוסף
- כיסוי התנאים של GCC 14, שורה אחר שורה.
-fcondition-coverage נקרא כשתי ספירות לכל קובץ; כעת כל תנאי מסומן בשורה שלו ומצוין בריחוף — תנאי 1 אף פעם לא היה אמת, תנאי 0 אף פעם לא היה אמת ולא שקר — מתוך ה-JSON של gcov ומתוך פלט הטקסט שלו. threshold.conditions קובע לו סף, ב-Copy Coverage Summary יש עמודת Conditions, badge.metric מקבל conditions, והחיפוש מקבל conditions < 80.
תוקן
- נתון הענפים של פונקציה ספר גם את התוצאות של התנאים שלה.
branches 8/12 היכן שהכלי אמר 4 מתוך 6. התנאים מושמטים שם, כמו בנתונים של הקובץ ושל ההרצה.
Coverage Studio ל-Visual Studio 1.2026.15 — תצוגת Coverage עוקבת אחרי העורך
2026-10-02
נוסף
- תצוגת Coverage עוקבת אחרי העורך. הקובץ שאתם מסתכלים עליו מודגש בעץ, התיקיות שמעליו נפתחות והשורה שלו נגללת אל תוך התצוגה.
fuciniCoverage.coverageView.followActiveEditor מכבה זאת.
Coverage Studio ל-VS Code 1.2026.16 — תצוגת Coverage עוקבת אחרי העורך
2026-10-02
נוסף
- תצוגת Coverage עוקבת אחרי העורך. הקובץ שאתם מסתכלים עליו מודגש בעץ, התיקיות שמעליו נפתחות והשורה שלו נגללת אל תוך התצוגה.
fuciniCoverage.coverageView.followActiveEditor מכבה זאת.
Coverage Studio ל-Visual Studio 1.2026.14 — סימוני החרגה לענפים בלבד, וכיסוי ענפים בדוחות .NET
2026-10-02
נוסף
- סימוני החרגה לענפים בלבד וסימוני החרגה של gcovr.
LCOV_EXCL_BR_LINE ו-LCOV_EXCL_BR_START … LCOV_EXCL_BR_STOP מוציאים מהספירה את הענפים שבשורות שלהם ומשאירים בה את השורות; LCOV_EXCL_EXCEPTION_BR_LINE מוציא רק את הזרועות שחריגה מגיעה אליהן. כל סימון נקרא גם תחת הקידומות של gcovr: GCOVR_EXCL_LINE, GCOVR_EXCL_START, GCOV_EXCL_BR_LINE והשאר.
תוקן
- דוח .NET לא הציג כיסוי ענפים. Coverlet ו-
dotnet-coverage כותבים את התכונה branch של שורת Cobertura כ-True, ורק true באותיות קטנות נקרא — ולכן כל החלטה בדוח כזה הושמטה. שני האיותים נקראים כעת. המספרים זזים: כיסוי הענפים של פרויקט .NET מופיע היכן שלא היה, והציון שלו יחד איתו. - דוח Cobertura שמוזג מכמה עצים מצא רק את הקבצים של העץ הראשון. דוח כזה מציין
<source> אחד לכל עץ; כעת מנסים כל אחד מהם, לפי הסדר שבדוח.
Coverage Studio ל-VS Code 1.2026.15 — סימוני החרגה לענפים בלבד, וכיסוי ענפים בדוחות .NET
2026-10-02
נוסף
- סימוני החרגה לענפים בלבד וסימוני החרגה של gcovr.
LCOV_EXCL_BR_LINE ו-LCOV_EXCL_BR_START … LCOV_EXCL_BR_STOP מוציאים מהספירה את הענפים שבשורות שלהם ומשאירים בה את השורות; LCOV_EXCL_EXCEPTION_BR_LINE מוציא רק את הזרועות שחריגה מגיעה אליהן. כל סימון נקרא גם תחת הקידומות של gcovr: GCOVR_EXCL_LINE, GCOVR_EXCL_START, GCOV_EXCL_BR_LINE והשאר.
תוקן
- דוח .NET לא הציג כיסוי ענפים. Coverlet ו-
dotnet-coverage כותבים את התכונה branch של שורת Cobertura כ-True, ורק true באותיות קטנות נקרא — ולכן כל החלטה בדוח כזה הושמטה. שני האיותים נקראים כעת. המספרים זזים: כיסוי הענפים של פרויקט .NET מופיע היכן שלא היה, והציון שלו יחד איתו. - דוח Cobertura שמוזג מכמה עצים מצא רק את הקבצים של העץ הראשון. דוח כזה מציין
<source> אחד לכל עץ; כעת מנסים כל אחד מהם, לפי הסדר שבדוח.
Coverage Studio ל-Visual Studio 1.2026.13 — קבוצת הבדיקות הקטנה ביותר שעדיין מריצה כל שורה
2026-10-01
נוסף
- Show Minimal Test Set… מוצאת את קבוצת הבדיקות הקטנה ביותר שעדיין מריצה כל שורה שחבילת הבדיקות מריצה, ומציגה מתחתיה את הבדיקות שאינן מוסיפות אף שורה משלהן. להרצה המהירה שלפני commit, ולמי שמדלל את חבילת הבדיקות — עם התזכורת שמיותר לפי שורות אינו מיותר לפי מה שבדיקה בודקת.
Coverage Studio ל-VS Code 1.2026.14 — קבוצת הבדיקות הקטנה ביותר שעדיין מריצה כל שורה
2026-10-01
נוסף
- Show Minimal Test Set… מוצאת את קבוצת הבדיקות הקטנה ביותר שעדיין מריצה כל שורה שחבילת הבדיקות מריצה, ומציגה מתחתיה את הבדיקות שאינן מוסיפות אף שורה משלהן. להרצה המהירה שלפני commit, ולמי שמדלל את חבילת הבדיקות — עם התזכורת שמיותר לפי שורות אינו מיותר לפי מה שבדיקה בודקת.
Coverage Studio ל-Visual Studio 1.2026.12 — החרגות שאומרות למה
2026-10-01
נוסף
- החרגות מנומקות. קוד שהוצא מהספירה במקום שבו הוא כתוב יכול לומר למה —
// LCOV_EXCL_LINE: defensive, unreachable by construction, [ExcludeFromCodeCoverage(Justification = "…")] — והסיבות מדווחות: Export Coverage Report… מציגה את ההחרגות ואת הנימוקים שלהן כ-Markdown וכ-CSV. עם fuciniCoverage.exclusions.requireReason, החרגה שאינה נותנת סיבה היא אזהרה בשורה שלה ומכשילה את Check Coverage Thresholds.
Coverage Studio ל-VS Code 1.2026.13 — החרגות שאומרות למה
2026-10-01
נוסף
- החרגות מנומקות. קוד שהוצא מהספירה במקום שבו הוא כתוב יכול לומר למה —
// LCOV_EXCL_LINE: defensive, unreachable by construction, [ExcludeFromCodeCoverage(Justification = "…")] — והסיבות מדווחות: Export Coverage Report… מציגה את ההחרגות ואת הנימוקים שלהן כ-Markdown וכ-CSV. עם fuciniCoverage.exclusions.requireReason, החרגה שאינה נותנת סיבה היא אזהרה בשורה שלה ומכשילה את Check Coverage Thresholds.
Coverage Studio ל-Visual Studio 1.2026.11 — סף על קוד חדש, והכיסוי שזז בלי עריכה
2026-10-01
נוסף
- סף על קוד חדש, לצד הספים על ההרצה כולה.
fuciniCoverage.threshold.newCode הוא כיסוי השורות המזערי, באחוזים, של השורות שהשתנו לעומת gitDiff.baseRef. Check Coverage Thresholds מכשילה אותו במשפט משלו — New code 72.00% < 80% (18 of 25 line(s) changed against origin/main ran) — וההרצה כולה נשארת על המסך. - Show Indirect Coverage Changes… מציגה את השורות שהכיסוי שלהן זז אף שאיש לא ערך אותן — קוד שהפסיק לרוץ כי בדיקה נעלמה, או כי ענף מוקדם יותר בקוד חוזר כעת מוקדם. מול בסיס ההשוואה מ-CI היכן ש-
baseline.report מציין כזה, אחרת מול ההרצה הקודמת.
Coverage Studio ל-VS Code 1.2026.12 — סף על קוד חדש, והכיסוי שזז בלי עריכה
2026-10-01
נוסף
- סף על קוד חדש, לצד הספים על ההרצה כולה.
fuciniCoverage.threshold.newCode הוא כיסוי השורות המזערי, באחוזים, של השורות שהשתנו לעומת gitDiff.baseRef. Check Coverage Thresholds מכשילה אותו במשפט משלו — New code 72.00% < 80% (18 of 25 line(s) changed against origin/main ran) — וההרצה כולה נשארת על המסך. - Show Indirect Coverage Changes… מציגה את השורות שהכיסוי שלהן זז אף שאיש לא ערך אותן — קוד שהפסיק לרוץ כי בדיקה נעלמה, או כי ענף מוקדם יותר בקוד חוזר כעת מוקדם. מול בסיס ההשוואה מ-CI היכן ש-
baseline.report מציין כזה, אחרת מול ההרצה הקודמת.
Coverage Studio ל-Visual Studio 1.2026.10 — הריצו רק את הבדיקות שהשינויים שלכם נוגעים בהן
2026-10-01
נוסף
- Run Tests Affected by My Changes… מציגה את הבדיקות שהריצו שורה שעץ העבודה משנה לעומת
fuciniCoverage.testImpact.baseRef (HEAD כברירת מחדל), וזו שהריצה את החלק הגדול ביותר של השינוי מופיעה ראשונה. בחירה בבדיקה פותחת אותה; היכן שהדוחות הגיעו מהרצה לכל בדיקה (testRun.perTest), הפריט הראשון מריץ רק את הבדיקות האלה.
תוקן
testRun.skipWhenTestsFail תקף גם אחרי ההרצה. הדוחות שהרצה אדומה כתבה נשארו בדיסק, והצופה טען אותם רגע לאחר מכן. כעת הם מוסרים.- העותק ש-logger של TRX יוצר מדוח כיסוי לעולם אינו נחשב בטעות לקובץ מעקב.
Coverage Studio ל-VS Code 1.2026.11 — הריצו רק את הבדיקות שהשינויים שלכם נוגעים בהן
2026-10-01
נוסף
- Run Tests Affected by My Changes… מציגה את הבדיקות שהריצו שורה שעץ העבודה משנה לעומת
fuciniCoverage.testImpact.baseRef (HEAD כברירת מחדל), וזו שהריצה את החלק הגדול ביותר של השינוי מופיעה ראשונה. בחירה בבדיקה פותחת אותה; היכן שהדוחות הגיעו מהרצה לכל בדיקה (testRun.perTest), הפריט הראשון מריץ רק את הבדיקות האלה.
תוקן
testRun.skipWhenTestsFail תקף גם אחרי ההרצה. הדוחות שהרצה אדומה כתבה נשארו בדיסק, והצופה טען אותם רגע לאחר מכן. כעת הם מוסרים.- העותק ש-logger של TRX יוצר מדוח כיסוי לעולם אינו נחשב בטעות לקובץ מעקב.
Coverage Studio ל-Visual Studio 1.2026.9 — עבר או נכשל, על הסימונים, וקובצי כיסוי הקוד של Visual Studio עצמו
2026-09-30
נוסף
- עבר או נכשל, על הסימונים. שורה שבדיקה נכשלת הריצה מקבלת פס אדום בתחילתה, והריחוף מעליה מציין את הבדיקות שנכשלו; Show Tests That Ran This Line אומרת אילו מהבדיקות נכשלו. נדרשים דוח שאומר אילו בדיקות הריצו שורה, וקובץ התוצאות של מריץ הבדיקות — TRX או JUnit XML — בתיקיית הדוח או כזה שמצוין ב-
fuciniCoverage.testResults.paths. Run Tests with Coverage מבקשת כעת קובץ כזה מ-dotnet test. - כיסוי הקוד של Visual Studio עצמו, נטען. קובץ ה-
.coverage שהפקודה Analyze Code Coverage של Visual Studio כותבת מומר באמצעות dotnet-coverage ונטען מעצמו: Coverage Studio מתבסס על האוסף המובנה במקום להתחרות בו.
Coverage Studio ל-VS Code 1.2026.10 — עבר או נכשל, על הסימונים
2026-09-30
נוסף
- עבר או נכשל, על הסימונים. שורה שבדיקה נכשלת הריצה מקבלת פס אדום בתחילתה, והריחוף מעליה מציין את הבדיקות שנכשלו; Show Tests That Ran This Line אומרת אילו מהבדיקות נכשלו. נדרשים דוח שאומר אילו בדיקות הריצו שורה, וקובץ התוצאות של מריץ הבדיקות — TRX או JUnit XML — בתיקיית הדוח או כזה שמצוין ב-
fuciniCoverage.testResults.paths. Run Tests with Coverage מבקשת כעת קובץ כזה מ-dotnet test.
Coverage Studio ל-Visual Studio 1.2026.8 — טעינות מחדש ששומרות על החיפוש, הסשן וההרצה האחרונה שלכם
2026-09-30
תוקן
- תיבת החיפוש שומרת על השאילתה שלה, ועל המיקוד, כשהכיסוי נטען מחדש. כל טעינה מחדש רוקנה אותה, לעיתים קרובות בזמן שהשאילתה עוד הוקלדה. שאילתה כמו
< 80% משאירה גם את נקודות הסיכון שתואמות לה. - סשן של כיסוי כבר לא סופר את אותה הרצה פעמיים. כל טעינה מחדש של דוחות שלא השתנו הוסיפה אותם שוב, וכל ספירת פגיעות הוכפלה. סשן שומר כעת כל קבוצת דוחות פעם אחת.
- בסיס ההשוואה מ-CI כבר לא מעכב טעינה. הטעינה מצוירת תחילה וההשוואה באה אחריה. הכנת הבסיס נעשית פעם אחת והוא נשמר כל עוד הדוח שלו וההגדרות נשארים כפי שהם, וכשאי אפשר להגיע לכתובת ה-URL נעשה שימוש בעותק שנמשך קודם.
- "מאז ההרצה האחרונה" שורד טעינה מחדש של דוחות שלא השתנו. שינוי בהגדרות או רענון הפכו את ההרצה שעל המסך להרצה האחרונה של עצמה, וכל שינוי מאז ההרצה שלפניה נעלם. קריאה חוזרת כזו גם אינה נשמרת עוד בהיסטוריה.
- טעינה אחת בכל פעם. שתי טעינות מחדש שהתבקשו יחד רצו זו לצד זו, והאיטית ניצחה. הטעינות מחדש שמתבקשות במהלך טעינה הופכות כעת לטעינה אחת אחריה.
- בסיס השוואה מ-CI דרך HTTP נמשך כמו ב-VS Code. לקוח אחד, העותק האחרון נשמר למקרה שאי אפשר להגיע לשרת, ו-
remote.headers נשלחות רק לכתובת שעבורה נכתבו — לעולם לא דרך HTTP לא מוצפן. - פקודה שהעבודה שלה נכשלת אומרת זאת. כשל בפקודה או בטיימר נבלע; כעת הוא שורה בחלון Output.
- פחות עבודה על תהליכון ממשק המשתמש. צופי הקבצים נוצרים ברקע, הרשומות של Error List מחושבות פעם אחת לכל טעינה, והיומן נכתב במקבצים במקום שורה אחר שורה.
- שני חלונות של Visual Studio כבר לא פוגעים בהיסטוריית ההרצות. האינדקס שלה מוחלף בצעד אחד תחת נעילה ששניהם חולקים, ונבנה מחדש מתוך ההרצות כשהוא אובד.
- Run Native Project with Coverage בונה לפלטפורמה של הפרויקט עצמו, ולוקחת את
llvm-cov ואת llvm-profdata מה-LLVM של המהדר, כזוג. - צבעי האזהרה, השגיאה וההצלחה של חלון Coverage מותאמים לערכת נושא בהירה כמו גם לכהה.
- קובץ הגדרות שפתוח עם שינויים שלא נשמרו אינו נדרס. דף ההגדרות אומר לשמור אותו תחילה.
שונה
- את קובץ הכיסוי שבחרתם, ואת הדוח שהרצת בדיקות כותבת, זוכרים בשבילכם במקום לכתוב אותם אל
.vscode/settings.json. הקובץ הזה נכנס לעיתים קרובות ל-commit, ולכן הרצת בדיקות השאירה במאגר שינוי שאיש לא ביקש. נתיבים שכבר נמצאים ב-coverageFile.paths ממשיכים לעבוד.
Coverage Studio ל-VS Code 1.2026.9 — טעינות מחדש ששומרות על החיפוש, הסשן וההרצה האחרונה שלכם
2026-09-30
תוקן
- תיבת החיפוש שומרת על השאילתה שלה, ועל המיקוד, כשהכיסוי נטען מחדש. כל טעינה מחדש רוקנה אותה, לעיתים קרובות בזמן שהשאילתה עוד הוקלדה. שאילתה כמו
< 80% משאירה גם את נקודות הסיכון שתואמות לה. - סשן של כיסוי כבר לא סופר את אותה הרצה פעמיים. כל טעינה מחדש של דוחות שלא השתנו הוסיפה אותם שוב, וכל ספירת פגיעות הוכפלה. סשן שומר כעת כל קבוצת דוחות פעם אחת.
- בסיס ההשוואה מ-CI כבר לא מעכב טעינה. הטעינה מצוירת תחילה וההשוואה באה אחריה. הכנת הבסיס נעשית פעם אחת והוא נשמר כל עוד הדוח שלו וההגדרות נשארים כפי שהם, וכשאי אפשר להגיע לכתובת ה-URL נעשה שימוש בעותק שנמשך קודם.
- הבדיקה אם קובצי דוחות השתנו מבצעת מעבר אחד בכל פעם. בכונן רשת איטי שני מעברים ראו את אותו שינוי, והכיסוי נטען פעמיים.
- "מאז ההרצה האחרונה" שורד טעינה מחדש של דוחות שלא השתנו. שינוי בהגדרות או רענון הפכו את ההרצה שעל המסך להרצה האחרונה של עצמה, וכל שינוי מאז ההרצה שלפניה נעלם. קריאה חוזרת כזו גם אינה נשמרת עוד בהיסטוריה.
שונה
- את קובץ הכיסוי שבחרתם, ואת הדוח שהרצת בדיקות כותבת, זוכרים בשבילכם במקום לכתוב אותם אל
.vscode/settings.json. הקובץ הזה נכנס לעיתים קרובות ל-commit, ולכן הרצת בדיקות השאירה במאגר שינוי שאיש לא ביקש. נתיבים שכבר נמצאים ב-coverageFile.paths ממשיכים לעבוד.
Coverage Studio ל-Visual Studio 1.2026.7 — הרצות בדיקות שמריצות בדיוק את מה שהן מציינות
2026-09-30
תוקן
- פתרון .NET עם שני פרויקטי בדיקה או יותר כבר לא מאבד את הכיסוי של כל הפרויקטים מלבד אחד.
dotnet test כתב דוח אחד לכל פרויקט, וכולם הועברו אל אותו coverage/coverage.cobertura.xml, כך שרק האחרון נטען. תיקייה כזו מריצה כעת את dotnet test פעם אחת לכל פרויקט בדיקה, כל דוח נכנס אל coverage/<Project>/, והרצה של פרויקט אחד מחליפה רק את הדוח של אותו פרויקט. - שמירת כמה קבצים בבת אחת מריצה את הבדיקות של כל קובץ שנשמר. עם
testRun.onSave רצו רק הבדיקות של הקובץ האחרון; שמירות שמגיעות בזמן שהרצה מתבצעת ממתינות ומורצות יחד אחריה. - Run This Test with Coverage וההרצות לכל בדיקה מריצות בדיוק את מה שהן מציינות. המסנן של .NET התאים לפי תת-מחרוזת:
Total הריץ גם את TotalTax. בדיקה רצה כעת לפי שמה המדויק, מחלקה לפי שמה ואחריו נקודה, ובדיקה במחלקה מקוננת נמצאת (Outer+Inner). - בדיקת jest או vitest שבכותרת שלה יש
(, + או $ רצה. הכותרת הועברה אל -t, שקורא ביטוי רגולרי, ולכן בדיקה כזו לא התאימה לכלום ושום דבר לא רץ. - Run This Test with Coverage קוראת קובצי בדיקה של VB ושל F#.
<Fact> מעל Public Sub, ו-[<Fact>] מעל let או member, מעולם לא זוהו. - ביטול הרצת בדיקות מסיים כל תהליך שהיא הפעילה. רק המעטפת הסתיימה, ו-
dotnet test המשיך לרוץ מאחוריה. גם סגירת Visual Studio מבטלת את ההרצה. - הקלדה במהלך הרצה שאחרי שמירה כבר לא מזיזה את הסימונים. הם מוצמדים לטקסט שההרצה מדדה.
- פתרון שנמצא בשיתוף רשת מריץ את הבדיקות שלו שם. ההרצה התחילה ב-
C:\Windows, כי מעטפת הפקודות אינה מקבלת נתיב \\server\share כתיקייה שלה.
Coverage Studio ל-VS Code 1.2026.8 — הרצות בדיקות שמריצות בדיוק את מה שהן מציינות
2026-09-30
תוקן
- פתרון .NET עם שני פרויקטי בדיקה או יותר כבר לא מאבד את הכיסוי של כל הפרויקטים מלבד אחד.
dotnet test כתב דוח אחד לכל פרויקט, וכולם הועברו אל אותו coverage/coverage.cobertura.xml, כך שרק האחרון נטען. תיקייה כזו מריצה כעת את dotnet test פעם אחת לכל פרויקט בדיקה, כל דוח נכנס אל coverage/<Project>/, והרצה של פרויקט אחד מחליפה רק את הדוח של אותו פרויקט. - שמירת כמה קבצים בבת אחת מריצה את הבדיקות של כל קובץ שנשמר. עם
testRun.onSave רצו רק הבדיקות של הקובץ האחרון; שמירות שמגיעות בזמן שהרצה מתבצעת ממתינות ומורצות יחד אחריה. - Run This Test with Coverage וההרצות לכל בדיקה מריצות בדיוק את מה שהן מציינות. המסנן של .NET התאים לפי תת-מחרוזת:
Total הריץ גם את TotalTax. בדיקה רצה כעת לפי שמה המדויק, מחלקה לפי שמה ואחריו נקודה, ובדיקה במחלקה מקוננת נמצאת (Outer+Inner). - בדיקת jest או vitest שבכותרת שלה יש
(, + או $ רצה. הכותרת הועברה אל -t, שקורא ביטוי רגולרי, ולכן בדיקה כזו לא התאימה לכלום ושום דבר לא רץ. - כותרת בדיקה שיש בה מירכאות מגיעה למסוף בשלמותה. פקודה עם
\" בתוך מירכאות התפרקה כבר במופע הראשון שלו. - Run This Test with Coverage קוראת קובצי בדיקה של VB ושל F#.
<Fact> מעל Public Sub, ו-[<Fact>] מעל let או member, מעולם לא זוהו. - משימת בדיקה שמסתיימת בלי להפעיל תהליך כבר לא משאירה את Run Tests with Coverage ממתינה לנצח. היא מסתיימת, ואומרת שההרצה לא כתבה דבר.
Coverage Studio ל-Visual Studio 1.2026.6 — אילו בדיקות הריצו שורה, כיסוי אחרי כל שמירה ובסיס השוואה מ-CI
2026-09-29
נוסף
- אילו בדיקות הריצו את השורה הזו. היכן שהדוח מתעד זאת — coverage.py עם
--show-contexts, המתודות הנעקבות של OpenCover, קובץ מעקב lcov שנכתב לכל בדיקה — ה-CodeLens של פונקציה אומר כמה בדיקות הריצו אותה, ו-Show Tests That Ran This Line מציג אותן, העמוסות ביותר תחילה, ופותח את זו שבחרתם. בהרצת dotnet test, ההגדרה testRun.perTest מריצה את הבדיקות מחלקה אחר מחלקה, כך שכל דוח אומר איזו מחלקה כתבה אותו.
- כיסוי אחרי כל שמירה. עם
testRun.onSave, שמירת קובץ מקור מריצה את הבדיקות שמכסות אותו, עם כיסוי, והשוליים מתעדכנים בהתאם. בפתרון .NET רצים רק פרויקטי הבדיקה שמפנים לפרויקט של הקובץ שנשמר; כמה שמירות ברצף הן הרצה אחת.
- Run This Test with Coverage. כשהסמן בתוך מתודת בדיקה, מחלקת בדיקה או
describe, או בקובץ בדיקה, פקודה אחת מריצה בדיוק את זה עם כיסוי — dotnet test --filter, jest/vitest -t או מזהה צומת של pytest — וטוענת את מה שנכתב. הבדיקה נקראת מתוך הטקסט, ולכן זה עובד ב-C#, VB, F#, JavaScript, TypeScript ו-Python בלי שירות שפה.
- Exclude from Coverage, ושני מסנני .NET. לחיצה ימנית על שורה בעץ הכיסוי, או Exclude This File from Coverage על הקובץ הפתוח, מוסיפה את הקובץ או התיקייה ל-
fuciniCoverage.ignore, והוא יוצא מכל סיכום. ignore.namespaces משמיט את קובצי מרחב שמות (*.Migrations), ו-ignore.attributes את המחלקה, המתודה או המאפיין שמתחת לתכונה — כברירת מחדל ExcludeFromCodeCoverage, ש-OpenCover, dotCover ו-lcov מומר אינם מכבדים.
- Exclude Selection from Coverage. בחרו שורות וקחו את הפעולה מהנורה או מתפריט ההקשר של העורך: מעל מחלקה, מתודה או מאפיין של .NET היא כותבת
[ExcludeFromCodeCoverage] — בצורה המקוצרת כשהקובץ כבר מייבא את System.Diagnostics.CodeAnalysis — ובמקומות אחרים LCOV_EXCL_LINE או זוג LCOV_EXCL_START/STOP בהערה של השפה עצמה. סימון שכבר קיים אינו מוכפל.
- מרחבי שמות, מחלקות ומתודות. לדוח .NET שמציין את מחלקותיו — Cobertura, Coverlet, OpenCover — רשימה נפתחת Folders / Namespaces מציגה את אותה הרצה לפי מרחב שמות, מחלקה ומתודה, עם אותו מיון ואותו מסנן; שורת מתודה פותחת את הקובץ במתודה. טיפוסים שהמהדר יצר, כמו
<>c ומכונות מצבים של async, מקופלים לתוך המחלקה שעבורה נוצרו.
- תיבת חיפוש מעל עץ הכיסוי. הקלידו מילים כדי להשאיר את השורות ששמן או נתיבן מכיל את כולן, או השוואה —
< 80%, lines >= 90, branches = 0 — כדי להשאיר את השורות שהמספר שלהן עומד בה; שתיהן יחד דורשות את שתיהן. גם שורות מתודות ונקודות סיכון נכללות בחיפוש; Escape מנקה.
- Run Native Project with Coverage. פרויקט ההפעלה ב-C++, מתפריט Tools: פרויקט ClangCL נבנה מחדש עם מכשור הכיסוי של clang לתוך
coverage/native/, מורץ, והדוח שלו נטען; כל ערכת כלים אחרת רצה תחת OpenCppCoverage היכן שהוא מותקן, והיכן שאף אחד מהשניים אינו אפשרי, משפט אומר מה להתקין.
- סשנים של כיסוי ומגמה. Start Coverage Session, וכל הרצה שנטענת מאז מתווספת לקודמותיה — שורות, ענפים ופונקציות כאחד: מה שאחת מהן הריצה מכוסה — כך שבדיקות יחידה, בדיקות אינטגרציה וסיבוב באפליקציה מראים מה השיגו יחד. מתחת לסרגל הכלים, כיסוי השורות של ההיסטוריה השמורה מצויר כמגמה, נקודה אחת לכל הרצה.
- Compare Two History Runs, כמו ב-VS Code: בחרו שתי הרצות שמורות, והקבצים שזזו ביניהן מוצגים מהישנה לחדשה, לא משנה איזו נבחרה ראשונה.
- Compare with CI Baseline.
baseline.report מציין את הדוח שה-build של הענף הראשי שלכם מפרסם — כתובת URL, שנמשכת עם remote.headers, או קובץ שהורד — וכל טעינה נמדדת מולו: הכרטיס של שורת המצב אומר היכן ההרצה הזו עומדת, ו-Compare with CI Baseline מציג את הקבצים שזזו. הבסיס עובר דרך אותה רשימת החרגות כמו ההרצה, כך שהסיכומים מושווים באופן הוגן.
- היכן למצוא אותן. הפקודות החדשות נמצאות תחת Tools > Coverage Studio ובתפריט ההקשר של העורך; Show Tests That Ran This Line זמינה גם ב-Ctrl+Shift+U, T, ו-Exclude Selection from Coverage היא פעולת נורה.
תוקן
- הדוח של הרצת בדיקות כבר לא נושא את שם המשתמש ושם המחשב שלכם. אוסף Code Coverage של Microsoft קורא לדוח שלו
<user>_<machine>_<stamp>.cobertura.xml, והשם הזה הופיע בעץ ובכל צילום מסך שלו; הדוח משנה כעת את שמו ל-coverage.cobertura.xml לפני שהוא נטען.
- על קובץ שנוצר אוטומטית נאמר שהושמט בגלל
fuciniCoverage.ignore. כל קובץ שהושמט נספר כעת תחת ההגדרה שהשמיטה אותו — ignore, ignore.generated או ignore.namespaces — כך שהשם המוצג הוא זה שצריך לשנות.
- קובץ מעקב lcov שנכתב לכל בדיקה נקרא כרשומה אחת לכל קובץ, עם סעיפי הבדיקות מחוברים, כפי ש-VS Code קורא אותו; קודם לכן הרשומה של כל בדיקה הייתה קובץ נפרד.
- היומן אומר מה מנתח השמיט. הקבצים שבהם מנתח לא מצא דבר למכשר (
FUCINI_PARSE_030) והדיווח של דוח על הפערים שלו עצמו (FUCINI_PARSE_031, ה-MissingPdb של OpenCover) נכתבים ליומן, כפי ש-VS Code כותב אותם.
- קובץ כותרת של מאקרו כבר לא עומד בעץ על 100%. llvm-cov ו-gcov מייחסים את השימושים במאקרו לשורות שמגדירות אותו; הענפים והפונקציות שעל שורות מוחרגות הולכים כעת יחד עם השורות, וקובץ שלא נשאר בו דבר מדיד מוצא מההרצה ונזכר בפלט (
FUCINI_EXCLUDE_001).
- חמישה דוחות שנדחו כפורמט לא נתמך מזוהים. ה-JaCoCo XML של Kover, דוח Stryker.NET, דוח NCover, resultset ישן של SimpleCov ודוח SonarQube של קבצים ריקים רבים מזוהים כעת לפי מה שהם נושאים בראשם. דוח Clover או SonarQube שהנתיבים שלו מכילים את המילה
cobertura כבר לא נקרא כ-Cobertura.
- מספרים שמסכימים עם הכלים שכתבו אותם. נתון הענפים של build עם MC/DC תואם את
llvm-cov report; ענפי חריגה של LCOV 2 (BRDA:12,e0,1,3) נספרים; פונקציה של llvm-cov מוצהרת רק בקובץ שמגדיר אותה; בלוק Go ששני קובצי בדיקה בינאריים מציגים מחבר את ספירותיו; החלטת Cobertura ששתי מחלקות מדווחות ושורת JaCoCo שמופיעה פעמיים שומרות את כל זרועותיהן, פעם אחת.
- קטנים יותר. קובץ מעקב שנקטע באמצע הכתיבה כבר לא מאבד קובץ;
gcov -t על כמה קובצי .gcda נותן קובץ לכל אחד, מופעי תבניות נקראים פעם אחת וספירות כמו 1.20k מ-gcov -H נשמרות; קובצי GNATcoverage כבר לא מדווחים כולם כמשתנים מאז הכיסוי שלהם; מוטנט Stryker ממתין או הרצת PIT שנקטעה כבר לא נספרים נגד הציון.
- עריכה ידנית של קובץ ההגדרות מוחלת כשהוא נשמר, כפי ש-VS Code מחיל שינוי בהגדרות.
Coverage Studio ל-VS Code 1.2026.7 — אילו בדיקות הריצו שורה, כיסוי אחרי כל שמירה ובסיס השוואה מ-CI
2026-09-29
נוסף
- אילו בדיקות הריצו את השורה הזו. היכן שהדוח מתעד זאת — coverage.py עם
--show-contexts, המתודות הנעקבות של OpenCover, קובץ מעקב lcov שנכתב לכל בדיקה — ה-CodeLens של פונקציה אומר כמה בדיקות הריצו אותה, ו-Show Tests That Ran This Line מציג אותן, העמוסות ביותר תחילה, ופותח את זו שבחרתם. בהרצת dotnet test, ההגדרה testRun.perTest מריצה את הבדיקות מחלקה אחר מחלקה, כך שכל דוח אומר איזו מחלקה כתבה אותו.
- כיסוי אחרי כל שמירה. עם
testRun.onSave, שמירת קובץ מקור מריצה את הבדיקות שמכסות אותו, עם כיסוי, והשוליים מתעדכנים בהתאם. בפתרון .NET רצים רק פרויקטי הבדיקה שמפנים לפרויקט של הקובץ שנשמר; כמה שמירות ברצף הן הרצה אחת.
- Run This Test with Coverage. כשהסמן בתוך מתודת בדיקה, מחלקת בדיקה או
describe, או בקובץ בדיקה, פקודה אחת מריצה בדיוק את זה עם כיסוי — dotnet test --filter, jest/vitest -t או מזהה צומת של pytest — וטוענת את מה שנכתב. הבדיקה נקראת מתוך הטקסט, ולכן זה עובד ב-C#, VB, F#, JavaScript, TypeScript ו-Python בלי שירות שפה.
- Exclude from Coverage, ושני מסנני .NET. לחיצה ימנית על שורה בעץ הכיסוי, או Exclude This File from Coverage על הקובץ הפתוח, מוסיפה את הקובץ או התיקייה ל-
fuciniCoverage.ignore, והוא יוצא מכל סיכום. ignore.namespaces משמיט את קובצי מרחב שמות (*.Migrations), ו-ignore.attributes את המחלקה, המתודה או המאפיין שמתחת לתכונה — כברירת מחדל ExcludeFromCodeCoverage, ש-OpenCover, dotCover ו-lcov מומר אינם מכבדים.
- Exclude Selection from Coverage. בחרו שורות וקחו את הפעולה מהנורה או מתפריט ההקשר של העורך: מעל מחלקה, מתודה או מאפיין של .NET היא כותבת
[ExcludeFromCodeCoverage] — בצורה המקוצרת כשהקובץ כבר מייבא את System.Diagnostics.CodeAnalysis — ובמקומות אחרים LCOV_EXCL_LINE או זוג LCOV_EXCL_START/STOP בהערה של השפה עצמה. סימון שכבר קיים אינו מוכפל.
- מרחבי שמות, מחלקות ומתודות. לדוח .NET שמציין את מחלקותיו — Cobertura, Coverlet, OpenCover — רשימה נפתחת Folders / Namespaces מציגה את אותה הרצה לפי מרחב שמות, מחלקה ומתודה, עם אותו מיון ואותו מסנן; שורת מתודה פותחת את הקובץ במתודה. טיפוסים שהמהדר יצר, כמו
<>c ומכונות מצבים של async, מקופלים לתוך המחלקה שעבורה נוצרו.
- תיבת חיפוש מעל עץ הכיסוי. הקלידו מילים כדי להשאיר את השורות ששמן או נתיבן מכיל את כולן, או השוואה —
< 80%, lines >= 90, branches = 0 — כדי להשאיר את השורות שהמספר שלהן עומד בה; שתיהן יחד דורשות את שתיהן. גם שורות מתודות ונקודות סיכון נכללות בחיפוש; Escape מנקה.
- סשנים של כיסוי ומגמה. Start Coverage Session, וכל הרצה שנטענת מאז מתווספת לקודמותיה — שורות, ענפים ופונקציות כאחד: מה שאחת מהן הריצה מכוסה — כך שבדיקות יחידה, בדיקות אינטגרציה וסיבוב באפליקציה מראים מה השיגו יחד. מתחת לסרגל הכלים, כיסוי השורות של ההיסטוריה השמורה מצויר כמגמה, נקודה אחת לכל הרצה.
- Compare with CI Baseline.
baseline.report מציין את הדוח שה-build של הענף הראשי שלכם מפרסם — כתובת URL, שנמשכת עם remote.headers, או קובץ שהורד — וכל טעינה נמדדת מולו: הכרטיס של שורת המצב אומר היכן ההרצה הזו עומדת, ו-Compare with CI Baseline מציג את הקבצים שזזו. הבסיס עובר דרך אותה רשימת החרגות כמו ההרצה, כך שהסיכומים מושווים באופן הוגן.
תוקן
- הדוח של הרצת בדיקות כבר לא נושא את שם המשתמש ושם המחשב שלכם. אוסף Code Coverage של Microsoft קורא לדוח שלו
<user>_<machine>_<stamp>.cobertura.xml, והשם הזה הופיע בעץ ובכל צילום מסך שלו; הדוח משנה כעת את שמו ל-coverage.cobertura.xml לפני שהוא נטען.
- הרצת בדיקות נכשלה ב-Windows כשהמסוף הוא PowerShell. המירכאות סביב
Code Coverage;Format=cobertura אבדו בדרך אל pwsh, שקרא את ה-; כסוף הפקודה; המתכון מועבר כעת למסוף מילה אחר מילה ומצוטט עבור המעטפת שהוא מפעיל.
- על קובץ שנוצר אוטומטית נאמר שהושמט בגלל
fuciniCoverage.ignore. כל קובץ שהושמט נספר כעת תחת ההגדרה שהשמיטה אותו — ignore, ignore.generated או ignore.namespaces — כך שהשם המוצג הוא זה שצריך לשנות.
- קובץ כותרת של מאקרו כבר לא עומד בעץ על 100%. llvm-cov ו-gcov מייחסים את השימושים במאקרו לשורות שמגדירות אותו; הענפים והפונקציות שעל שורות מוחרגות הולכים כעת יחד עם השורות, וקובץ שלא נשאר בו דבר מדיד מוצא מההרצה ונזכר בפלט (
FUCINI_EXCLUDE_001).
- חמישה דוחות שנדחו כפורמט לא נתמך מזוהים. ה-JaCoCo XML של Kover, דוח Stryker.NET, דוח NCover, resultset ישן של SimpleCov ודוח SonarQube של קבצים ריקים רבים מזוהים כעת לפי מה שהם נושאים בראשם. דוח Clover או SonarQube שהנתיבים שלו מכילים את המילה
cobertura כבר לא נקרא כ-Cobertura.
- מספרים שמסכימים עם הכלים שכתבו אותם. נתון הענפים של build עם MC/DC תואם את
llvm-cov report; ענפי חריגה של LCOV 2 (BRDA:12,e0,1,3) נספרים; פונקציה של llvm-cov מוצהרת רק בקובץ שמגדיר אותה; בלוק Go ששני קובצי בדיקה בינאריים מציגים מחבר את ספירותיו; החלטת Cobertura ששתי מחלקות מדווחות ושורת JaCoCo שמופיעה פעמיים שומרות את כל זרועותיהן, פעם אחת.
- קטנים יותר. קובץ מעקב שנקטע באמצע הכתיבה כבר לא מאבד קובץ;
gcov -t על כמה קובצי .gcda נותן קובץ לכל אחד, מופעי תבניות נקראים פעם אחת וספירות כמו 1.20k מ-gcov -H נשמרות; קובצי GNATcoverage כבר לא מדווחים כולם כמשתנים מאז הכיסוי שלהם; מוטנט Stryker ממתין או הרצת PIT שנקטעה כבר לא נספרים נגד הציון.
שונה
- אין עוד
FUCINI_ENCODING_001 בכל טעינה. דוח בלי סימן סדר בתים נקרא כ-UTF-8, כפי שכל כלי כותב אותו, בלי הערה שאומרת זאת.
Coverage Studio ל-Visual Studio 1.2026.5 — צופים היכן שהדוח יופיע
2026-09-28
נוסף
- ערך יחסי עם תו כללי נחפש בכל עומק.
*.lcov.info ב-coverageFile.paths מוצא את הקובץ בכל מקום שבו הוא נמצא תחת תיקיית הבסיס, כפי ש-VS Code תמיד קרא אותו; ערך מעוגן — ${workspaceFolder}/build/coverage-merged/*.lcov.info, ** לכל עומק — מחפש בדיוק היכן שהוא אומר, כמו קודם.
- צופים היכן שהדוח יופיע. הצפייה מכסה את התיקיות שההגדרות מציינות, בין אם כבר יש שם דוח ובין אם לא: התיקייה של קובץ מעוגן, התיקיות שלפני תו כללי — עם כל מה שמתחתיהן כשהתבנית מגיעה לתיקיות משנה — ותיקיית הבסיס עבור תו כללי יחסי. דוח שבנייה כותבת שם נטען מעצמו; מכתיבה לכל קובץ אחר באותן תיקיות מתעלמים.
תוקן
- דוח JSON של llvm-cov נדחה כפורמט שאינו נתמך. הפורמט מזוהה מ-4096 התווים הראשונים, ו-llvm-cov כותב את הסמן
"type": "llvm.coverage.json.export" שלו ממש בסוף; בייצוא שרשומת הקובץ הראשונה שלו נושאת ענפים רבים והרחבות מאקרו מקוננות לא היה שום דבר אחר שניתן לזהות באותה התחלה. דוח כזה מזוהה כעת לפי הפתיחה שלו, {"data":[{"files":[, שאין לשום פורמט אחר.
- אותו הדבר עבור
gcov --json-format. gcov כותב את הפונקציות של קובץ לפני השורות שלו, ולקובץ של תריסר פונקציות גם אין אף רשומת שורה בהתחלה הנבדקת; המפתח gcc_version של המסמך עצמו מזהה אותו כעת.
Coverage Studio ל-VS Code 1.2026.6 — תו כללי בנתיב מלא, צופים היכן שהדוח יופיע
2026-09-28
נוסף
- תו כללי בערך מוחלט ב-
coverageFile.paths. ${workspaceFolder}/build/coverage-merged/*.lcov.info טוען כל קובץ כזה באותה תיקייה, ו-** מייצג כל עומק: החיפוש נעשה בתיקיות שלפני התו הכללי הראשון, והשאר הוא התבנית שמתחתיהן, כפי שהמהדורה ל-Visual Studio תמיד קראה ערך כזה. קודם, ערך מוחלט חופש כפי שנכתב, ולכן ערך עם כוכבית לא התאים לכלום — ומאחר שהוא תו כללי, גם מעולם לא דווח שאינו תואם לכלום. דוח שמופיע שם מאוחר יותר נטען על ידי הצופה או הדגימה כמו ערך מילולי; תו כללי שאינו תואם לכלום אינו מדווח, כי ייתכן שהוא ממתין לבנייה.
תוקן
- דוח JSON של llvm-cov נדחה כפורמט שאינו נתמך. הפורמט מזוהה מ-4096 התווים הראשונים, ו-llvm-cov כותב את הסמן
"type": "llvm.coverage.json.export" שלו ממש בסוף; בייצוא שרשומת הקובץ הראשונה שלו נושאת ענפים רבים והרחבות מאקרו מקוננות לא היה שום דבר אחר שניתן לזהות באותה התחלה. דוח כזה מזוהה כעת לפי הפתיחה שלו, {"data":[{"files":[, שאין לשום פורמט אחר.
- אותו הדבר עבור
gcov --json-format. gcov כותב את הפונקציות של קובץ לפני השורות שלו, ולקובץ של תריסר פונקציות גם אין אף רשומת שורה בהתחלה הנבדקת; המפתח gcc_version של המסמך עצמו מזהה אותו כעת.
Coverage Studio ל-Visual Studio 1.2026.4 — שני דוחות, תשובה אחת, וירוק היכן שמכוסה
2026-09-26
נוסף
- בחירה או שילוב של הדוחות של קובץ. לחצו לחיצה ימנית על קובץ בחלון Coverage ובחרו Choose Coverage Source... — מוצע היכן שיותר מדוח טעון אחד מודד אותו — או השתמשו ב-Tools > Coverage Studio > Choose Coverage Source for This File...: כל דוח עם הנתונים שלו, ואחריהם Combine them — agree (מכוסה רק היכן שכל דוח הריץ שורה: בסיס קוד אחד, שני מהדרים) ו-— union (מכוסה היכן שדוח כלשהו הריץ אותה: כמה חבילות בדיקה של בנייה אחת), לקובץ, לתיקייה שלו או לתבנית. השורות שהדוחות חלוקים עליהן צבועות בטורקיז בשוליים וב-Annotated Source, עם מה שכל דוח אמר; שורת הקובץ מציינת את הדוחות ואת מספר השורות השנויות במחלוקת, ושורת המצב ושני הכרטיסים אומרים מאין באים המספרים.
- אדום, ענבר וירוק. Gutter: Coverage צובע כל שורה מכוסה בירוק לצד האדום והענבר — המצב לכל מי שציפה שקובץ ב-100% יהיה ירוק. חמשת הגוונים של מפת החום הם הגדרות (
heatmap.colors, heatmap.colorsDark), וחלון ההגדרות מציג תצוגה מקדימה של כל צבע בזמן שבוחרים אותו.
תוקן
- המספר של הקובץ בשורת המצב הוא המספר של הכרטיס שלו. מדד ריק — MC/DC בקובץ ללא החלטות — נספר כ-100% בפריט ולא נספר כלל בכרטיס שהוא פותח.
- קובץ כותרת של קבועים כבר לא מראה 0% או 100%. הנחיות קדם-מעבד נספרות כלא-קוד, כמו הערות, כאשר
excludeComments מופעל.
Coverage Studio ל-VS Code 1.2026.5 — שני דוחות, תשובה אחת, וירוק היכן שמכוסה
2026-09-26
נוסף
- בחירה או שילוב של הדוחות של קובץ.
coverageFile.sources מחליט, לכל קובץ, איזה מבין כמה דוחות טעונים מדבר בשמו — או משלב אותם: agree סופר שורה כמכוסה רק היכן שכל דוח הריץ אותה, ומסמן בטורקיז את השורות שהם חלוקים עליהן; union היכן שדוח כלשהו הריץ אותה. Choose Coverage Source... על שורה בתצוגת Coverage או עבור הקובץ הפתוח כותב את הכלל בשבילכם. חלק מהתוכניות בתשלום; ב-Community הדוח החדש ביותר מכריע.
- אדום, ענבר וירוק, ומצב שוליים בלחיצה אחת. המצב
coverage צובע שורות מכוסות בירוק; הגוונים של מפת החום הם הגדרות עם תצוגה מקדימה חיה בחלונית ההגדרות; לחצן בשורת המצב ו-Alt+G מעבירים את השוליים בין כבוי, לא מכוסה, כיסוי ומפת חום.
תוקן
- המספר של הקובץ בשורת המצב הוא המספר של הכרטיס שלו. מדד ריק — MC/DC בקובץ ללא החלטות — נספר כ-100% בפריט ולא נספר כלל בכרטיס שהוא פותח.
- קובץ כותרת של קבועים כבר לא מראה 0% או 100%. הנחיות קדם-מעבד נספרות כלא-קוד, כמו הערות, כאשר
excludeComments מופעל.
Coverage Studio ל-Visual Studio 1.2026.3 — אין מה לבחור מלבד הקוד
2026-09-24
שונה
- תיבת הדו-שיח Licence מבקשת רק את הקוד. ארבעת כפתורי התוכניות הוסרו: קוד מנוי או קוד הזמנה מציין מאגר, והמאגר יודע מהי התוכנית שלו, כך שלא היה דבר שאדם יכול היה לענות טוב יותר מהקוד עצמו — והזמנת Business שהודבקה כש-Pro עדיין נבחר נדחתה בשל תוכנית שגויה. הדביקו את הקוד ולחצו על Activate.
Coverage Studio ל-VS Code 1.2026.4 — אין מה לבחור מלבד הקוד
2026-09-24
שונה
- Enter Subscription Code מבקש רק את הקוד. שאלת התוכנית הוסרה: הקוד מציין מאגר והמאגר יודע מהי התוכנית שלו, כך שהשרת ממשיך משם ואינו דוחה עוד קוד בטענה שהוא מיועד לתוכנית שגויה. קישורי הלחיצה האחת בהודעות הדוא״ל לא השתנו; בהודעות ההפעלה אין עוד שלב "בחרו את התוכנית", ואותו קוד מפעיל את Coverage Studio ל-Visual Studio ללא צורך ב-VS Code.
Coverage Studio ל-Visual Studio 1.2026.2 — כל הרצת בדיקות, כל דוח, ומה שזז
2026-09-24
נוסף
- כיסוי אחרי כל הרצת בדיקות. Collect Coverage in Test Explorer… מניח לצד הפתרון קובץ
.runsettings אחד עם מאסף ה-Cobertura של Microsoft — נקלט מעצמו כאשר Tools → Options → Test → Auto detect runsettings files מופעל, או נבחר פעם אחת תחת Test → Configure Run Settings; מרגע זה כל הרצת Test Explorer כותבת דוח תחת פרויקט הבדיקות, והוא נטען ברגע שהוא מופיע, ממוזג עם כל מה שההגדרות מציינות. דבר אינו מתחבר ל-Test Explorer, ולכן Visual Studio 2026 ו-Microsoft.Testing.Platform עובדים כפי שהם. Run Tests with Coverage מזהה dotnet test, vitest, jest, pytest, go, cargo, maven, gradle, phpunit ו-ctest, מריץ אותם עם כיסוי מופעל בחלון Output וטוען את מה שכתבו; פרויקט בדיקות ללא coverlet.collector מורץ עם המאסף שמגיע עם ה-SDK של הבדיקות.
- מאז ההרצה האחרונה. כל טעינה מושווית לזו שלפניה: משולש בשוליים בכל שורה שהתחילה או הפסיקה לרוץ, המגמה לצד הציון, ו-Compare with Last Run לקבצים שמספריהם זזו.
history.enabled שומר את ההרצות בין הפעלות מחדש; gitDiff.enabled מצמצם את ההרצה לשורות שהענף שלכם שינה.
- הספים ו-Error List. Check Coverage Thresholds שופט את ההרצה לפי
threshold.*; עם compliance.diagnostics, problems.enabled, problems.perLine או deadCode.enabled הממצאים יושבים ב-Error List לצד אלה של המהדר עצמו, וכל אחד פותח את הקובץ שלו.
- דוחות, ייצואים ותג. Show Annotated Source פותח את הקובץ הפעיל כעמוד באזור המסמכים — כל שורה בצבעה, הממצאים לצדה — הנגלל יחד עם העורך בשני הכיוונים. Open HTML Report ו-Generate Full HTML Report כותבים את ההרצה אל
htmlReport.outputDir ופותחים את הדפדפן. Export Coverage Report… כותב CSV לכל קובץ או לכל פונקציה, Markdown, LCOV, Cobertura, SARIF, תג SVG או Fucini JSON. Generate Coverage Badge מחזיק את התג במאגר, אחרי כל טעינה עם badge.autoUpdate.
- Risk hotspots ומסנני שורות בחלון Coverage, כמו ב-VS Code: הפונקציות שבהן קוד מורכב פוגש כיסוי מועט, הגרועות תחילה; ורשימה נפתחת לצד המיון לכל הקבצים, קבצים עם פערים, קבצים שלא נבדקו, או הקבצים שהשתנו מאז ההרצה האחרונה.
- קובץ הגדרות בשורש הפתרון.
fucini-coverage.json לצד הפתרון נקרא אחרי .vscode/settings.json ונכתב על ידי חלון ההגדרות כשהוא הקובץ הקיים — לצוות שמעדיף לא להחזיק תיקיית .vscode. שתי המהדורות קוראות אותו.
- .NET בלי טקסים.
ignore.generated משאיר קובצי מעצב, קבצים שנוצרו אוטומטית, obj\ וקובצי הגירה מחוץ לכל סיכום; testRun.skipWhenTestsFail משאיר על המסך את הכיסוי התקין האחרון כשהרצה מסתיימת באדום.
עדיין לא במהדורה זו
- חלונית Test Coverage היא ממשק API של VS Code, ו-Solution Explorer אינו יכול להציג תגים. Compare Two History Runs יגיע כשמנויים יבקשו אותו.
Coverage Studio for VS Code 1.2026.3 — Hotspots, מסננים ו-.NET בלי חבילה
2026-09-24
נוסף
- אילו קבצים להציג. רשימה נפתחת שנייה בסרגל הכלים של תצוגת Coverage, לצד המיון: כל הקבצים, קבצים עם פערים, קבצים שלא נבדקו, או הקבצים שמספריהם זזו מאז ההרצה הקודמת. תיקיות עוקבות אחר הקבצים שלהן ושומרות על המספרים שלהן. בכל התוכניות.
- Risk hotspots. מתחת לעץ: הפונקציות שבהן קוד מורכב פוגש כיסוי מועט, הגרועות תחילה, וכל אחת פותחת את הקובץ שלה בפונקציה. פונקציה נכנסת לרשימה לפי ציון CRAP —
hotspots.crapThreshold, 30 כברירת מחדל, הערך שמחברי המדד הציעו — או לפי מורכבות ציקלומטית בלבד, hotspots.complexityThreshold, כבוי כברירת מחדל. Community רואה את המספר ואת הציון הגרוע ביותר; הרשימה המדורגת היא ב-Pro.
dotnet test בלי חבילה. Run Tests with Coverage קורא תחילה את קובצי הפרויקט: כשאף אחד מהם אינו מפנה ל-Coverlet, ההרצה משתמשת במאסף של Microsoft עצמה — --collect:"Code Coverage;Format=cobertura" — שמגיע עם Microsoft.NET.Test.Sdk, והדוח שלו נטען כמו זה של Coverlet.
- קובצי .NET שנוצרו אוטומטית נשארים בחוץ.
ignore.generated, שמופעל כברירת מחדל, משמיט *.Designer.cs, *.g.cs, *.generated.cs, *.razor.g.cs, AssemblyInfo, using גלובליים, כל מה שתחת Migrations/ ותחת obj/ מכל סיכום, עמוד וייצוא. קובץ מעצב שאיש אינו בודק אינו עולה עוד לפתרון בסף שלו.
- הרצה שנכשלה שומרת על הכיסוי התקין האחרון. עם
testRun.skipWhenTestsFail, הרצה שמסתיימת בבדיקה נכשלת משאירה את הכיסוי על המסך כפי שהיה, ואומרת זאת בחלונית Output. כבוי כברירת מחדל.
שונה
- הרצת Test Explorer נמצאת מעצמה. בלי שום הגדרה, השמות המוכרים כוללים כעת את תיקיית
TestResults/<run>/ של כל פרויקט בדיקות, לא רק זו של תיקיית סביבת העבודה עצמה, ואת <user>_<machine>_<date>.cobertura.xml של המאסף של Microsoft לצד זה של Coverlet. פתרון .NET שבדיקותיו הורצו ב-Visual Studio מציג את הכיסוי שלו בפתיחה הראשונה; כל תיקיית הרצה נטענת, והמיזוג משאיר לכל קובץ את המילה האחרונה של ההרצה החדשה ביותר.
Coverage Studio ל-Visual Studio 1.2026.1 — אותו כיסוי, ב-IDE השני
2026-09-23
נוסף
- תוסף שני, ל-Visual Studio 2022 ו-2026 — Community, Professional ו-Enterprise. אותו קורא כמו במהדורת VS Code, כך שאותו דוח נותן את אותם מספרים, עד הספרה, בשני העורכים; ואותן הגדרות
fuciniCoverage.*, הנקראות מ-.vscode/settings.json וגם מהגדרות המשתמש של VS Code עצמו כשהוא במחשב. הוא אינו משתמש בכיסוי הקוד של Visual Studio עצמו: ב-Visual Studio 2022 זו תכונה של Enterprise, וב-Community וב-Professional זהו הכיסוי היחיד שה-IDE יציג. - בעורך: פס בשוליים לכל שורה — אדום מעולם לא רץ, ענבר חלקית, מפת חום לפי מספר ביקורים — ספירות הרצה בשורה, שורה מעל כל פונקציה עם הכיסוי, המורכבות, ציון CRAP ו-MC/DC שלה, פסים על סרגל הגלילה, ריחוף שאומר איזה ענף לא נלקח, ונקודה על שורה שערכתם מאז הדוח.
- חלון Coverage (View → Other Windows → Coverage): כל קובץ עם המדדים שלו וציון אחד על כולם, ניתן למיון, עם הקבצים שלא נמדדו מתחת; פריטי שורת המצב
Coverage ו-File, כל אחד פותח את הכרטיס המלא. - פקודות תחת Tools → Coverage Studio, עם אקורדים בשתי הקשות אחרי
Ctrl+Shift+U: N/P לשורה הלא מכוסה הבאה והקודמת, B להחלטה הבאה שנבדקה חלקית, R לטעינה מחדש. מצב מעקב טוען מחדש כשהקובץ שה-build שלכם כותב משתנה. - Getting Started, ששת הצעדים עם כפתור לכל אחד, ב-18 שפות; נפתח מעצמו בפעם הראשונה.
- הגדרות מגלגל השיניים בסרגל הכלים של חלון Coverage, שכותב את הגדרות המשתמש של מהדורה זו או את
.vscode/settings.json של התיקייה ושומר את ההערות של קובץ שהוא עורך. - רישיון: כלול בכל תוכנית בתשלום. מחשב שבו Coverage Studio ל-VS Code מופעל אינו זקוק לדבר נוסף — המפתח נמצא מעצמו; בכל מקום אחר Tools → Coverage Studio → Licence… מקבל את קוד המנוי מדוא"ל ההפעלה שלכם. ללא מנוי לא נקרא כיסוי: אין רמה חינמית ב-Visual Studio.
עדיין לא במהדורה זו
- Run Tests with Coverage וחלונית Test Coverage הם ממשקי API של VS Code; Solution Explorer אינו יכול להציג תגים. תצוגת Annotated Source, דוח ה-HTML והייצואים, Check Thresholds, רשומות Error List, היסטוריה ומגמה, וכיסוי diff יגיעו בסדר שבו המנויים יבקשו אותם.
Coverage Studio for VS Code 1.2026.2 — צעדים ראשונים, ושני עורכים במנוי אחד
2026-09-23
נוסף
- מדריך מודרך. Get started with Coverage Studio — תחת Help → Welcome → Walkthroughs, ונפתח מעצמו אחרי ההתקנה — מוביל משתמש חדש בשישה צעדים מדוח כיסוי לשורות שאיש אינו בודק, כל אחד עם כפתור לפקודה שהוא עוסק בה. בכל שמונה עשרה השפות.
- מזהה ההתקנה נשאר היכן ש-Coverage Studio ל-Visual Studio קורא אותו. מהדורת Visual Studio מאמתת את המפתח ב-
license.key מול אותה טביעת אצבע ואינה יכולה לקרוא את מאגר המצב של התוסף הזה; בכל הפעלה המזהה נכתב כעת גם לצד האחסון הגלובלי של התוסף, כך שמחשב שהופעל ב-VS Code אינו זקוק להפעלה שנייה ב-Visual Studio. UUID אקראי, שאינו קשור לדבר, שלעולם אינו נשלח לשום מקום.
שונה
- החזר מסיים את המנוי. החזר או חיוב חוזר שאושרו מבטלים כעת את המנוי מייד וקוד ההפעלה שלו אינו מנפיק עוד מפתחות; החזרים הם אחד לכל לקוח. מפתחות שכבר נמצאים במחשב ממשיכים עד לפקיעתם, כמו קודם. מדיניות ההחזרים אומרת בדיוק מה קורה.
Coverage Studio for VS Code 1.2026.1 — שמות קבצים שתמיד אפשר לקרוא
2026-09-21
תוקן
- שמות הקבצים בתצוגת Coverage קריאים בכל רוחב. השם היה החלק היחיד בשורה שהתכווץ — עד שבעה תווים בסרגל צד רגיל. כעת הוא מצויר במלואו, ועמודות המדדים, הציון והפס מחליקים מתחתיו משמאל ומתעמעמים בקו החיתוך, כך שחצי מספר לעולם לא נקרא כמספר שלם. כל ערך עדיין מופיע בתיאור הצף של השורה.
- הסימון ״הקובץ השתנה״ עומד בקצב של הקובץ. אחרי טעינה הוא עקב אחר העריכה הראשונה והשחזור הראשון, ואז דבר לא הזיז אותו עד הטעינה הבאה. כעת כל שמירה וכל שינוי בדיסק נקלטים.
- סרגל הכלים של תצוגת Coverage כבר אינו שובר את תוויות הכפתורים שלו. בסרגל צד צר הסרגל יורד כעת שורה בין הפקדים שלו, ותיבת המיון עוברת לשורה משלה.
- תג הכיסוי חינמי גם בבורר הייצוא. Generate Coverage Badge תמיד כתב את תג ה-SVG בכל רמה, בעוד Export Coverage Report… סירב לאותו קובץ ב-Community. כעת שניהם כותבים אותו.
- Show Worst-Covered Folders מורשה כמו שתי הרשימות האחרות. דבר אינו משתנה ב-Community, שם שלושתן חינמיות ואינן נספרות, וגם לא עבור אף מפתח שכבר הונפק.
נוסף
- גרסה מינימלית נתמכת. ההרחבה קוראת כעת, בערך פעם בשבוע, מדיניות קטנה וחתומה משרת הרישיונות שלנו. כאשר גרסה ישנה יותר מהגרסה הישנה ביותר שעדיין נתמכת, תקופת הניסיון והרמה החינמית נעצרות ומבקשות עדכון; רישיון בתשלום מקבל את התאריך וממשיך תחילה לפעול במשך תקופת חסד. הקריאה אינה שולחת דבר עליכם או על ההתקנה שלכם, והתקנה שאינה מצליחה להגיע לשרת לעולם אינה נעצרת מסיבה זו. כיום לא הוגדר מינימום.
שונה
- הרישיון קנייני החל מגרסה זו. ההרחבה פורסמה בתנאי MIT, שמעולם לא התאימו למוצר הנמכר במנוי. מותר להתקין את הגרסה שפורסמה ולהשתמש בה במסגרת התוכנית שלכם, גם מסחרית; אסור להעתיק אותה, לשנות אותה, להפיץ אותה הלאה או לבצע בה הנדסה לאחור. מה שהיא מפיקה מהנתונים שלכם — דוחות, ייצואים, תגים — שלכם, ותנאי הייחוס הישן בוטל. עותק של גרסה קודמת נשאר תחת התנאים שאיתם הגיע.
- כפתור פעולות הנתיב (⋯) אינו תופס מקום עד שמצביעים על שורה. 25 הפיקסלים שהוא שמר בכל שורה עוברים כעת לשם הקובץ; הוא מופיע מיד אחרי השם בעת ריחוף, ודבר אינו זז בשורה.
Coverage Studio for VS Code 1.2026.0 — תנאים, מוטנטים, והבדיקות שמאחורי שורה
2026-09-20
תוקן
- קובצי מעקב של LCOV 2 מונים כל פונקציה פעם אחת.
FN:<שורה>,<שורת סיום>,<שם> נקרא כפי ש-lcov 2.0 כותב אותו — קודם כל פונקציה הופיעה פעמיים, פעם כמי שמעולם לא נקראה ופעם בשורה 0 — ולצידו נקראים גם זוגות FNL:/FNA: של lcov 2.2.
- תבנית C++ אינה נצבעת עוד כמי שמעולם לא רצה רק משום שמימוש אחד לא רץ, ופונקציה מלאת מאקרו היא שוב פונקציה אחת ולא אחת לכל מאקרו.
- טקסטי ההסכמה אומרים מה ההתקנה באמת שולחת: אין עמוד חודשי מהקוד שלכם, וסיכום השימוש נושא את קוד הבקשה שעליו הונפק המפתח שלכם.
נוסף
- כיסוי תנאים הוא מדד בפני עצמו.
a && b הוא החלטה אחת ושני תנאים, וחבילת בדיקות יכולה לעבור בשני הענפים בלי לראות את b שקרי אף פעם. יש לו כעת שורה, עמודה, ייצוא, תג, משקל בציון (3, בין הסתעפויות ל-MC/DC) וסף משלו — נקרא מ-BullseyeCoverage, מייצוא cond של TRACE32 ומ--fcondition-coverage ב-GCC 14.
- מוטנטים, במקום שבו הם נמצאים. דוחות PIT ו-Stryker נקראים מוטנט אחר מוטנט: השורדים מסומנים בשורה שלהם בעורך, עם השינוי והבדיקות שהריצו אותה בחיווית, ומופיעים בדוח ה-HTML ובקוד המוער.
- אילו בדיקות הריצו את השורה הזאת. coverage.py עם
--show-contexts ו-OpenCover עם -coverbytest אומרים אילו בדיקות הגיעו לשורה; החיווית של מונה הריצות מציינת אותן בשם.
- החלק של שורה שרצה ואשר מעולם לא רץ נצבע בעורך, ופונקציות C ו-C++ מקבלות מורכבות וציון CRAP שנספרים מנתוני ההסתעפויות ש-llvm-cov כבר נושא.
- פרויקטים של JaCoCo, Cobertura ו-Coverlet נטענים בפתיחה הראשונה, ללא שום הגדרה — כולל במקומות שבהם Maven, Gradle ו-
dotnet test כותבים כברירת מחדל.
- כל מדד ליד כל קובץ, בכל רוחב, מסודר לפי המשקל שלו בציון שלכם, ומה שלא נכנס נגלל במקום להיעלם — ומונה על סמל Coverage כשקובץ מעקב נטען מחדש בזמן שאתם מסתכלים במקום אחר.
- ערוץ גרסאות מוקדמות שאפשר להתנדב אליו, וכפתור אחד בשורת הכותרת של העורך שמכבה את צביעת הכיסוי ומחזיר בדיוק את מה שהיה.
שונה
- Bullseye ו-TRACE32: כיסוי הסתעפויות אינו כולל עוד תנאים. ההחלטות הן כיסוי הסתעפויות והתנאים כיסוי תנאים, ולכן נתון ההסתעפויות של פרויקט כזה משתנה, ואיתו הציון המשוקלל. הגדירו
whmWeights.conditions ל-0 כדי לקבל את הציון כפי שהיה.
- לשכבת Community החינמית יש מכסה שבועית: חמש בשבוע לכל אחת מהפעולות הנמדדות, במקום עשרים ביום, ובמכסה מוצעים מנוי או כרטיס לשבעה ימים. התקנה שכבר בשימוש שומרת על המכסות הישנות 30 יום ומקבלת הודעה אחת, עם התאריך.
- תקופת הניסיון והשכבה החינמית מנהלות יומן שימוש מול שרת הרישוי: גיבוב של מזהה המכונה של VS Code, המהדורה, היום שבו החלה ההתנסות ומוני הפעולות הנמדדות — ולא יותר מזה; לעולם לא ברישיון בתשלום, ולעולם אין המתנה לו. התמורה עבור טלמטריה היא כעת 30 יום, פעם אחת.
- העמוד החודשי מקוד המקור בוטל — הוא אינו נאסף, אינו נשמר ואינו נשלח לאיש, ועמוד ששמרה גרסה קודמת נמחק בהפעלה הראשונה של זו.
0.2026.82 — ספים שמתאימים לפרויקט שלכם, וכל מה שהדוחות שלכם נושאים
2026-09-17
תוקן
- מפת החום נקראת בכיוון הנכון בערכת נושא כהה. הסולם שלה נע מצהוב חיוור לחום כהה, כך שללולאה החמה ביותר היה הפס העמום ביותר. לערכת נושא כהה יש כעת סולם משלה, מירוק-זית עמום לכתום עז.
- הריחוף של MC/DC שוב מציג את הפירוט שלו, והחלטה של llvm-cov סופרת נכון את התנאים שלה. גרסת VS Code הנוכחית קיפלה את הריחוף לשורה אחת; ו-
(a && b) || c הוצג עם תנאי אחד ב-100% תחת כותרת שציינה בצדק 2 מתוך 3 זוגות. - פונקציות C++ נקראות בשם שבו כתבתם אותן:
clamp_to<int> ו-gearbox::next_gear במקום ??$clamp_to@H@@YAHHHH@Z של המקשר, עבור llvm-cov, lcov ו-gcov. - ספירות השורות של Istanbul תואמות את nyc, קובצי XML של
dotnet-coverage נקראים, שורות :nocov: של SimpleCov מוחרגות במקום להישבר, ודוח שנושא רק סיכום שומר על הנתונים שלו בכל סדר שבו הדוחות נקראים. - סביבות עבודה מרובות שורשים: דוח ה-HTML אינו מציין עוד תיקייה פעמיים, תצוגת Coverage מכתירה תיקיית סביבת עבודה בשמה, וכלל
pathRemap יכול לציין ${workspaceFolder} וגם ${workspaceRoot}.
נוסף
- כל מה שדוח נושא מוצג. קריאות לפונקציות, קוד אובייקט וציון מוטציות מקבלים עמודה בתצוגת Coverage, בדוח ה-HTML ובייצוא ל-CSV ול-Markdown, שורה בכרטיסי שורת המצב ותג במקור המוער — ומדד שדוח אינו נושא מושמט ואינו מודפס כאפס.
- מורכבות ו-CRAP. כאשר דוח נושא מורכבות ציקלומטית (OpenCover, JaCoCo, Clover, Cobertura), כל פונקציה מקבלת ציון CRAP ב-CodeLens שלה, קובץ מקבל Max CRAP שמקשר אל המתודה, ודוח ה-HTML מפרט את Riskiest Methods.
- יותר מכל פורמט: זרועות ענף בעלות שם, שורות מוחרגות, טווחי עמודות בתוך השורה, הכלי, הגרסה והתאריך של הדוח, והאזהרות שהכלי כתב בו.
- משקלים אופציונליים לקוד האובייקט ולציון המוטציות בציון המורכב, שניהם
0 כל עוד לא הגדרתם אותם.
שונה
- ספי ברירת המחדל אינם עוד 100%. סף שלא הגדרתם פירושו כעת שורות 80, פונקציות 80, אזורים 75, ענפים 70 וציון מורכב 75, ללא שער על MC/DC, מימושים, קריאות לפונקציות או קוד אובייקט — מה שאפשר לדרוש מפרויקט רגיל.
fuciniCoverage.threshold.profile: "safety" מחזיר כל שער ל-100, בדיוק כמו קודם, וסף שהגדרתם בעצמכם גובר על שני הפרופילים. אם הסתמכתם על ברירות המחדל הישנות, תישפטו בצורה מקילה יותר עד שתבחרו ב-safety; התקנה שכבר רצה בעבר מקבלת על כך הודעה חד-פעמית, עם כפתור שמגדיר אותו. - מדד ללא שער מציג קו נייטרלי בכרטיסים במקום סימן וי או איקס, ולוח ההגדרות מציג תצוגה מקדימה של ההכרעה לפי השערים שבתוקף בפועל.
0.2026.81 — אחוזים מדויקים, ודוח שאפשר לשלוח
2026-09-16
תוקן
- כיסוי במאגר עם שינויים שלא נשמרו מתיישר שוב. הרצה שנטענה בזמן שלקובץ היו עריכות שלא נשמרו הזיזה כל סימון, ריחוף ו-CodeLens במספר השורות שאותן עריכות דחפו. העריכות משוחזרות כעת מהקובץ שבדיסק, ושורה שלמה שהודבקה מעל שורה כבר אינה נחשבת לעריכה של אותה שורה.
- מיזוגים ורשומות LCOV חוזרות מסתכמים. קובץ מעקב חדש יותר כבר אינו שומר את סיכומי הענפים ו-MC/DC של ההרצה הישנה, וקובץ שמופיע פעמיים באותו קובץ מעקב משולב כפי ש-genhtml משלב אותו.
- מפתח הרישיון נשאר במחשב שלו. Settings Sync כבר אינו מעביר אותו להתקנות אחרות, שם הוא חסם את הכיסוי; מפתח Business, Enterprise או Pro Plus שפג תוקפו מתחדש מעצמו עד 45 יום לאחר הפקיעה.
- קובצי מעקב מרוחקים נשלפים בזהירות רבה יותר.
remote.headers נשארים במקור שלהם לאורך הפניות, שליפה מוותרת אחרי 30 שניות, דף התחברות נדחה במקום להישמר במטמון, וחלון שנפתח לא מקוון טוען את העותק האחרון שהורד. עדכון עצמי מתקין רק את המהדורה שלו. - מנתחים: ספירות השורות של llvm-cov תואמות ל-
llvm-cov show, החלטות OpenCover משיטות שונות כבר אינן דורסות זו את זו, xccov, TRACE32 ו-EMMA שומרים על מספרי השורות שלהם, מחלקות Cobertura שחולקות קובץ הן קובץ אחד, דוחות מצטברים של JaCoCo נקראים, ומיפוי נתיבים פותר .. ומשווה מקטעים שלמים. - בעורך: ההיסטוריה נשמרת לכל סביבת עבודה, סימונים נשארים על קבצים אמיתיים ולא על חלונית HEAD של עורך השוואה, שורות מעבר לסוף הקובץ אינן מצוירות, תגי הסייר ב-Windows עובדים לנתיבי
C:\…, והרצות גדולות נמצאות מהר יותר.
נוסף
- שליחת דוח אבחון. ההתראות על טעינה, שליפה מרוחקת, מיזוג, השוואת היסטוריה או צ׳אט שנכשלו מציעות אותו. הוא מציג בדיוק את ה-JSON שיישלח, עם דגימת קובץ אופציונלית של 4 KB, הערה וכתובת למענה, ואינו שולח דבר עד שלוחצים על שלח.
- דוחות שגיאה. שגיאת
FUCINI_* מדווחת ללא תוכן קבצים, נתיבים או שמות כאשר רמת הטלמטריה של VS Code היא all או error. שלוש שורות יומן קיבלו קוד משלהן: FUCINI_REMOTE_002, FUCINI_REMOTE_003 ו-FUCINI_GITDIFF_002, וכל אחת מתוארת במדריך למשתמש.
שונה
- לכל אחוז כיסוי שתי ספרות עשרוניות, קטומות ולא מעוגלות:
87.43%, ו-100.00% רק כשהכיסוי הוא בדיוק 100. - ספים מכריעים לפי הערך המדויק. עד כה כל אחוז עוגל תחילה למספר שלם, כך ש-89.6% עבר סף של 90%. פרויקט שעבר רק בזכות העיגול יציג כעת NON-COMPLIANT עד שהכיסוי שלו יגיע באמת לסף.
- הטלמטריה יומית. כל התקנה שולחת מדי יום הודעת רישיון קטנה ברמת הטלמטריה
all של VS Code; כאשר telemetry.enabled פעיל, סיכום השימוש יוצא מדי יום במקום מדי חודש. התקנות שפתחו תכונות תמורת טלמטריה נשאלות לפני שתנאיהן משתנים.
0.2026.80 — עדכון שרואים
2026-09-14
נוסף
- תצוגת Coverage מודיעה כשיש עדכון, וממשיכה להודיע. פס מעל באנר הרישיון מציג את הגרסה החדשה לצד הגרסה שלך, עם אותם שלושה כפתורים שבהודעת העדכון: "הורד & התקן", "הצג יומן שינויים" ו"דלג על גרסה זו". גם לסמל התצוגה בסרגל הפעילות נוסף תג, כך שרואים אותו גם כשהתצוגה סגורה. ההודעה הופיעה פעם אחת בלבד, בבדיקה האוטומטית, ולחיצה בכל מקום אחר הסתירה אותה עד הבדיקה הבאה, יום אחר כך; הפס נשאר עד שהעדכון מותקן או מדולג, או עד ש־
fuciniCoverage.update.checkForUpdates מכובה, והוא נשאר גם אחרי טעינה מחדש של החלון.
0.2026.79 — פינג אחד ביום
2026-09-14
שונה
- הפינגים הקטנים נשלחים לכל היותר פעם ביום, יחד. עדכון, שינוי ברישיון, פורמט כיסוי חדש וקובץ שלא ניתן היה לקרוא היו בעבר פינג נפרד כל אחד, שנשלח ברגע שהבחינו בו — ובחלק מההתקנות הבחינו בו מחדש בכל הפעלה: מושב שבוטל דיווח על הביטול בכל הפעלה, ומעבר בין סביבות עבודה שמשתמשות בפורמטים שונים דיווח בכל פעם על קבוצה „חדשה”. כעת הם נאספים ונשלחים כפינג אחד, לכל היותר פעם ביום. יום שאין בו מה לדווח לא שולח דבר.
- מדווח רק מה שהשתנה באמת. רישיון שמשתנה וחוזר למצבו במהלך היום אינו מדווח דבר, והפורמטים הם כל הפורמטים שההתקנה טענה אי־פעם, ולא רק אלה של סביבת העבודה האחרונה. פינג ההתקנה והודעת ההסרה עדיין נשלחים מיד, ושום דבר חדש אינו נאסף.
- מתג הטלמטריה של VS Code עצמו חל עכשיו גם על הפינגים הקטנים. כש-
telemetry.telemetryLevel מוגדר ל-off, לא נאסף דבר עבור הפינג היומי ולא נשלח דבר; עד כה רק הסיכום החודשי והודעת ההסרה כיבדו אותו. פינג ההתקנה החד־פעמי לא השתנה.
- חודש שמסתיים בזמן שהעורך לא בשימוש עדיין מדווח. הסיכום החודשי נבדק רק לאחר טעינת כיסוי, ולכן התקנה שהפסיקו להשתמש בה לא שלחה את החודש האחרון שלה. עכשיו הוא נבדק גם בכל שעה כל עוד VS Code פתוח — עדיין רק כשהטלמטריה מופעלת, ועדיין לכל היותר פעם ב-30 ימים.
תוקן
- פינג שהשרת דחה כבר לא נחשב כנשלח. כל תשובה מהשרת, כולל שגיאה, נחשבה כמסירה, ולכן פינג יומי שנדחה איבד את מה שאסף ופינג התקנה שנדחה לא נוסה שוב. עכשיו נחשבת רק תשובה מוצלחת; פינג יומי או סיכום חודשי שנדחו נשמרים ומנוסים שוב כעבור יום.
0.2026.78 — 14 ימים חדשים
2026-09-13
שונה
- כל הערכה מקבלת 14 ימים חדשים, פעם אחת. בהפעלה הראשונה של הגרסה הזו, תקופת הניסיון נפתחת מחדש בכל התקנת Pro שאין לה רישיון בתשלום — בין שהסתיימה מזמן ובין שנותרו בה עוד כמה ימים — ונמשכת 14 ימים מאותו יום. הודעה קצרה מציינת זאת כשזה קורה. רישיון בתשלום אינו מושפע, ומהדורת Community, שאין לה תקופת ניסיון, לא השתנתה.
- רישיון בתשלום מציג “מופעל”, בירוק. באנר הרישיון הציג בעבר למנוי “מופעל — נותרו 30 ימים”. מפתח מנוי תקף עד סוף התקופה ששולמה ומתחדש יחד איתה, כך שהספירה לאחור הזו לעולם לא הייתה מפסיקה להיקרא כמו תקופת ניסיון שעומדת להסתיים. הכותרת אומרת עכשיו פשוט מופעל, התאריך מופיע בפרטים בתור “בתוקף עד”, והספירה לאחור חוזרת רק בשבוע האחרון לפני שתוקף המפתח פג, לצד ההערה על חידוש קרוב שכבר הייתה שם.
0.2026.77 — להדביק את הקוד, וזה הכול
2026-09-12
נוסף
- “Enter Subscription Code” — ודבר נוסף אינו נדרש. בוחרים תוכנית, מדביקים את הקוד מהדוא״ל על הרכישה, מאשרים — ומפתח הרישיון מונפק ומוחל עבורכם. עד כה הדרך היחידה מתוך העורך עברה בשאלון ההערכה — שם, דוא״ל, סוג חשבון, חברה, סקר — וזה הטופס הלא נכון להציב לפני מי שכבר שילם. הדרך האחרת הייתה קישור
vscode:// שבדוא״ל, והיזהרות מלחיצה כזו היא סבירה ולא פחדנית: קישור כזה יכול להיות מופעל מכל דף שאתם מבקרים בו, ובדיוק לכן ההפעלה מבקשת מכם לאשר. הפקודה נמצאת בלוח הפקודות, והיא גם כפתור בבאנר הרישיון של פאנל הכיסוי ובחלון ההפעלה — בכל מצב, שכן רישיון עובר בין מכונות וקנייה באמצע תקופת הניסיון היא המקרה הרגיל ולא החריג.
- דרך לראות את התוכניות מתוך תקופת הניסיון עצמה. דף המחירים היה נגיש ממסכי המהדורה החינמית, אך לא מחלון ההפעלה ולא מבאנר הרישיון — המקום האחד שבו מי שרואה “נותרו 3 ימים” אכן מסתכל. לקורא הזה הוצעו שאלון ורמז על
settings.json, ומחיר בכלל לא.
שונה
- חלון ההפעלה ובאנר הרישיון אינם נפתחים עוד ב־
FCK1. שניהם פתחו קודם בקוד הבקשה שלכם ובהנחיה “הדביקו את המפתח אל settings.json”, וזו הדרך למקרה שאין שום אפשרות להגיע לשרת הרישוי שלנו. מפני שהוצגה ראשונה, היא נקראה כהוראה — ולכן לקוח שבידו קוד מנוי FCB1… נשלח אל “Enter Activation Key”, השדה היחיד שבוודאות ידחה אותו. שניהם עוד שם, מתחת למסלולים שמתאימים למי שקנה, ומתוארים כמה שהם באמת.
0.2026.76 — הפקודה שהדוא״ל הפנה אליה
2026-09-12
תוקן
- “Request Activation Key” היא באמת פקודה כעת. הדוא״ל על הרכישה — ודף ההפעלה, בכל שפה — מספרים לכם שאם הקישור בלחיצה אחת אינו שורד את תוכנת הדוא״ל שלכם, אפשר להריץ Fucini Coverage: Request Activation Key מלוח הפקודות, לבחור את התוכנית ולהדביק את הקוד. אלא שהשם הזה היה שייך לשורת הכותרת של הפאנל ולקישור עצמו, ומעולם לא לפקודה, ולכן בלוח הפקודות לא היה תחתיו דבר — וההתאמה הקרובה ביותר לפי שם, Enter Activation Key, מקבלת את המפתח
FCK1… שהשרת שלנו מנפיק, ולא את הקוד FCB1… שהדוא״ל שלכם נושא. מי שפעל לפי ההוראות הגיע בדיוק לשדה היחיד שבוודאות ידחה את מה שהיה בידיו. כעת זו פקודה אמיתית.
- חלון ההפעלה מציע בקש רישיון… גם כשתקופת ניסיון או מפתח עדיין בתוקף. קודם לכן הוא הוסתר עד שאחד מהם פג, בנימוק שלהתקנה שעובדת אין סיבה לפנות לשרת הרישוי. אבל קנייה באמצע תקופת הניסיון היא המקרה הרגיל ולא החריג, ולמי שהיה במצב הזה לא היה מהחלון שום מסלול אל השדה שהקוד שלו נכנס אליו: שני הכפתורים שנותרו ביקשו מפתח שרק פדיון הקוד מפיק.
0.2026.75 — פלטה לעיוורי צבעים
2026-09-12
נוסף
- פלטה לעיוורי צבעים. הגדירו את
colorScale.preset ל-colorblind והכיסוי יצויר בכתום-אדום, כתום וכחול (פלטת Okabe–Ito) במקום אדום, ענבר וירוק — המדרג, פסי השוליים, הדגשת השורות, תגי הסייר וסימוני השינוי מאז ההרצה האחרונה. צבע שהגדרתם בעצמכם גובר.
0.2026.74 — כיסוי מסונן לפי בדיקה
2026-09-12
נוסף
- סינון כיסוי לפי בדיקה בתצוגת Test Coverage של VS Code עצמה. כשקובץ מעקב נותן שמות לבדיקות שלו — מקטעי
TN: של lcov — כל בדיקה הופכת לפריט תחת Fucini Coverage ב-Test Explorer, כל קובץ בתצוגת Test Coverage מפרט את הבדיקות שהריצו בו משהו, ובחירה באחת מציגה את השורות שהבדיקה הזו הגיעה אליהן. ${command:…} בהגדרות נתיבים. ${command:cmake.buildDirectory}/coverage.info עוקב אחרי ערכת CMake שנבחרה. הפקודה רצה לפני כל גילוי, לכל היותר חמש שניות ורק בסביבת עבודה מהימנה; פקודה שנכשלת משאירה את המשתנה כפי שנכתב, והפלט מסביר מדוע.- התחלה מהירה ב-30 שניות והשוואה לחלופות פותחות כעת את דף ה-Marketplace ואת דף הבית.
תוקן
- קובץ מעקב שתיעד קובץ פעם אחת לכל בדיקה ספר אותו פעם אחת לכל בדיקה. הרשומות מחוברות כעת יחד לכל קובץ מעקב, כפי ש-genhtml קורא אותן: הקובץ נספר פעם אחת בסיכומים, וכשנטענים כמה קובצי מעקב, השורות של אף בדיקה לא הולכות לאיבוד.
0.2026.73 — עדכונים חתומים, ומפתח ששורד את המעבר
2026-09-11
תוקן
- מזהה ההתקנה נשמר כעת לפני שמשהו משתמש בו. גרסה 2 של 0.2026.72 הפסיקה לחשב את המזהה מחדש בכל קריאה, אבל בזמן ההפעלה עדיין דבר לא המתין עד שייכתב, ולכן חלון שנסגר מיד אחרי שנפתח עדיין יכול היה לאבד אותו — ואיתו את טביעת האצבע של המחשב שאליה קשור מפתח ההפעלה. כעת ההפעלה ממתינה.
- מעבר מ-Pro ל-Community כבר לא מבטל את תוקף מפתח ההפעלה. לכל מהדורה יש אחסון הרחבה משלה, ולכן Community התחילה עם מזהה התקנה חדש וטביעת אצבע חדשה, בעוד שהמפתח בהגדרות שלך — כולל זה שהמעבר ביקש זה עתה לשחרור הנעילה בחינם — היה קשור לישן. כעת המעבר מעביר את המזהה הלאה.
אבטחה
- עדכונים מ-fucini.software חתומים ונבדקים לפני שהם מותקנים. כל
.vsix בערוץ העדכונים נושא גיבוב SHA-256 וחתימת Ed25519 שנוצרה במפתח שלעולם אינו נמצא בשרת האינטרנט. מנגנון העדכון המובנה והמעבר ל-Community בודקים את שניהם מול הקובץ שהורד ודוחים כל דבר אחר — דף שגיאה של פרוקסי, הורדה קטועה, גרסה ישנה יותר מהמטמון או קובץ שאינו שלנו. HTTPS לבדו לא מכסה זאת: פרוקסי ארגוני שבודק TLS חותם מחדש על כל חיבור שעובר דרכו. - לכל גרסה יש שם קובץ משלה. ערוץ העדכונים מצביע כעת על
.vsix עם מספר גרסה במקום על קובץ שנדרס בכל גרסה, כך שמטמון שמתעלם מ-Cache-Control לא יכול להגיש את הגרסה של החודש שעבר כגרסה של החודש הזה. הקישורים בדף ההורדות לא השתנו.
0.2026.72 — ההחלטות שנבדקו רק לכיוון אחד
2026-09-10
נוסף
- קפיצה להחלטות שנבדקו רק לכיוון אחד. Next Partly-Tested Decision והתאומה הקודמת שלה עוברות על ההסתעפויות שחלק מהזרועות שלהן רצו וחלקן מעולם לא. זהו הפער שניווט בין שורות לא מכוסות אינו יכול להראות: שורה שהפקודה שלה רצה נחשבת מכוסה, ונשארת מכוסה בלי קשר לכמה מזרועותיה מעולם לא נלקחו —
if (a && b) שהגיעו אליו פעם אחת כאשר a שקרי מכוסה ב-100% ברמת השורה ונבדק במחצית. עצירה אחת לכל החלטה ולא לכל זרוע, כי הזרועות של if/else יכולות להיות במרחק עמודים, וקפיצה לזרוע החמישית של switch אומרת פחות מקפיצה ל-switch עצמו. החלטות שאף זרוע שלהן לא הגיעה נשארות לפקודות השורות הלא מכוסות, שעוצרות שם ממילא — וקובץ שבדוח שלו אין הסתעפויות כלל אומר זאת, במקום לטעון שכל החלטה נבדקה בשני הכיוונים.
Reload Coverage קורא מחדש את מה שכבר טעון. כשהמעקב כבוי, הדרך היחידה חזרה למספרים טריים אחרי הרצה חוזרת של הבדיקות הייתה Load Coverage, שמריץ את הגילוי שוב ועשוי לחזור עם קבוצה שונה מזו שעל המסך. הפקודה הזו קוראת מחדש בדיוק את מה שטעון כעת, כולל קובצי מעקב שנבחרו ידנית שהגילוי לא היה מוצא שוב לעולם.
Copy Coverage Summary מציג את ההרצה בטבלת Markdown. הקובץ המכוסה הכי פחות ראשון, עם שורת סיכומים, מוכן להדבקה ב-pull request. עמודות ההסתעפות ו-MC/DC מופיעות רק כאשר משהו בהרצה מדד אותן: עמודה של מקפים נקראת ככיסוי אפס ולא כ"לא נמדד", וזה ההפך מהאמת.
תוקן
- מזהה ההתקנה יכול היה להשתנות בין הפעלות — וממנו בדיוק נגזרת טביעת האצבע של הרישיון. הוא נקבע מחדש בכל קריאה ונשמר בלי שדבר המתין לכתיבה, ולכן קריאה שנייה, או חלון עורך שנסגר זמן קצר לאחר ההפעלה, יכלו ליצור מזהה חדש. מזהה שמשתנה הוא מפתח הפעלה שמפסיק להתאים; הוא גם ניפח כל מספר שנספר לפי התקנה. כעת הוא נקבע פעם אחת בכל הפעלה ונשמר לפני שמשהו משתמש בו. גרסה 2.
0.2026.71 — איזה קובץ מעקב כיסה את השורה הזאת
2026-09-08
נוסף
- ייחוס מקור ברמת השורה. כששני קובצי מעקב או יותר טעונים, החלונית עם מספר הריצות מסתיימת כעת ב-מכוסה על ידי: ובדוחות שרשמו ריצה בשורה הזאת — ולחיצה על שורת קובץ מעקב בתצוגת Coverage מדגישה כעת את השורות שהוא תרם, בכל עורך פתוח, כפי שכבר הדגישה את הקבצים שמדד. זו השאלה היחידה שריצה ממוזגת יכולה לענות עליה ודוח בודד אינו יכול: שני קובצי מעקב שמודדים אותו קובץ חלוקים על שורותיו, ועד היום המיזוג השטיח את המחלוקת ומעולם לא הראה אותה. המיזוג עדיין נעשה לפי קובץ — הדוח החדש ביותר זוכה בקובץ משותף במלואו — ולכן המקורות לכל שורה נבנים לפני המיזוג. נספרות רק שורות מכוסות: דוח שרשם שורה כ-
0 לא כיסה אותה.
- הרשומה
TN: של lcov נקראת סוף סוף. קובץ מעקב שמציין את חבילת הבדיקות שלו — TN:integration — מוצג כ-coverage.info (integration) בכל מקום שבו מצוין מקור, והשם שורד ייצוא חזרה ל-lcov במקום להיכתב ריק. רוב הכלים כותבים TN: ריק ולא משתנה דבר; אלה שממלאים אותו הם בדיוק אלה שקובצי המעקב שלהם ממוזגים, ואז השם הוא הדבר היחיד שאומר מי הוא מי.
fuciniCoverage.lineHighlight צובע את השורות עצמן. off | uncovered | heatmap, כבוי כברירת מחדל: גוון שקוף למחצה מאחורי כל שורה לא מכוסה ומכוסה חלקית, ובמצב heatmap גם מאחורי כל שורה שרצה — חם יותר ככל שרצה יותר. הגדרה עצמאית ולא ערך רביעי של editorGutter.mode, כי רוצים אותם בצירופים שונים: הפערים צבועים והשוליים נקיים, או פסים בלי צבע מאחורי הקוד. שקוף למחצה כי הוא יושב מתחת לטקסט, והוא צובע את הפערים ולא את השורות המכוסות, מאותה סיבה שהשוליים עושים זאת.
fuciniCoverage.overviewRuler מחליט בעצמו על הפס בפס הגלילה. follow (ברירת המחדל) עושה מה שתמיד עשה: פס בכל מקום שבו השוליים מציירים פס לא מכוסה או חלקי, ולעולם לא עבור מפת החום. uncovered מצייר אותו גם כאשר editorGutter.mode כבוי — מפה של פערי הקובץ לאורך פס הגלילה ודבר לצד הקוד. off משאיר את הפסים ומסיר את הפס. קודם הסרגל היה קשור לשוליים, כך ששני הצירופים האלה לא היו אפשריים.
תוקן
- קובץ מעקב שאי אפשר לנתח אומר עכשיו כמה הוא נקרא. „…אינו תקין מבחינה מבנית” הותיר את הקורא לנחש אם הקובץ בכלל זוהה כפורמט שהוא חושב — ומסמך Cobertura שנדחה על ידי המנתח של VectorCAST הוא בעיה אחרת ממסמך Cobertura שנקטע באמת. ההודעה מסתיימת עכשיו ב-הקובץ נקרא כ-cobertura. כאשר מנתח כלשהו לקח על עצמו את הקובץ. אם אף אחד לא לקח, לא נוסף דבר: „אינו בפורמט שהתוסף הזה קורא” כבר אומר זאת במלואו.
0.2026.70 — ההודעה על נתונים מיושנים מציגה שוב את הסמל שלה
2026-09-08
תוקן
- ההודעה על נתונים מיושנים בחלונית שורת המצב מציגה שוב את סמל השעון, במקום הטקסט
$(history). ההודעה שאומרת שהמספרים שמתחתיה מתארים גרסה ישנה יותר של הקבצים נושאת את אותו סימן $(history) ששורת המצב עצמה נושאת. בשורת המצב הסימן מצויר כסמל שעון, מפני ש־StatusBarItem.text ממיר סמלים בעצמו; החלונית היא MarkdownString, שחייבת להצטרף לכך באמצעות supportThemeIcons ומעולם לא עשתה זאת — וכך השורה היחידה שמסבירה מדוע אי אפשר להאמין לכיסוי נפתחה בפיסת תחביר גולמי. החלונית מצטרפת לכך עכשיו.
0.2026.69 — מצבי שוליים, קובצי כיסוי מרוחקים, סביבות עבודה מרובות שורשים וקבצים שלא נמדדו
2026-09-08
נוסף
- השוליים של העורך עצמו יכולים כעת להציג שורות לא מכוסות, או מפת חום של מספרי פגיעות. כברירת מחדל הם עדיין מציגים רק ממצאים — פסי MC/DC, משולשי „מאז ההרצה האחרונה“, נקודות של שורות שנערכו — והתצוגה הצבעונית של קובץ שלם נשארת ה-Annotated Source.
fuciniCoverage.editorGutter.mode מאפשר יותר: uncovered מציב פס על כל שורה שמעולם לא רצה ופס ענברי על כל שורה שענף שלה מעולם לא נלקח, ושום דבר על שורות מכוסות, כך שקיר ירוק אינו מסתיר את שלוש האדומות; heatmap מוסיף גוון חם על כל שורה שבוצעה, חם יותר ככל שרצה יותר פעמים. Choose Editor Gutter Mode... עובר בין השלושה מלוח הפקודות או מתפריט שורת המצב. ה-README טען קודם ל„שוליים מובנים“ בלי הסתייגות; כעת הוא אומר מה באמת קיים. - מספרי פגיעות בתוך השורה.
fuciniCoverage.hitCounts.inline כותב ×12 אחרי כל שורה שפקודה מתחילה בה, כולל ×0 — המספר שתמיד היה בריחוף, בלי לרחף. Toggle Inline Hit Counts מחליף את המצב; תפריט שורת המצב מציע אותו כ„הצג“ או „הסתר“, לפי העניין. ${env:NAME}, ${config:section.key}, ${userHome} ו-${workspaceFolderBasename} בכל הגדרת נתיב, לצד ${workspaceFolder} שכבר היה שם. משתנה שההרחבה אינה מכירה נשאר כפי שנכתב, כך ששגיאת הקלדה מופיעה ביומן הגילוי כנתיב שחיפשה במקום להיעלם. - ערך ב-
coverageFile.paths יכול להיות כתובת http(s)://. הארטיפקט נשלף לאחסון של ההרחבה בכל טעינה ונטען משם; תצוגת הכיסוי מציינת את הכתובת, לא את נתיב המטמון. כל שליפה מותנית (ETag / Last-Modified), כך ששליפה חוזרת של ארטיפקט שלא השתנה אינה מורידה דבר, וכששליפה נכשלת נטען במקומה העותק האחרון שהורד והסיבה נמצאת בפלט. fuciniCoverage.remote.headers מוסיף כותרות Name: value עם הרחבת משתנים — Authorization: Bearer ${env:CI_TOKEN} משאיר את האסימון מחוץ ל-settings.json — ו-fuciniCoverage.remote.refreshMinutes שולף מחדש לפי שעון. הוסיפו #lcov.info (או שם קובץ אחר) כמקטע של הכתובת כשהכתובת עצמה אינה מסתיימת בשם קובץ, כדי שהפורמט יהיה ידוע. - הטעינה ו-Generate Full HTML Report מציגים התקדמות, וניתן לבטל אותם. טעינה של עשרה קובצי כיסוי או יותר, או 8 MB או יותר מהם, רצה תחת הודעת התקדמות עם כפתור ביטול שמציינת את הקובץ הנקרא ואת השלב (קריאה, ואז בדיקת מקורות); טעינה קטנה יותר רק מסובבת את שורת המצב כמו קודם. ביטול משאיר את ההרצה הקודמת טעונה ואומר זאת. דוח ה-HTML עושה אותו דבר לכל עמוד שמעובד ונכתב.
- שתי סיבות נוספות לטעינה מחדש. ערך מוחלט ב-
coverageFile.paths מחוץ לסביבת העבודה — עץ בנייה לצד ה-checkout, שורש פלט של Bazel — נדגם כעת גם הוא, כך שקובץ שמופיע שם אחרי שהחלון נפתח נטען במקום שלא יביטו בו שוב לעולם; הצופה ראה תמיד רק את סביבת העבודה. ו-fuciniCoverage.watch.reloadAfterTasks מציין משימות (label מ-tasks.json, או source: name כפי שרשימת Run Task מציגה אותן, למשל npm: test) שסיומן טוען מחדש את הכיסוי, בין אם watch.enabled מופעל ובין אם לא — לבניות שהצופה אינו יכול לעקוב אחריהן: הרצה שמחליפה עץ פלט מקושר סימבולית, דוח על שיתוף רשת, שלב כיסוי שמעבד את הקובץ שלו לאחר מעשה. - סביבות עבודה מרובות שורשים. כל תיקייה בסביבת העבודה מתגלה כעת בתנאים שלה:
coverageFile.defaultLocation, coverageFile.paths, pathRemap, ignore, watch.*, remote.*, badge.*, תיקיות הדוחות, gitDiff.*, problems.perLine, editorGutter.mode ו-hitCounts.inline נקראים לכל תיקייה, כך שה-.vscode/settings.json של התיקייה עצמה או הרשומה שלה ב-.code-workspace חלים; ${workspaceFolder} פירושו התיקייה של הרשומה עצמה; קובצי כיסוי שנמצאו בכל התיקיות ממוזגים להרצה אחת, ותצוגת הכיסוי מקבצת את הקבצים לפי תיקייה. ${workspaceRoot} בכלל pathRemap מנסה תחילה את התיקייה של קובץ הכיסוי עצמו, ואז את האחרות. כל מה שזקוק לתיקייה אחת — תיבות הדו-שיח של הקבצים, פלט הדוח והתג, מטא-נתונים של git, Run Tests with Coverage — לוקח את זו של העורך הפעיל, ועם כמה תיקיות ובלי עורך הרצת הבדיקות שואלת איזו. תיקייה שנוספה לסביבת העבודה או הוסרה ממנה טוענת מחדש את הכיסוי מעצמה. לפני כן שנים-עשר מקומות לקחו את התיקייה הראשונה, ושורש שני קיבל בסיס שגוי לכל דבר. - ההרצה מתפרסמת לתצוגת Test Coverage של VS Code עצמו. עם
fuciniCoverage.testCoverage.publish (מופעל כברירת מחדל) כל הרצה טעונה עוברת גם לחלונית Test Coverage המובנית, לאחוזים לכל קובץ שלה ב-Explorer ולמתג „Show Inline Coverage“ של העורך עצמו — שורות, ענפים ופונקציות, כשהפרטים נטענים לפי דרישה. Show in Test Coverage View מפרסם את ההרצה הפעילה ופותח את החלונית, יהיה אשר יהיה ערך ההגדרה; תפריט שורת המצב מציע זאת מאחורי quickActions.showTestCoverage. - כלל מיפוי נתיבים מוצע כשקבצים אינם תואמים. ה„נטען אבל שום דבר לא נדלק“ הנפוץ ביותר הוא קובץ כיסוי שנתיביו מגיעים מקונטיינר או מ-checkout של CI (
/build/src/a.c, /home/runner/work/repo/repo/src/a.c, C:\agent\_work\1\s\src\a.c) בעוד שבסביבת העבודה יש src/a.c. כשטעינה משאירה קבצים ללא התאמה, ההרחבה מחפשת את שמות הקבצים בסביבת העבודה, מסיקה את כלל הקידומת שמסביר את רובם, רושמת אותו כ-[FUCINI_REMAP_002], ותוצאת הטעינה מציעה Apply Suggested Remap — לחיצה אחת מוסיפה את הכלל ל-fuciniCoverage.pathRemap וטוענת מחדש. Suggest Path Remap Rule מריץ את אותו ניתוח לפי דרישה. שום דבר אינו נכתב בלי הלחיצה. fuciniCoverage.ignore: קבצים שלעולם אינם נספרים. קבצים של ספקים, קבצים שנוצרו אוטומטית או קבצי צד שלישי (vendor/**, **/*.generated.ts, build/**) מושמטים מההרצה בזמן טעינתה, כך שתצוגת הכיסוי, שורת המצב, ספי הסף, התגים, CodeLens, ההיסטוריה והייצואים סופרים כולם בלעדיהם; תוצאת הטעינה אומרת כמה הושמטו והפלט מציין אותם בשמם. תבניות תואמות את הנתיב היחסי לסביבת העבודה ואת הנתיב המוחלט; תבנית ללא / תואמת שם תיקייה או קובץ בכל עומק, כמו .gitignore. לקבצים שלמים — שורות בתוך קובץ ממשיכות להשתמש בסמני ההחרגה של הכלי עצמו. - רשומות Problems לכל שורה, לפי בחירה.
fuciniCoverage.problems.perLine (off, uncovered או uncoveredAndPartial; כבוי כברירת מחדל) מציב אבחון מסוג Information על כל בלוק רציף של שורות שמעולם לא רצו — פונקציה מתה בת ארבעים שורות היא רשומה אחת, לא ארבעים — ובמצב השני גם על כל שורה שענף שלה מעולם לא נלקח. רק למסמכים פתוחים, כך שהרצה של אלפיים קבצים אינה יכולה להציף את החלונית; הרשומות עוקבות אחרי השורות שלהן כשהחוצץ נערך ונעלמות כשהמסמך נסגר. הרשומה לכל קובץ שמאחורי problems.enabled לא השתנתה. - תג כיסוי ל-README. Generate Coverage Badge כותב SVG בסגנון shields להרצה הפעילה אל תוך סביבת העבודה (
fuciniCoverage.badge.outputPath, ברירת מחדל coverage-badge.svg), כדי ש-README יטמיע אותו עם  וללא שירות מארח. badge.metric בוחר שורות, ענפים, MC/DC או את הציון המשוקלל; הצבע עוקב אחרי מדרגות colorScale; badge.autoUpdate כותב אותו מחדש אחרי כל טעינה. תג ה-SVG ש-Export Coverage Report כבר הציע חולק כעת את אותו מנוע עיבוד. - לא נמדד לעומת לא מכוסה. קובץ ששום בדיקה מעולם לא טענה אינו נמצא בקובץ הכיסוי כלל, ולכן ההרחבה תמיד הפרידה בינו לבין קובץ שנמדד עם 0 פגיעות — והשאירה אותו מחוץ למספרים, וכך בדיוק פרויקט שמחצית מהמודולים שלו ללא בדיקות נקרא „92%“. כעת ההבחנה נראית: פתיחת קובץ כזה מציבה
not measured בשורת המצב, ו-fuciniCoverage.unmeasured.mode מחליט מה עוד קורה. list מוסיף קבוצת לא נמדדו לתצוגת הכיסוי עם כל קובץ בסביבת העבודה מהסוג שההרצה מדדה ושההרצה אינה מכילה, סופר אותם בתוצאת הטעינה, מסמן אותם ב-? ב-Explorer כשהתגים מופעלים, ומאפשר ל-threshold.unmeasuredFiles להכשיל את Check Coverage Thresholds מעבר למספר שנבחר. count הולך רחוק יותר: כל קובץ כזה מצטרף להרצה כ-0% — שורה לא מכוסה אחת לכל שורת קוד — כך ששורת המצב, ספי הסף, התגים, ההיסטוריה, הייצואים ותצוגת Test Coverage רואים כולם את המספר הכן; הקובץ מצויר כלא נמדד בכל מקום, לעולם לא כ„כבר אינו תואם לכיסוי שלו“. unmeasured.exclude משאיר בחוץ קובצי כותרת וכדומה (**/*.h, **/*.hpp, **/*.hh, **/*.inl, **/*.d.ts כברירת מחדל). כבוי כברירת מחדל; מצב שורת המצב הוא השינוי היחיד שתמיד פעיל. - תצוגת הכיסוי מראה מה עשה המיזוג. מאז 0.2026.63, הרצה חוזרת של מודול שנטענת מעל הרצה של הפרויקט כולו מחליפה את מספרי אותה הרצה עבור קובצי המודול, וכל שורה ציינה את הדוח שממנו היא מוצגת — אבל שורה שמספריה גברו על דוח ישן יותר נראתה בדיוק כמו שורה שנמדדה על ידי דוח אחד מבין כמה, ודבר לא אמר כמה מהדוח נדרס. עכשיו תג קובץ המעקב של שורה כזו מוקף במסגרת; כל שורת קובץ מעקב מעל העץ סופרת מה עשה המיזוג לקבציה („42 קבצים · 7 נדרסו על ידי דוח חדש יותר“, „7 קבצים · דורס 7 בדוחות ישנים יותר“); ולחיצה על שורת קובץ מעקב מדגישה בעץ המלא את הקבצים שהוא מדד ומעמעמת את השאר, עד ללחיצה נוספת.
fuciniCoverage.coverageView.mergedMarks (מופעל כברירת מחדל) מכבה את המסגרת ואת ההדגשה; הספירות נשארות.
0.2026.68 — מושבי צוות מבקשים את קוד ההזמנה
2026-09-07
תוקן
- משתמש Business או Enterprise מתבקש כעת להזין את קוד ההזמנה שלו, לא את קוד החברה. מאז 2 בספטמבר שרת הרישיונות דוחה את קוד החברה המשותף עבור מושב Business או Enterprise: מושב שנתפס באמצעותו לא נשא שם של איש, ולכן כל מושב צוות קשור כעת לכתובת שאליה נשלחה ההזמנה, והקוד שמפעיל מושב הוא קוד ההזמנה
FCI1… מאותו אימייל. השאלון עדיין סימן את השדה כ„קוד חברה“, רמז לבקש אותו מהמנהל והציג דוגמה FCB1… — ושלח אנשים להדביק דווקא את הקוד היחיד שכבר אינו עובד, וכשהשאירו אותו ריק אמר להם להזין קוד חברה. בתוכניות הצוות השדה נקרא כעת „קוד הזמנה“, הרמז אומר מאין מגיע הקוד ושקוד החברה המשותף אינו מפעיל מושב, הדוגמה מציגה את הצורה FCI1…, והודעת האימות מבקשת את קוד ההזמנה. Pro מבקש את קוד המנוי שלו בשם זה. Pro Plus לא השתנה: הוא שומר על הקוד המשותף בכוונה. כל 17 שפות התצוגה נושאות את הניסוח החדש.
0.2026.67 — ${workspaceFolder} עובד בשתי הגדרות הנתיבים
2026-09-05
תוקן
${workspaceFolder} עובד כעת ב-coverageFile.paths, כפי שתמיד עבד ב-coverageFile.defaultLocation. שתי ההגדרות יושבות זו לצד זו ורק אחת מהן תיעדה את המשתנה, ולכן אנשים כתבו אותו בשתיהן — ורשומה שמתחילה ב-${ אינה מוחלטת, כך שהיא נכנסה לגלוב החיפוש כמחרוזת מילולית תחת תיקיית הבסיס, לא התאימה לכלום, וההרחבה הודיעה שאין כיסוי. רשומה כזו מורחבת כעת תחילה, מה שהופך אותה לנתיב מוחלט, ופשוט נבדקת. היא נשארת בהגדרה כפי שנכתבה, אינה נכתבת פעם שנייה בצורה אחרת כשבוחרים את אותו קובץ, ויוצאת מההגדרה מעצמה כשמסירים אותה מתצוגת Coverage.- קובץ עקיבה מוגדר שאינו קיים מדווח כעת בפלט. רשומה עם נתיב שגוי נכשלה בדרך היחידה ששום דבר לא דיווח עליה: „לא נמצא כיסוי“, ללא הבדל מפרויקט שבאמת אין בו.
[FUCINI_DISCOVERY] מציין כעת כל רשומה שלא נמצא לה קובץ ואת הנתיב שבו חיפש, פעם אחת לרשומה ולא בכל טעינה מחדש; רשומה עם תו כללי אינה מדווחת, כי ייתכן שהיא ממתינה שבנייה תכתוב משהו.
0.2026.66 — ענפים, MC/DC וציון ב-CodeLens של הפונקציה
2026-08-29
נוסף
- ה-CodeLens לכל פונקציה מציג כעת ענפים, MC/DC וציון משוקלל, לא רק שורות ופגיעות — „add: 92% מכוסה (12/13 שורות, 52 פגיעות, ציון 88%, ענפים 3/4 (75%), MC/DC 2/3 (66%))“. כל אחד מהם מושמט מפונקציה נתונה כשלקובץ הכיסוי אין שם מה לדווח — בנייה ב-C טהור ללא נתוני ענפים, או כזו שלא הותקנה עם
-fcoverage-mcdc — במקום להציג 0/0 מטעה; גם הציון מוצג רק לצד לפחות אחד משני האחרים, שכן כששורות הן המדד היחיד הוא בהגדרה אותו מספר שהעדשה כבר פותחת בו.
- התיאור של תג המקור אומר לפני כמה זמן נכתב כל קובץ כיסוי, לא רק את חותמת הזמן שלו — „נמדד על ידי module.info (2026-08-15 14:32 · לפני 3 שעות), במקום מה ש-lcov.info (2026-08-01 09:10) אמר עליו.“ יורד עד „הרגע“; אחרי 30 יום מוצג רק התאריך המוחלט.
- תיקו ב-mtime של קובצי כיסוי כבר אינו שקט. שני דוחות שנכתבים באותו שלב בנייה, או מערכת קבצים שרזולוציית ה-mtime שלה גסה משנייה, עשויים לדווח על חותמת זמן זהה לקבצים ששניהם מדדו — קודם המנצח נקבע לפי הסדר ב-
coverageFile.paths בלי שדבר על המסך יסביר זאת. ערוץ הפלט אומר זאת כעת: [FUCINI_MERGE_TIE] מציין את שני קובצי הכיסוי וכמה קבצים משותפים להם.
- „הצג מה השתנה מאז ההרצה האחרונה“ בתפריט
… של שורת קובץ, ברגע שקיימת הרצה קודמת להשוות אליה — אותו הפרש לכל קובץ שCompare with Last Run כבר מחשב, מכוון לקובץ היחיד ששאלתם עליו במקום לעץ כולו. קובץ ששום דבר לא זז בו אומר זאת בפשטות במקום לא להציע דבר.
- הפקודה Tune Colour Scale: נסו צבעים וספים של
colorScale.* מול תצוגת הכיסוי החיה לפני שמתחייבים להם. כל עריכה נכתבת ישירות להגדרה — התצוגה כבר נצבעת מחדש בכל שינוי של colorScale/threshold, כך שכתיבת הערך היא התצוגה המקדימה — ו„שמור“ או „חזור לערכים המקוריים“ בסוף סוגרים את המעגל.
- פערי כיסוי לכל קובץ בחלונית Problems, רשומה אחת לכל קובץ מקור טעון שמתחת ל-
threshold.statement, מאחורי ההגדרה החדשה fuciniCoverage.problems.enabled (כבויה כברירת מחדל — סף המשפטים כברירת מחדל הוא 100). כל רשומה מסכמת מה לא מכוסה („62% מהשורות מכוסות — 14 שורות לא מכוסות, 2 פונקציות לא מכוסות“) ונושאת תיקון מהיר שפותח את הרחבת הצ׳אט המותקנת (Copilot, Claude Code, …) עם הנחיה לכתוב בדיקה לפער — אבחון לכל שורה היה מציף את Problems בבסיס קוד אמיתי, ולכן זה נשאר ברמת הקובץ, הרמה שבה הקורא באמת יכול לפעול.
תוקן
- הסיבה של קובץ חסר/לא תואם/מאומת בתצוגת הכיסוי ניתנת כעת לבחירה ולהעתקה. קודם היא חיה רק בתיאור ה-
title המובנה של השורה, שכיוון שהוא של הדפדפן עצמו אי אפשר לבחור בו; מי שרצה להדביק את הסיבה המדויקת בדוח תקלה נאלץ להקליד אותה מחדש ביד. ריחוף מציג כעת את אותו טקסט בחלונית אמיתית ומעוצבת, שאפשר לגרור עליה כמו על כל תוכן אחר בדף. התיאור של קובץ רגיל (הנתיב שלו בלבד) לא השתנה.
- פונקציה שרשימת הפרמטרים שלה משתרעת על כמה שורות כבר אינה מדווחת בטעות כמי שזזה.
detectMismatch הרשה לשורה הרשומה של הצהרה לחרוג מהמקום שבו שמה נמצא בפועל בשתי שורות לכל היותר — די לחריגה הרגילה בין שורת חתימה, שורת טיפוס החזרה וסוגר פותח, אבל לא לרשימת פרמטרים רב־שורתית, שיכולה להרחיק ביניהם ככל שתרצה. void LOG_Emit(...) — שבעה פרמטרים, אחד בכל שורה — שנרשמה בסוגר הפותח שלה, שורה 163, דווחה כ-"LOG_Emit" is at line 3: ההתאמה הטקסטואלית הקרובה ביותר, שבמקרה הייתה שם הפונקציה עצמה המוזכר בהערת הכותרת של הקובץ, רחוק משורה 163 ומההצהרה האמיתית בשורה 156. הבדיקה מקבלת כעת גם שם שנמצא רחוק יותר לאחור כשכל שורה בינו לבין השורה הרשומה נקראת כהצהרה אחת רציפה — בלי שורה ריקה, בלי שורה שמסיימת את המשפט או הבלוק הקודם — מה שרשימת פרמטרים עושה תמיד ופונקציה שבאמת זזה כמעט לעולם לא. היכן שאי־ההתאמה עדיין אמיתית, השורה המדווחת היא כעת ההתאמה הקרובה ביותר לרשומה, ולא תמיד הראשונה שנמצאה בקובץ.
- תג המקור כבר אינו אומר „+N“. טעינת הדוח של מודול מעל הרצה רחבה יותר סימנה את התג של הקובץ בשם המודול ועוד מספר קובצי הכיסוי האחרים שכיסו אותו — הכוונה הייתה „כך וכך נדחו“, אבל זה נקרא כ„הדוחות האלה מסכימים“, ולא הייתה דרך לדעת מהעץ לאילו מבין ה-n הוא התכוון בפועל. התג מציין כעת רק את קובץ הכיסוי שמספריו על המסך; התיאור עדיין מפרט מה נדחה, על ידי מה ומתי.
- תג המקור כבר אינו דוחף את שם הקובץ שלצידו מעבר לקצה החלונית. רוחב התג היה קבוע (
flex: none), ולכן ברגע שלשורה נגמר המקום שם הקובץ ספג את כל הגירעון ונקטע ראשון, אף שהתג הוא הפחות חשוב מבין השניים. התג מוותר כעת על רוחבו שלו לפני ששם הקובץ מאבד ולו תו אחד; האחוז והפס, שממילא עולים בחשיבותם על שם הקובץ, אינם מושפעים.
0.2026.65 — הרצה חוזרת של מודול מחליפה את מה שהרצה רחבה יותר אמרה
2026-08-15
שונה
- הרצה חוזרת של מודול מחליפה את מה שהרצה רחבה יותר אמרה עליו, במקום להתווסף אליו. טעינת דוח של הפרויקט כולו ואחריו הדוח של מודול יחיד מעליו סיכמה את ספירות הפגיעות של כל קובץ שהיה משותף לשניהם — הרצה חוזרת של בדיקות אותו מודול בלבד ניפחה מספרים שהרצה רחבה יותר, שכבר התיישנה, דיווחה עליהם קודם, במקום לרענן אותם. קובץ הכיסוי בעל ה-mtime החדש ביותר בדיסק מנצח כעת לחלוטין בכל קובץ שהוא מודד: משפטים, ענפים, הצהרות והסיכומים לכל קובץ (סיכומי ענפים, MC/DC, פונקציות, קריאות לפונקציות, אובייקטים ומוטציות) מגיעים כולם מהדוח הזה בלבד, בלי קשר למקומו של כל אחד מהנתיבים ב-
coverageFile.paths — הרצה חוזרת של מודול מנצחת כי היא באמת חדשה יותר, לא כי במקרה נטענה אחרונה. קובץ כיסוי שאינו מדווח על משפטים כלל עבור קובץ — ייצוא קוד־אובייקט מ-TRACE32, דוח מוטציות של Stryker שנטען לצד דוח אמיתי — עדיין תורם רק את הסיכום שהוא באמת נושא, ומשאיר את פירוט השורות/הענפים של דוח קודם ללא שינוי; המקרה הזה אינו מושפע. זה גם מסיר פגם ותיק שבו סיכום MC/DC (או פונקציות/קריאות לפונקציות/מוטציות) לכל קובץ שנמדד בשתי הרצות קיבל מכנה מסוכם יחד עם המונה, והציג אחוז נמוך מהאמיתי. התיאור של תג המקור אומר כעת „במקום מה ש-_ אמר עליו“ ולא „סוכמו יחד“.
תוקן
- שם קובץ ארוך בתצוגת הכיסוי נקטע כעת במקום לגלוש. ל-span של השם בשורה חסר היה
min-width: 0, ההצהרה היחידה שמאפשרת ל-overflow/text-overflow: ellipsis של פריט flex לפעול בפועל — בלעדיה שם ארוך שמר על רוחבו המלא ברגע שהחלונית הצטמצמה מספיק, ורץ מתחת לתג המקור, לאחוז ולפס שאחריו.
0.2026.64 — מיון תצוגת הכיסוי לפי ציון
2026-08-01
נוסף
- מיינו את תצוגת הכיסוי לפי ציון, לא רק לפי שם. כל שורה כבר נושאת ציון WHM ופירוט לפי מדד; מציאת הקובץ הגרוע ביותר בעץ גדול פירושה היה לקרוא רשימה אלפביתית עד שמוצאים אותו. תפריט נפתח ליד כווץ הכול / הרחב הכול מציע כעת שם קובץ, ציון משוקלל, שורות, ענפים ו-MC/DC — כל מצב מלבד שם קובץ משלב תיקיות וקבצים יחד, הגרוע ראשון לפי האחוז של אותו מדד עצמו, כך שתיקייה שנבדקה גרוע מדורגת בדיוק כמו קובץ שנבדק גרוע במקום להיות מקובצת הרחק ממנו. קובץ ללא נתונים למדד המוצג (פורמט שלעולם אינו מדווח על ענפים, למשל) ממוין לתחתית במקום להיקרא כ-0%. הבחירה נכתבת להגדרה החדשה
fuciniCoverage.coverageView.sortBy ברגע שהיא נעשית, כך שהיא שורדת טעינה מחדש של החלון במקום להתחיל תמיד מחדש משם קובץ.
תוקן
- חתימת פונקציה רב־שורתית כבר אינה מסומנת בטעות כ„זזה“. ה-
fnMap של Istanbul נותן לפונקציה שתי הפניות לשורה — היכן יושב שמה והיכן מתחיל גופה — והמפענח העדיף את שורת הגוף לבדיקת אי־ההתאמה שמחפשת אחר כך את השם בטקסט המקור. לכל פונקציה שרשימת הפרמטרים שלה משתרעת על יותר משתי שורות (דבר שבשגרה בבסיס קוד שנשבר ב-100 עמודות) השורה האמיתית של השם הייתה רחוקה מדי מהרשומה, והקובץ עומעם בתצוגת הכיסוי עם אזהרת „כבר אינו תואם את הכיסוי שלו“ כוזבת. המפענח מעדיף כעת את השורה של השם עצמו, שהיא מה שבדיקת אי־ההתאמה תמיד חיפשה.
0.2026.63 — כל שורה מציינת את קובץ הכיסוי שלה
2026-07-20
נוסף
- כל שורה מציינת איזה קובץ כיסוי מדד אותה. טעינת הדוח של מודול אחד מעל הרצה של הפרויקט כולו היא אותם קבצים שנמדדו פעמיים, והעץ לא אמר דבר על הדוח שממנו נקראה שורה. כשטעונים יותר מקובץ כיסוי אחד, כל שורת קובץ נושאת עכשיו את שם הדוח שמדד אותה — האחרון שנטען, כאשר היו כמה — עם
+1 לכל אחד מהאחרים ועם תיאור שמונה אותם. מיזוג מסכם את הפגיעות שלהם במקום להכריע ביניהם, והתיאור אומר זאת. עם קובץ כיסוי יחיד לא מצויר דבר, כי אין מה להבחין.
שונה
- הדף של ההרחבה מונה כל הגדרה, עם ערך ברירת המחדל האמיתי שלה. לעשרים הגדרות לא הייתה שורה כלל — השפה, שלושה ספים, משקל אחד וחמישה־עשר מתגי פעולות מהירות — ושורת הטלמטריה טענה שברירת המחדל היא דלוקה, בעוד שהיא כבויה מזה זמן. בדיקה משווה כעת את הדף למניפסט, כולל ברירות המחדל.
תוקן
- הבדיקה החוזרת של קבצים תחת
files.watcherExclude, שנוספה בגרסה הקודמת, מצייתת כעת ל־staleWarning.enabled כמו שאר הבדיקה, ולא לשם הגדרה משלה.
0.2026.62 — הסייר נשאר כשהיה, קבצים מושתקים נבדקים מחדש
2026-07-06
שונה
- הסייר נשאר כשהיה. תגי הכיסוי לצד קבצים בסייר כבויים כברירת מחדל. העמודה הזאת שייכת למי שמשתמש בה — VS Code מציב שם את ה־M וה־U של git, ורק תג אחד נכנס — ותצוגת הכיסוי מציגה את אותם קבצים עם אותם מספרים, במקום שנועד להם.
explorerBadges.enabled מחזיר אותם כפי שהיו.
תוקן
- גם קובץ מקור תחת
files.watcherExclude נבדק מחדש. ההתאמה החיה בין קובץ לכיסוי שלו מונעת משמירות ומצופה של מערכת הקבצים, וזה שותק לגבי כל מה שהוחרג — בעיקר קבצי מקור שנוצרים תחת build/, שם קשה ביותר להבחין בסימון מיושן. הקבצים האלה נדגמים כעת באותו פעימה של שתי שניות כמו קובצי הכיסוי, ונקראים מחדש רק כשהם באמת השתנו. מעל מאתיים כאלה, הפלט אומר זאת במקום לבזבז את הפעימה.
0.2026.61 — שאלה אחת על מריץ הבדיקות, לא אחת לכל הרצה
2026-06-09
נוסף
- שואלים על מריץ הבדיקות פעם אחת, לא בכל הרצה. סביבת עבודה עם יותר ממריץ מזוהה אחד — נניח תצורת jest ו־
go.mod — הציבה את הבורר לפני כל Run Tests with Coverage, וגבתה הקשה עבור החלטה שכבר התקבלה. התשובה נשמרת עכשיו עבור סביבת העבודה, וההודעה אומרת זאת. Forget the Test Runner מחזיר את השאלה, ומריץ שנשמר ואינו קיים עוד בסביבה מתעלמים ממנו במקום להריץ אותו.
שונה
- הדף של ההרחבה מונה כל פקודה. ארבע־עשרה מתוך שלושים וארבע נשמטו מהטבלה — הן מתועדות כאן ובמדריך, אך לא בדף שקוראים לפני ההתקנה. עכשיו כולן מופיעות, ובדיקה שומרת על כך.
0.2026.60 · build 3 — ביטול מסיר שוב את הנקודות
2026-06-01
תוקן
- ביטול מסיר שוב את הנקודות משורות שנערכו. חוצץ שנערך מאז ההרצה מציג נקודות אפורות על השורות שנכתבו מחדש, והכיסוי נסוג מהן. ביטול העריכות השאיר את הנקודות במקומן: כל שינוי נספר, גם שינוי שהחזיר את הטקסט. עכשיו נשמר מה שהחוצץ הכיל לפני שמישהו הקליד, וברגע שהוא מכיל זאת שוב הנקודות יורדות והמספרים חלים עליו מחדש.
- מספרי הגרסה נבדקים זה מול זה. המניפסט, הרשומה העליונה ביומן השינויים ותג הגרסה נושאים גרסה ומספר בנייה, שלושתם מוקלדים ביד, וכבר קרה שנפרדו. מערך הבדיקות משווה ביניהם ובודק שהרשומות יורדות מהחדשה ביותר, לכל אחת תאריך אמיתי.
0.2026.59 — הסרה שנשארת
2026-05-12
שונה
- קובץ כיסוי שהוסר נשאר מוסר. הסרת קובץ מהרשימה בתצוגת הכיסוי החזיקה בדיוק כאורך החלון: כשאין הגדרה, הגילוי נסוג לשמות המוכרים ומצא שוב את
lcov.info למחרת בבוקר, והדרך היחידה לומר אחרת הייתה להגדיר נתיב כדי להחריג אחד. ההחלטה נשמרת עכשיו עבור סביבת העבודה. מבטלים אותה בבחירת הקובץ מחדש או בציונו ב־coverageFile.paths — קובץ שההגדרה מציינת לעולם אינו נמנע, כך ששום דבר לא ייעלם בלי שמישהו אמר זאת.
תוקן
- ציור מחדש מהיר יותר של חוצץ שנערך. רשימת השורות שנכתבו מחדש חושבה מכל העריכות שנרשמו בכל ציור מחדש, כך שקובץ ארוך שנערך כל אחר הצהריים שילם מספר שורות כפול מספר עריכות עבור תשובה שלא השתנתה מאז ההקשה האחרונה. עכשיו היא מחושבת פעם אחת לכל הקשה.
0.2026.58 · build 2 — הרצת בדיקות זוכרת את קובץ הכיסוי שלה
2026-05-01
שונה
- הרצת בדיקות זוכרת את קובץ הכיסוי שלה, בדיוק כמו בחירה ידנית. Run Tests with Coverage טענה את מה שההרצה כתבה ואז שאלה אם להוסיף אותו ל־
coverageFile.paths. קובץ שנבחר ביד נכתב לשם מעצמו מאז 0.2026.56, והרצת בדיקות היא אותה פעולה בדרך אחרת, ולכן היא כותבת אותו כעת באותו אופן. הגדרה אחת, coverageFile.rememberPicks, שולטת בשתיהן; שורת קובץ הכיסוי בתצוגת הכיסוי היא המקום שממנו כל אחת מהן יורדת שוב.
תוקן
- שעוני הרקע נעצרים כשההרחבה נעצרת. הצופה בקובץ הכיסוי שוחרר יחד עם החלון, אבל הדגימה כל שתי שניות שמאחוריו וכל בדיקה חוזרת ממתינה הם שעונים רגילים, ששום דבר אינו משחרר. כיבוי ההרחבה, או טעינה מחדש של חלון כשההרחבה כבויה, הותיר אותם פועלים וקוראים סביבת עבודה שלהרחבה כבר לא היה בה עסק.
0.2026.57 · build 4 — תצוגה מקדימה חיה עם תווית, דגלים מצוירים, כל פורמט בדו-שיח הבחירה
2026-04-24
נוסף
- התצוגה המקדימה החיה אומרת מה היא מציגה. התצוגה המקדימה בחלונית ההגדרות מתחילה עכשיו בהרצה: coverage/lcov.info · 12 קבצים, וכשהעורך הפעיל מציג קובץ שההרצה מכסה — בקובץ פעיל: src/a.c עם הפסק של הקובץ עצמו מתחת לזה של ההרצה. היא עוקבת אחרי העורך ואחרי כל טעינה, לפי מה שהטופס מכיל — כולל עריכות שלא נשמרו. כשהחלונית מלפנים, לחיצה בתצוגת הכיסוי מעבירה את התצוגה המקדימה לקובץ הזה במקום לפתוח אותו.
- דו-שיח הבחירה מציין כל פורמט. תחילה כל פורמטי הכיסוי, אחר כך LCOV; JSON (llvm-cov, Istanbul/nyc, coverage.py, SimpleCov, Coveralls, gcov, xccov, Stryker); XML (Cobertura, JaCoCo, Clover, OpenCover, GNATcoverage, Bullseye, SonarQube, VectorCAST, TRACE32, EMMA, UCIS/UCDB, NCover, dotCover, PIT); פרופיל כיסוי של Go; פלט gcov ו-Testwell CTC++ — ו-
.lcov, .gcov, .txt ו-.coveragexml כבר אינם מעומעמים.
שונה
- הריחופים בשורת המצב לובשים את סולם הצבעים. פסי המדדים בתיאורי ההרצה והקובץ מקבלים את שלושת הצבעים של
colorScale.*, מדורגים לפי הסף של כל מדד היכן שהוגדר ולפי נקודות הסולם אחרת; תגי הפסק שומרים על צבעי המצב הקבועים שלהם.
- דגלים מצוירים בהגדרת השפה. אמוג'י הדגלים מ-0.2026.56 מוצגים ב-Windows כשתי אותיות חשופות. הרשימה מציינת עכשיו כל שפה בשמה שלה — Nederlands (nl) — ומתחתיה שורה של דגלים מצוירים קטנים שבוחרים ברשימה.
0.2026.56 · build 3 — בחירות נזכרות, קובצי מעקב בתצוגת הכיסוי, דגלים בהגדרת השפה
2026-04-08
נוסף
- בחירה נזכרת. קובץ שנבחר עם Pick Coverage File חי רק בחלון שבו נבחר. עכשיו הוא נכנס מעצמו ל-
coverageFile.paths בהגדרות סביבת העבודה — יחסית לתיקיית הבסיס אם הוא תחתיה, מוחלט אחרת — כך שהחלון הבא טוען אותו והמשגיח טוען אותו מחדש. coverageFile.rememberPicks (מופעל כברירת מחדל) שומר על ההתנהגות הישנה למי שרוצה. רשומה מוחלטת בהגדרה הזו מציינת עכשיו קובץ אחד בכל מקום שהוא.
- קובצי מעקב בתצוגת הכיסוי. מעל העץ, שורה לכל קובץ מעקב טעון עם מספר הקבצים שלו וכפתור הסרה שמוציא אותו מההרצה ומההגדרות; כפתור בחר… לצידם מוסיף אחד. הסרת קובץ המעקב האחרון מנקה את ההרצה.
- דגלים בהגדרת השפה. רשימת השפות בחלונית ההגדרות הציגה קודים חשופים; כל רשומה נושאת עכשיו דגל ואת שם השפה בשפתה — 🇳🇱 Nederlands (nl), 🇯🇵 日本語 (ja), 🌐 אוטומטי.
0.2026.55 — השורה האחרונה של קובץ PHP אינה כיסוי מעבר לסוף
2026-03-27
תוקן
- השורה האחרונה של קובץ PHP כבר אינה נחשבת כיסוי מעבר לסוף הקובץ. Xdebug ו-PCOV רושמים את ה-return המרומז של סוף הקובץ בשורה שאחרי המעבר האחרון, ולכן php-code-coverage כותב פגיעה ב"שורה 252" של קובץ בן 251 שורות — ובדיקת אי-ההתאמה קראה לזה סתירה בכל קובץ PHP עם מעבר שורה בסופו. שורה אחת מעבר למעבר שורה סופי מותרת עכשיו; הפניה רחוקה יותר, או מעבר לקובץ ללא מעבר שורה סופי, נשארת הסתירה שהייתה.
0.2026.54 · build 2 — שורת ניסיון ב-What Community Includes
2026-03-24
נוסף
- שורת ניסיון ב-What Community Includes, במהדורת Community. למהדורה הזו מעולם לא היה ניסיון, ולכן הרשימה שלה מתחילה עכשיו בהתחל ניסיון Pro ל-14 יום…, שפותח את הרישום של Pro; ההפעלה של מהדורת Pro מציעה אחר כך להסיר את מהדורת Community מהדרך. Community נשאר חינמי בכל מקרה.
0.2026.53 — Show Worst-Covered Folders
2026-03-03
נוסף
- Show Worst-Covered Folders. התשובה ברמת התיקייה ל-Show Worst-Covered Files: כל תיקייה מדורגת לפי הכיסוי של כל מה שמתחתיה, הגרועה תחילה, מאותו אינדקס שממנו מצוירים תגי הסייר; בחירה מציגה את התיקייה בסייר. בתפריט שורת המצב עם
quickActions.worstCoveredFolders.
0.2026.52 — בדיקת הספים בחלונית הבעיות
2026-01-23
נוסף
- בדיקת הספים בחלונית הבעיות. עם
compliance.diagnostics מופעל, כל מדד threshold.* שלא עמד בסף הוא שגיאה אחת בבעיות, על קובץ המעקב שנכשל בו, מתרעננת בכל טעינה וב-Check Coverage Thresholds, ונמחקת כשהבדיקה עוברת. כבוי כברירת מחדל, כי סף המשפטים המובנה הוא 100.
שונה
- תיאור
watch.enabled כבר אינו מבטיח שאלה. הוא עדיין אמר שהרמה החינמית נשאלת לפני טעינה מחדש — נכון עד 0.2026.48, לא מאז. נכתב מחדש בכל 18 השפות.
0.2026.51 · build 2 — Run Tests with Coverage
2025-12-08
נוסף
- Run Tests with Coverage. מזהה vitest, jest, pytest, go, cargo, dotnet, maven, gradle, phpunit או ctest משורש סביבת העבודה, מריץ אותו עם כיסוי מופעל במשימת טרמינל, טוען את מה שנכתב בין אם הבדיקות עברו ובין אם לא, ומציע פעם אחת להוסיף את הנתיב ל-
coverageFile.paths כדי שמעתה המשגיח יטפל בטעינה. כמה מריצים מוצעים לבחירה; אף אחד לא שולח אתכם למתכונים.
0.2026.50 — הכיסוי עוקב אחרי הטקסט במאגר שנערך
2025-10-23
נוסף
- הכיסוי עוקב אחרי הטקסט במאגר שנערך. העריכות בכל מאגר פתוח מאז טעינת ההרצה נשמרות, וכל משטח שקורא מספרי שורות של ההרצה — מספר הפגיעות בריחוף, פס ה-MC/DC, משולש "מאז ההרצה האחרונה", ה-CodeLens, Next Uncovered — קורא דרכן: סימון זז עם השורה שלו ונסוג משורה שנכתבה מחדש, שם נקודה אפורה קטנה אומרת מדוע.
dirtyMarks.enabled מכבה את הנקודות.
0.2026.49 — מאז ההרצה האחרונה, בשוליים
2025-09-26
נוסף
- מאז ההרצה האחרונה, בשוליים. כל שורה שבוצעה בהרצה הקודמת ולא בזו נושאת משולש אדום בשולי העורך, כל שורה שהלכה בכיוון ההפוך משולש ירוק, כל אחד עם פס בסרגל הסקירה ומספרי הפגיעות בריחוף. שורות שלא השתנו אינן מציגות דבר.
sinceLastRun.enabled מכבה זאת.
שונה
- הבסיס ל"הרצה האחרונה" שורד הפעלה מחדש. עם
history.enabled מופעל, ההרצה החדשה ביותר בהיסטוריה ממלאת את התפקיד בטעינה הראשונה של חלון, כך שבנייה שהסתיימה לפני פתיחת החלון עדיין מראה מה שינתה — בשוליים וב-Compare with Last Run.
0.2026.48 · build 6 — טעינה מחדש מעצמה בכל מקום, הסימון עוקב אחרי הקובץ, ההבדל המדויק בריחוף
2025-09-19
נוסף
- הפסק על קובץ נשאר עדכני אחרי הטעינה. קובץ נבדק מול הכיסוי שלו פעם אחת, בעת טעינת קובץ המעקב, ואחר כך לעולם לא: ערכו אותו אחר צהריים שלם והשוליים המשיכו לצייר מספרים על גרסה שכבר לא קיימת. עכשיו שמירה בעורך בודקת את הקובץ מחדש מיד, ושינוי מחוץ לעורך —
git checkout, מעצב קוד, מחולל — בודק אותו מחדש מהדיסק רגע לאחר מכן. קובץ שמתחיל לסתור את ההרצה שלו מקבל את הסימון; checkout שמחזיר את הגרסה שנמדדה מסיר אותו.
- ההבדל המדויק, בריחוף. היכן שקובץ כבר אינו תואם לכיסוי שלו, תצוגת הכיסוי והתיאור בסייר אומרים בדיוק מה הוכיח זאת: השורה כפי שהיא נקראת עכשיו מול מה שהדוח רשם כשקובץ המעקב שמר את הטקסט, השורה וסכום ביקורת שנכשל כשהוא שמר תקציר, כיסוי מעבר לסוף הקובץ, פונקציה שכבר אינה במקום שהדוח מציב אותה. אותו פירוט מגיע לערוץ הפלט, שורה לכל קובץ, לשם מוביל הצג אילו בתוצאת הטעינה.
- מתג לתגי הסייר.
explorerBadges.enabled (מופעל כברירת מחדל) מסתיר את הציון, ✓ ו-⚠ ליד כל קובץ מכוסה בסייר, ואיתם את התיאור לפי מדד. השוליים, שורת המצב ותצוגת הכיסוי אינם מושפעים.
שונה
- כל רמה טוענת מחדש מעצמה כשקובץ המעקב משתנה. מאז 2026-09-02 הרמה החינמית נעצרה בשאלה זוהה כיסוי חדש — לטעון? בעוד רישיונות בתשלום נטענו מחדש בשקט. בנייה מסתיימת, המספרים חדשים, ומי שהפעיל מעקב כבר ענה על השאלה — לכן השאלה הוסרה בכל רמה, וכך גם ההודעה שהסבירה אותה.
- טעינות שהמוצר מבצע מעצמו כבר אינן נספרות במכסה היומית של הרמה החינמית. טעינה מחדש של המשגיח או הגילוי בהפעלה אינם טעינה שמישהו ביקש; ספירתן הייתה מכלה את מכסת התקנת Community בבוקר אחד של הרצות בדיקה ואז משאירה הרצה ישנה על המסך בלי שום דבר שיאמר זאת. המכסה מודדת עכשיו רק את הפקודה ואת הבורר.
- חותמת זמן שהשתנתה לבדה כבר אינה מסמנת קובץ. האזהרה N קבצים השתנו מאז ההרצה הזו נגזרה מ-mtime של כל מקור, ו-
git pull או מעצב קוד משנים כל mtime בלי לשנות את מה שנמדד. היא הוסרה, יחד עם הסימון שלה בשורת המצב. קובץ נקרא עכשיו "השתנה" רק כשתוכנו סותר את ההרצה, ושורת המצב, תוצאת הטעינה ושורת פלט חדשה FUCINI_MISMATCH_001 קוראות כולן מזה. staleWarning.enabled שומר על שמו ומתאר עכשיו בדיוק את בדיקת התוכן.
- מעקב אחרי תיקייה תחת
files.watcherExclude נאמר בפלט. פלט הבנייה הוא הדבר הראשון שמוציאים מהמשגיח של VS Code, ואחריו רק התשאול כל 2 שניות מבחין בהרצה חדשה. ערוץ הפלט מציין עכשיו את התיקייה ואת התבנית כשהמשגיח מתחיל.
0.2026.47 · build 2 — נתיבים לא מותאמים על המסך, רמז בהפעלה הראשונה, שני מקשים נוספים
2025-08-09
נוסף
- רמז בהפעלה הראשונה לסביבת עבודה שאין בה מה לטעון. המעקב מופעל כברירת מחדל והטעינה בהפעלה שקטה, כך שהתקנה חדשה בפרויקט שעדיין אין בו קובץ עקיבה לא אמרה דבר. הטעינה השקטה הראשונה שחוזרת ריקה אומרת זאת עכשיו — פעם אחת, לתמיד — עם שני הדברים ששווה לעשות: לבחור קובץ כיסוי ידנית, או לפתוח את המתכונים כיצד להפיק אחד עם שרשרת הכלים שלכם. טעינה שמישהו הפעיל ידנית שומרת על ההודעה שלה.
- מקשים ל-Toggle Annotated Source ול-Load Coverage.
Alt+A מחליף את הכרטיסייה הפעילה בין המקור לתצוגה המוערת שלו; Alt+Shift+R מגלה מחדש וטוען מחדש את הכיסוי (Ctrl+Alt+A / Ctrl+Alt+R ב-macOS). ניתנים למיפוי מחדש כמו השניים שנוספו ב-0.2026.45.
שונה
- נתיבים שאינם תואמים לדבר בסביבת העבודה נספרים על המסך. נתיב קובץ עקיבה שאינו נפתר לשום קובץ בסביבת העבודה נטען ולעולם אינו נדלק — ה"זה עבד אבל כלום לא מוצג" הנפוץ ביותר שיש — ועד עכשיו העדות היחידה הייתה שורת
FUCINI_REMAP_001 בערוץ הפלט, עם כלל pathRemap שהיה פותר זאת, שלא נקרא. תוצאת הטעינה סופרת אותם עכשיו, עם אילו? לשמות ולכלל המוצע, ופתח את ההגדרה pathRemap למקום שבו לשים אותו. - בורר הקבצים בתפריט שורת המצב מציין את הפורמטים שהוא קורא. התיאור שלו עדיין מנה את חמשת הפורמטים מהגרסה הראשונה; עכשיו הוא אומר עשרים וחמישה, מ-lcov, Cobertura ו-JaCoCo ועד gcov, llvm-cov, TRACE32 ודוחות מוטציה.
0.2026.46 — מוצא מהתנגשות המהדורות, ומגבלה שקטה יותר
2025-08-06
שונה
- שתי המהדורות מותקנות: שני כפתורים במקום הוראות. כש-Pro ו-Community מותקנות יחד, אף אחת מהן לא יכולה להיטען — הן מגדירות את אותן פקודות ותצוגות — וההודעה שאמרה זאת הסתיימה בהנחיות אל תצוגת ההרחבות. שתי התרופות הן פקודה אחת כל אחת, ולכן הן עכשיו כפתורים: שמור על זה מסיר את המהדורה השנייה ומציע טעינה מחדש; הצג את שניהם בהרחבות פותח את תצוגת ההרחבות בדיוק על שתי אלה. אם ההסרה נכשלת, הטעינה מחדש עדיין מוצעת — היא זו שמכריעה איזו מהדורה פעילה.
- מגבלת שימוש מוכרזת במלואה פעם אחת, ואחר כך רק בשורת המצב. בפעם הראשונה שמגיעים למגבלת Community מגיעה לה התשובה המלאה — המספרים, התוכנית, הפתיחה באמצעות טלמטריה, רשימת מה שכלול ברמה. בפעם החמישית, עשר דקות אחר כך, לא. במהלך הפעלה אחת, פגיעות נוספות באותה מגבלה מציבות שורה של שמונה שניות בשורת המצב ואינן מפריעות לדבר. הזנת מפתח מתחילה מחדש, כי רישיון חדש הוא סט מגבלות חדש.
0.2026.45 — מקשים ל-Next / Previous Uncovered
2025-07-26
נוסף
- ל-Next / Previous Uncovered יש מקשים. אלה שתי הפקודות שלוחצים עליהן שוב ושוב בזמן קריאת קובץ, ועד עכשיו כל לחיצה פירושה היה לפתוח את לוח הפקודות ולהקליד את השם.
Alt+N עובר לטווח הלא-מכוסה הבא ו-Alt+P לקודם (Ctrl+Alt+N / Ctrl+Alt+P ב-macOS, שם Option מקליד תווים). שניהם תקפים רק בעורך טקסט ממוקד וניתנים למיפוי מחדש תחת Keyboard Shortcuts כמו כל ברירת מחדל אחרת.
0.2026.44 · build 3 — מגבלות הרמה החינמית, ברשימה אחת
2025-07-24
נוסף
- מה כלול ב-Community, כרשימה אחת. הרמה החינמית מגבילה שמונה פעולות ומונעת שתים-עשרה תכונות, וכל אחת מההחלטות האלה נאכפה בדלת משלה — כך שהדרך היחידה ללמוד את צורת הרמה הייתה להיתקל בכל קיר בתורו, באמצע משימה. פקודה חדשה, What Community Includes, מציגה הכול בבת אחת: כל פעולה מוגבלת עם כמה מהיום או מהחודש כבר נוצל, כל תכונה מנועה בשמה, ושתי הדרכים להסיר זאת — תוכנית בתשלום, או הפתיחה באמצעות טלמטריה.
- מוצע בכל מקום שבו השאלה עולה. פריט בתפריט שורת המצב, כפתור בכרזת הרישיון של תצוגת Coverage, וכפתור בשתי ההודעות שהתקנת Community פוגשת מול קיר — הגעתם למגבלת השימוש ופעולה זו אינה כלולה. השורות נגזרות מאותו סט הרשאות שהשערים אוכפים, כך שמה שהרשימה אומרת הוא מה שיקרה.
שונה
- מצב המעקב אומר מה הוא יעשה ברמה החינמית. הפריט בשורת המצב הבטיח לכולם "לטעון מחדש כיסוי אוטומטית", וב-Community זו הבטחה שהמעקב אינו מקיים — הוא מבחין, ושואל. הפריט אומר זאת עכשיו שם, והפקודה נקראת Toggle Tracefile Watch, כי "Toggle Watch" מעולם לא אמר אחרי מה עוקבים. ההתנהגות עצמה לא השתנתה.
0.2026.43 · build 3 — טעינה שנכשלה אומרת למה, וקבצים מוסתרים נספרים
2025-06-25
שונה
- קובץ עקיבה שאינו נטען אומר עכשיו למה, ומה לנסות. כל כישלון הפיק את אותה הודעה — "no coverage could be parsed. See output." — כשהסיבה נמצאת ערוץ אחד משם, כקוד והודעת מנתח. ההודעה מתחילה עכשיו בקובץ וממיינת את הסירוב לפי מה שהיה: לא בפורמט שההרחבה קוראת, אינו תקין מבנית (הסיבה השכיחה היא בנייה שעדיין כתבה אותו), תקין מבנית אך אינו מתעד דבר (הריצה לא הריצה קוד מכויל), או לא ניתן לקרוא. מילות המנתח עצמו מצורפות, מספר קבצים נספרים, וערוץ הפלט מוצע מאחורי כפתור הצג פלט במקום להיפתח בכוח.
- קבצים שקובץ עקיבה מונה אך אין בהם מה למדוד נספרים עכשיו על המסך. קובץ כותרת עם הצהרות בלבד תמיד הושאר מחוץ לתצוגת Coverage במקום לקבל 100% מתוך 0 מ-0 — ושמו נכתב לערוץ הפלט, ולשום מקום אחר. תוצאת הטעינה אומרת עכשיו N קבצים ללא דבר לכיול אינם מוצגים, עם כפתור אילו? שפותח את הערוץ שבו השמות.
0.2025.42 · build 3 — NCover ו-dotCover, כיסוי ה-.NET שלא היה לו לאן ללכת
2025-06-08
נוסף
- NCover ו-JetBrains dotCover. ה-Cobertura של Coverlet ו-OpenCover כבר נקראו כאן, מה שמכסה את רוב עבודת ה-.NET החדשה ושום דבר מהסוג הישן. בנייה שעדיין כותבת את
Coverage.xml של NCover, או צוות שמודד עם dotCover, היו להם נתוני כיסוי על הדיסק שההרחבה הזו לא יכלה לפתוח. אף אחד מהפורמטים אינו זקוק לממיר: שניהם כבר נושאים שמות קבצים ומספרי שורות. - נקודת NCover מוחרגת מושמטת, ולא נספרת כלא-פועלת.
excluded="true" מסמן קוד שהוצא בכוונה מהמדידה — חבר עם [ExcludeFromCodeCoverage], או מסנן של NCoverExplorer. לספור אותו כלא מכוסה היה גורם להחרגה להנמיך את המספר שנועדה לתקן. - dotCover דורש
/ReportType=DetailedXML. דוח ה-XML האחר שלו הוא סיכום כולל ללא אף מספר שורה; אותו דוח מזוהה ונדחה עם ציון הדגל שפותר את זה, במקום להיכשל כפורמט לא מוכר. dotCover רושם רק כן או לא לכל פקודה, לעולם לא מספר ביקורים, כך שפקודה מכוסה מגיעה כפגיעה בודדת.
0.2025.41 · build 4 — בדיקות מוטציה: PIT ו-Stryker
2025-05-28
נוסף
- בדיקות מוטציה. כיסוי אומר ששורה רצה; ציון מוטציה אומר שמשהו נכשל כשאותה שורה שונתה. חבילת בדיקות יכולה להריץ כל שורה בקובץ ולא לגלות אף אחת מהתקלות שהוזרקו, ושום מספר כיסוי לא יגיד את זה. PIT מכסה Java, Kotlin ו-Scala; Stryker מכסה JavaScript, TypeScript, C# ו-Scala.
- הוא לעולם לא ממוצע עם הכיסוי. ערבוב "האם השורה הזו רצה" עם "האם משהו הבחין כשהחלפתי אותה" אינו עונה על אף אחת מהשאלות, כך שאין לו שום משקל בציון המשוקלל והוא נבדק בנפרד מול הסף
fuciniCoverage.threshold.mutation — כברירת מחדל 0, כי ציון מוטציה הוא יעד להעלות, לא רף שצריך לעבור ביום הראשון. - מוטנט שמעולם לא קיבל הרצה הוגנת נספר באף אחד משני החצאים.
NON_VIABLE של PIT ו-CompileError וה-Ignored של Stryker הן מוטציות שהכלי לא הצליח ליצור; לספור אותן כלא-מזוהות היה מעניש חבילת בדיקות על תקלה שמעולם לא הוצעה לה.
0.2025.40 — הרשימה בטקסט רגיל של gcov, למהדרים ישנים מ-GCC 9
2025-05-16
נוסף
- הרשימה המוערת
.gcov. gcov --json-format הגיע עם GCC 9, ומהדרים צולבים מוטמעים הם לעיתים קרובות ישנים בהרבה; עד כה התשובה הייתה להתקין קודם lcov או gcovr. למונה הביצוע חמישה איותים ורק שניים מהם מספרים, והערות branch/call/function שייכות לשורה השכנה ולא לשורה שלהן — כל זה נקרא כעת נכון. - הערות קריאה הופכות לכיסוי נקודות קריאה. השורה
call N returned X% היא בדיוק מדד קריאות הפונקציה שנוסף ב-0.2025.38, שפורמט זה נשא הרבה לפני שהיה כאן מקום להניח אותו.
0.2025.39 · build 2 — כיסוי קוד אובייקט, ואיתו אסמבלי
2025-04-27
נוסף
- כיסוי קוד אובייקט — כמה מהקובץ הבינארי שנבנה באמת רץ. המדד היחיד כאן שאינו נמדד כלל מהמקור: הוא מגיע ממנפה שגיאות שמתבונן בזרם ההוראות ביעד האמיתי, בלי שום השפעת גשש על התזמון. זו גם התשובה הכנה לשאלה "האם זה מכסה אסמבלי?" — אסמבלי שנכתב ביד לעולם אינו מאובזר, ושום מדד אחר כאן אינו מגיע אליו.
- זו דרישה, לא עוד משקל. כיסוי קוד אובייקט מכיל בתוכו את כיסוי הפקודות — 100% כאן משמעו 100% שם, אך לא להפך — ולכן אין לו שום משקל בציון המשוקלל והוא נבדק במקום זאת מול סף, בדיוק כפי ש-DO-178C ברמה A דורש זאת בנוסף ל-MC/DC.
- הפער הוא התוצר. הרצה עם 100% כיסוי שורות ופחות מ-100% כיסוי קוד אובייקט איתרה בדיוק את הקוד שיצר המהדר ושהמקור שלכם אינו אחראי לו; כרטיס העמידה בדרישות אומר "312 בייטים מעולם לא רצו, עם 100% כיסוי שורות" במקום להסתיר זאת כ"94%". המקרה ההפוך — קובץ בינארי שלם המדווח כמי שרץ בעוד המקור שלו לא — מדווח כסתירה, לא כציון נמוך.
0.2025.38 · build 2 — כיסוי קריאות לפונקציות, ו-VectorCAST ו-TRACE32 הושלמו
2025-04-01
נוסף
- כיסוי קריאות לפונקציות — האם כל נקודת קריאה הופעלה. שאלה שונה מכיסוי פונקציות: פונקציה שנכנסה אליה פעם אחת מאחת משלוש נקודות הקריאה שלה שלמה תחת פונקציות ושלישית שלמה כאן. VectorCAST, TRACE32 ו-Cantata כולן דיווחו על כך בזמן שלמודל הזה לא היה איפה לשים את המספר.
- זה משלים את VectorCAST ואת TRACE32. גרסאות קודמות סירבו בכוונה לקפל נתונים אלה לכיסוי הסתעפויות, משום שניפוח אחוז הסתעפויות מנפח מספר שמגיע לביקורת. שני הפורמטים כעת טוענים את מה שתמיד שלחו.
שונה
- שער העמידה בדרישות והציון המשוקלל מכירים כעת שבעה מדדים, לא שישה — שתי הגדרות חדשות,
fuciniCoverage.whmWeights.functionCalls ו-fuciniCoverage.threshold.functionCalls, עם תיאורים בכל 17 השפות.
0.2025.37 — כיסוי פונקציות כמספר, לא רק כמיקום
2025-02-16
שונה
- כיסוי פונקציות נספר כעת גם כשהכלי אינו אומר איפה נמצאות הפונקציות. יצוא
func של TRACE32, אלמנטי <method> הנסגרים מעצמם של VectorCAST, וסיכום method, % של EMMA — כל השלושה מציינים מספר פונקציות בלי שום מקום להניח בו CodeLens — כל השלושה נזרקו בכניסה. הצהרות נשארות המקור המועדף היכן שהן קיימות; המספר משמש כעת כגיבוי היכן שאין.
0.2025.36 · build 4 — UCIS ו-Aldec UCDB, והמפענחים החדשים מכוסים בבדיקות עד לשורה
2025-02-03
נוסף
- UCIS ו-UCDB XML — VHDL ו-Verilog, ישר מהסימולטור. שני מסמכים עונים לשם הזה, ולפרויקט יש את זה שהסימולטור שלו כתב, כך ששניהם נקראים: צורת החליפין הסטנדרטית של Accellera,
<UCIS>, וה-ux:ucdb הפרטי של Aldec, שזה מה ש-acdb2xml אכן מפיק מ-Active-HDL ו-Riviera-PRO. כיסוי פקודות והסתעפויות עובר; כיסוי toggle, FSM, assertion ופונקציונלי אינו נקרא, ומסמך שמכיל רק את אלה אומר זאת במקום להיטען ריק. - VHDL בקוד פתוח כבר לא נזקק לכלום כאן: הבאקאנד של GCC ב-GHDL מבצע אינסטרומנטציה עם
-Wc,-ftest-coverage -Wc,-fprofile-arcs, והתוצאה עוברת דרך gcov, gcovr או lcov. גרסה זו מיועדת לסימולטורים המסחריים.
0.2025.35 · build 3 — EMMA XML, ול-Delphi סוף־סוף יש דרך פנימה
2025-01-22
נוסף
- EMMA XML. ל-Delphi לא הייתה שום דרך פנימה בכלל — לא lcov, לא Cobertura — ו-DelphiCodeCoverage כותב בדיוק את הסכימה הזו עם
-xml. זה גם מה שחלק ניכר מכלי ה-Java הישנים יותר עדיין מפיק, כך שמפענח אחד פותח שפה ומסלק מורשת בו-זמנית. - הוסיפו
-xmllines והדוח מקבל ספירות פגיעה אמיתיות לכל שורה, כך שהשוליים עובדים; בלעדיו יש רק אחוז מסכם, שמקבל סיכום קובץ וללא שוליים במקום ניחוש. שם חבילה עם נקודות הופך לתיקייה רק כאשר הקובץ הוא מקור ממשפחת Java; בדוח Delphi אותו שדה עצמו הוא שם יחידה, והוספת קידומת אליו הייתה ממציאה תיקייה שאין לאף אחד בדיסק.
0.2025.34 · build 3 — Lauterbach TRACE32, מדד אחד לכל ייצוא
2025-01-01
נוסף
- ייצואי כיסוי של TRACE32.
COVerage.EXPORT.ListModule כותב את מה שמנפה שגיאות מדד ממעקב על היעד עצמו — לא מקור מאובזר, אלא זרם ההוראות שהמעבד באמת ביצע, ביעד האמיתי, בלי שום השפעת גשש על התזמון. ייצוא נושא מדד אחד בכל פעם: stmt הופך לכיסוי שורות; dec/cond הופכים לכיסוי הסתעפויות; mcdc הופך ל-MC/DC. טענו שני ייצואים של אותה הרצה והם מתמזגים לפי שם המודול. - ייצואים עם כיסוי
func, call או object נדחו בשמם במקום להיטען ריקים, תוך ציון איזה מדד הקובץ מכיל — לכל שלושתם יש כעת בית, ב-0.2025.37, 0.2025.38 ו-0.2025.39 בהתאמה.
0.2025.33 · build 4 — Testwell CTC++, נקרא לפי עמודה כי הטקסט אינו מופרד ברווחים
2024-12-19
נוסף
- רשימות פרופיל ביצוע של Testwell CTC++.
ctcpost הופך את MON.sym ו-MON.dat לרשימת טקסט ברוחב קבוע — הכלי שעומד מול Bullseye בהערכות מוטמעות ובטיחותיות אירופיות, וזה שמודד כיסוי רב-תנאי. נקרא לפי מיקום עמודה במקום פיצול לפי רווחים, כי תיאור עצמו עשוי להתחיל בספרה. - רב-תנאי אינו MC/DC, ואינו מדווח כ-MC/DC. CTC++ סופר צירופי תנאים; MC/DC שואל אם הוצג שכל תנאי משפיע באופן עצמאי על התוצאה. הצבת המספרים האלה מאחורי שער ה-MC/DC הייתה נותנת למבקר מספר תחת שם שאינו מתכוון לכך, ולכן הם כאן כיסוי הסתעפויות, מה שהם באמת.
0.2025.32 · build 4 — VectorCAST XML, וה-MC/DC שהושלך בשקט
2024-12-08
נוסף
- VectorCAST XML. VectorCAST כותב דוח Cobertura עד ל-doctype, ואז מוסיף תכונות למה ש-Cobertura רגיל לא יכול לומר. זה אומר שהקבצים האלה כבר נטענו כאן ונראו שלמים — כאשר
mcdcpair-coverage הושלך בשקט בכניסה, בדיוק מהקהל שקנה כלי במיוחד כדי להפיק אותו. ספירות הזוגות האלה כעת שורדות. הן מזינות את שער ה-MC/DC, את האחוז ואת הציון המשוקלל. - כיסוי קריאות לפונקציות אינו קרוב במכוון. קיפולו לתוך כיסוי הסתעפויות היה מנפח מספר שמגיע לביקורת; הוא ממתין שיהיה למודל שם עבורו, מה שקורה ב-0.2025.38.
שונה
- קורא ה-Cobertura נושא כעת דיאלקט:
<coverage line-rate=…> הוא משפחה, לא פורמט יחיד, והדיאלקט הנקרא נוסע יחד עם הפענוח במקום להיות מנוחש לכל אלמנט בנפרד.
0.2025.31 — Ada, Swift וכיסוי שנטען מחדש מעצמו
2024-11-07
נוסף
- GNATcoverage XML — סוף־סוף Ada. צוותי אוויוניקה בתקן DO-178C וצוותי רכבות בתקן EN 50128 הם בדיוק הקהל שעבורו נבנו הציון המשוקלל לבטיחות ותמיכת MC/DC במוצר הזה, ועד עכשיו הם לא יכלו לטעון כאן דבר, אלא אם
gnatcov שלהם היה חדש מספיק כדי לייצא גם Cobertura — שמשליכה כל מה שמתחת לשורה. gnatcov coverage --annotate=xml כותב תיקייה ולא קובץ: טענו את קובצי *.xml לכל קובץ מקור — פתיחת index.xml תאמר לכם היכן הכיסוי נמצא באמת במקום להיכשל בעמימות. שורה מכוסה חלקית נשארת שורה מכוסה עם החלטה לא מכוסה: החוסר מופיע בכיסוי ענפים ו-MC/DC, במקום שאליו הוא שייך. אזורי פטור הופכים לשורות מוחרגות, מחויבות שמצבה לא נקבע נספרת כלא מכוסה ולא כמכוסה, ועם --level=stmt+mcdc ה-MC/DC נספר לפי תנאי ומזין את הסף ואת הציון המשולב.
- BullseyeCoverage ו-Visual Studio
.coveragexml. Bullseye הוא כלי ה-C/C++ המסחרי שצוותי מערכות משובצות ומערכות קריטיות לבטיחות באמת מחזיקים; הריצו את covxml שלו וטענו את התוצאה. המדד המרכזי שלו הוא כיסוי תנאי/החלטה ולא כיסוי שורות, והשניים נשארים כאן נפרדים — ובנוסף, גשוש בעל תוצאה יחידה מנוקד מתוך אחת ולא מתוך שתיים, כך ש-switch שנבדק במלואו לא מדווח כמכוסה למחצה. ה-.coveragexml של Visual Studio משלים את .NET לצוותים שעובדים עם MSTest ו-vstest במקום Coverlet: המירו קודם את קובץ .coverage הבינארי בעזרת dotnet-coverage convert. שורות מכוסות חלקית שורדות את המסלול בשני המקרים.
- כיסוי גנרי של SonarQube — ותשובה ישירה בנוגע ל-Xcode. ארבע תכונות על שני רכיבים, וזה חשוב משום שכמעט כל כלי שאינו יכול לייצא אף אחד מהפורמטים האחרים יכול לייצא את זה: פרויקט שכלי הכיסוי שלו מעולם לא היה מוכר להרחבה הזו מקבל סוף־סוף דרך פנימה. זה גם מה ש-
xcresultparser כותב, וכך פרויקטים ב-Swift וב-Objective-C מגיעים לכאן: ל-.xcresult עצמו אין מנתח, והתיעוד אומר עכשיו מדוע במקום להשאיר אתכם לנחש — xccov מדווח אחוזים ולא נתונים ברמת שורה, והארכיון עם נתוני השורות ניתן לקריאה רק קובץ אחר קובץ, במסמך שאינו נוקב לעולם בשם הקובץ שהוא מתאר.
- קובצי מעקב דחוסי gzip נטענים כמו שהם.
gcov --json-format כותב כברירת מחדל .gcov.json.gz, כך שהפורמט שהתיעוד פרסם היה זה שרוב האנשים לא באמת יכלו לטעון. הזיהוי נעשה לפי בתי הקסם של הקובץ עצמו ולא לפי שמו, ולכן דוח דחוס שאיבד את סיומת .gz שלו עדיין עובד — וכל פורמט נתמך יכול כעת להגיע דחוס, לא רק זה של gcov.
- Swift ו-Objective-C, מהדוח של Xcode עצמו.
xcrun xccov view --report --json הוא מסמך הכיסוי היחיד שבנייה של iOS או macOS מייצרת בלי כלים נוספים. תקבל אחוזים לכל קובץ, מוני הרצה לכל פונקציה ו-CodeLens. הוא אינו נושא נתונים ברמת השורה, ו-Studio אינו ממציא כאלה, ולכן השוליים נשארים ריקים בפורמט הזה — סימון מומצא אינו ניתן להבחנה מסימון שנמדד. לכיסוי Swift שורה-שורה השתמש ב-llvm-cov export -format=lcov או ב-slather; שניהם עבדו כבר קודם.
- Coveralls JSON — נכתב על ידי הדוחות של Elixir, Ruby, Python, Rust, Go ו-JavaScript כאחד. ברמת השורה, ולכן השוליים עובדים.
- ימים פעילים, חסימות סף והרישיון שאליו שייך הסיכום — שלוש תוספות לסיכום השימוש החודשי, עבור התקנות שהפעילו טלמטריה.
הוסר
- שם המחשב כבר אינו נשלח.
hostname היה בבסיס הטלמטריה מההתחלה — מחוץ לכל בדיקה, ונשלח מכל מי שהטלמטריה שלו הופעלה. שם מחשב הוא לעיתים קרובות שם של אדם, מספר עמדה או פרויקט של לקוח, והוא לא ענה על שום שאלה בנוגע לשימוש שמערכת ההפעלה לא ענתה עליה טוב יותר. התקנה מזוהה כעת רק לפי מזהה ההתקנה האקראי שלה. בעקבות זאת שום דבר שמזהה אתכם או את המכונה שלכם אינו יוצא ממנה: לא שם המחשב, לא שם המשתמש במערכת ההפעלה, לא תיקיית הבית, לא ממשקי הרשת, לא נתיבי הקבצים, לא שם תיקיית הפרויקט ולא תווית של חשבון מחובר. מה שנשאר הוא מערכת ההפעלה, הגרסה שלה והארכיטקטורה — איזה סוג מכונה, לא איזו מכונה.
- הטלמטריה נמחקת כעת בתוך 90 יום לכל היותר, בעוד שהמדיניות אמרה קודם רק שהיא “נשמרת כל עוד היא מועילה”, וזה כלל אינו פרק זמן.
שונה
- רישיון בתשלום טוען כעת את הכיסוי מחדש מעצמו. מעקב אחר קובץ מעקב תמיד פירושו היה להישאל “זוהה כיסוי חדש, לטעון?” אחרי כל בנייה, בכל שכבה — שאלה עם תשובה הגיונית אחת, הנשאלת כמה פעמים בשעה. השאלה הזו היא כעת ההתנהגות של שכבת Community החינמית; רישיון בתשלום פשוט טוען. Community שומר על המעקב, על הזיהוי ועל השאלה שתמיד היו לו.
- קובץ שאינו תואם מצוין, עם הבדיקה שהוכיחה זאת, ברישיון בתשלום. הזיהוי אינו מוגבל ולא יהיה: לומר למישהו שהכיסוי שלו כבר אינו מתאר את הקובץ שלו אינו דבר שמוכרים לו. Community עדיין מקבל את הממצא, והשורה עדיין מעומעמת. רישיון בתשלום מוסיף את ההצבעה — הסימון, התג בסייר, והשורה, הפונקציה או סכום הביקורת שמאחוריהם.
- הטלמטריה שולחת פחות, ואומרת למי היא שייכת. הסיכום החודשי אינו נושא עוד נתיבי קבצים, את שם התיקייה של הפרויקט שלך או תווית חשבון מחובר. החלפת התכונות בטלמטריה מבקשת כעת כתובת דוא"ל, כדי שמי שהסכים לה יוכל לדעת מה ההתקנה שלו שולחת ולבקש למחוק זאת.
- שלושה תיאורי הגדרות תוקנו.
watch.enabled, staleWarning.enabled ו-telemetry.enabled התרחקו ממה שהקוד עושה — ובעיקר telemetry.enabled: הוא תיאר שליחה של הרבה יותר ממה שנשלח בפועל.
תוקן
- בורר הקבצים כבר לא מסתיר פורמטים שהוא קורא. Pick Coverage File סיננה ל-
info, json ו-xml בלבד, כך ש-coverage.out של Go ו-.gcov.json.gz של gcov — שני פורמטים שההרחבה הזו קוראת — הופיעו מעומעמים דווקא בתיבת הדו־שיח שמבקשת מכם לבחור אחד.
- התקנת Community רגילה אינה שולחת עוד עמוד מקוד המקור שלה. הבדיקה ששמרה על דגימת הקוד המוער התייחסה לכל התקנת Community כאילו קיבלה את עסקת הטלמטריה, ולא רק לאלה שאכן קיבלו.
- אזהרה אחת לכל טעינה במקום שתיים — קובץ שכבר אינו תואם לכיסוי שלו כמעט תמיד גם נערך מאז ההרצה, וכל אחד דווח בנפרד.
- הסרה אינה מדווחת עוד על שם המשתמש של מערכת ההפעלה ועל תיקיית הבית של מי שהרישיון שלו אוסר זאת.
0.2025.30 · build 3 — מה שהבנייה שלכם כבר כותבת
2024-10-18
נוסף
- פרופילי כיסוי של Go.
go test -coverprofile הוא פלט הכיסוי היחיד שערכת הכלים הסטנדרטית של Go מייצרת — אין lcov ליפול אליו כמו ב־Rust, ב־Dart וב־Elixir — ולכן לפרויקט Go לא היה דבר שההרחבה הזאת יכולה לקרוא. פרופיל מתעד בלוקים ולא שורות, וכל שורה שבלוק משתרע עליה מקבלת את המונה שלו, כולל הסוגר המסולסל הסוגר, בדיוק כפי ש־go tool cover -html מדגיש אותן. coverage.out נוסף לשמות שמחפשים כברירת מחדל, כך שפרויקט Go ללא שום הגדרה מוצא את הפרופיל שלו כפי שפרויקט C מוצא את lcov.info.
- Clover XML ו־OpenCover XML. Clover הוא מה שיש לפרויקטי PHP באמת:
php-code-coverage יכול לייצא Cobertura, אבל Clover הוא ברירת המחדל שלו וזה מה שכמעט כל phpunit.xml מגדיר — כך שכיסוי PHP היה כאן בלתי קריא בזמן שמפענח Cobertura חיכה לפלט שכמעט אף אחד לא מייצר. מדווח ה־clover של Istanbul כותב את אותו מסמך, כך שגם פרויקט Jest שהוגדר כך מכוסה. OpenCover הוא המקבילה ב־.NET: C# ו־VB.NET כבר הגיעו כ־Cobertura, שמשטחת החלטה למחרוזת condition-coverage="50% (1/2)", ולכן איזה ענף רץ נעלם עוד לפני שמפענח ראה אותו. OpenCover שומר מונה ביקורים לכל ענף — ההבדל בין לדעת שחצי מהסתעפות מכוסה לבין לדעת איזה חצי.
- JSON של coverage.py ושל gcov/gcovr. ייצוא ה־Cobertura וה־lcov של coverage.py חייב לקרוא לשורת
# pragma: no cover מכוסה או חסרה, כי אין לו מילה ל״הוחרג במכוון״ — ולהרחבה הזאת יש: אותו סימון שסמני LCOV_EXCL שלה מציבים. כך שהפרגמות של פרויקט Python אומרות כאן מה שהן אומרות בדוח של coverage.py עצמו. כיסוי GCC, לעומת זאת, הגיע רק לאחר מעבר דרך lcov או gcovr -x: כלי שני שיהמיר נתונים ש־GCC כבר ייצר. gcov --json-format --stdout ו־gcovr --json מפיקים מסמכים כמעט זהים, ומפענח אחד קורא כעת את שניהם.
תוקן
- הערות נקראות בשפה שבה הקובץ כתוב. סורק השורות שאינן קוד נכתב עבור C והוחל על כל קובץ, וזה היה נכון כל עוד כל פורמט שההרחבה קראה תיאר שפה ממשפחת C. כבר לא: סורק C שנתקל ב־
# don't רואה את הגרש פותח מחרוזת, לעולם אינו רואה אותה נסגרת, וסופר את שורת ההערה כקוד — מספר שגוי מעט בשקט, בלי שדבר יאמר זאת. כעת זה # עבור Python, Ruby, מעטפת, Perl, R, Elixir ו־Julia; כל שלוש הצורות עבור PHP, שמקבל את שלושתן; ו־// עם /* */ בכל השאר, שנשאר ברירת המחדל עבור סיומת לא מוכרת — #define הוא קוד, והחרגתו הייתה שגויה בכיוון ההפוך.
0.2025.29 · build 4 — כל הגדרה, מוסברת
2024-10-15
נוסף
- לכל הגדרת
fuciniCoverage.* יש עכשיו מקום בלוח הזה, לא רק לשלוש עשרה הגדרות התאימות. כל חמישים וחמש מקובצות לאותם מקטעים, ובאותו סדר, כמו מדריך ההגדרות המפורסם — כך שהעמוד שממנו אתם מגדירים והעמוד שאתם קוראים מסכימים היכן הגדרה חיה. תיבת חיפוש מסננת לפי שם, מפתח או תיאור; רשימת קפיצה מעבירה בין המקטעים. הטופס נגזר בזמן ריצה מהמניפסט הארוז של ההרחבה עצמה — טיפוסים, ברירות מחדל, גבולות, ערכי אפשרויות וכל מילה של טקסט — כך ששום דבר על הגדרה אינו כתוב פעמיים, והלוח אינו יכול להתרחק מההרחבה שהוא עורך.
- התיאורים הולכים אחרי השפה שקיבעתם. VS Code מפענח את הלוקליזציה של מניפסט לפי שפת התצוגה של העורך בעת טעינת ההרחבה, ואינו מציע דרך לעקוף זאת עבור הרחבה בודדת — ולכן הגדרת
fuciniCoverage.language לגרמנית בעורך אנגלי תרגמה הכול חוץ מההגדרות. מכיוון שהלוח קורא ומפענח את הקבצים האלה בעצמו, הוא המקום היחיד שיכול לכבד את הבחירה הזאת.
- הפקדים שסכמת JSON אינה יכולה לבקש. שום דבר בסכמת הגדרות אינו מסמן מחרוזת כנתיב, ולכן הממשק המובנה אינו יכול להציע בורר; שלוש ההגדרות שמכילות תיקייה מקבלות עכשיו כפתור עיון….
coverageFile.paths ו־pathRemap מקבלות עורכי רשימה אמיתיים במקום תיבת JSON גולמית, וכל צבע colorScale מקבל דוגמית לצד הערך ההקסדצימלי שלו.
שונה
- השמירה כותבת את מה ששיניתם, ולא יותר. עם שלוש עשרה הגדרות כמעט לא היה משנה ש"שמור" כתב את כולן; עם חמישים וחמש זה היה אומר שעריכה אחת חורתת את כל מרחב השמות לתוך
settings.json שהיו בו שתי שורות. נכתבות רק הגדרות שערכן באמת השתנה, וערך השווה לברירת המחדל מוחק את העקיפה במקום לחזור על מה שההרחבה כבר מספקת.
- מפתח הרישיון שלכם תמיד נשמר בהגדרות המשתמש, והשורה אומרת זאת.
license.key מוגדר בהיקף יישום, כלומר VS Code קורא אותו משם בלבד — כתיבתו לסביבת עבודה היא שמירה שנראית מוצלחת ואינה משנה דבר. אפס מנקה עכשיו את כל חמישים וחמשת המפתחות בהיקף הנבחר במקום שלושה עשר, ולכן שואל קודם. ועריכה שנעשתה מחוץ ללוח כבר לא עולה לכם במקום שלכם: העמוד משווה לפני ציור מחדש, כך שלחיצה על "שמור" כבר אינה מגלגלת חמישים וחמש שורות חזרה למעלה.
0.2025.28 · build 3 — שלוש עשרה שורות, החלטה אחת
2024-10-12
נוסף
- מצב התאימות, שבעת קריטריוני הסף ושישה משקלי הציון המורכב מקבלים כעת עורך אחד. בממשק ההגדרות אלו שלוש עשרה שורות בלתי קשורות, ובפועל החלטה אחת: סף אינו עושה דבר כל עוד המצב שבתוקף אינו מתייחס אליו, ומשקל אינו עושה דבר כל עוד לא הקריטריון המשוקלל הוא שמכריע. Fucini Coverage: Configure Coverage Compliance & Thresholds..., בלחצן גלגל השיניים בשורת הכותרת של תצוגת Coverage, מאגד את שלושתם, מסביר כל מצב במקום שבו בוחרים את המצב, ומציין את הדרכים שבהן אפשר להגדיר קריטריון כך שלא יבדוק דבר — מצב קפדני ללא אף סף לכל מדד, מצב משוקלל שהסף שלו
0, משקלים שכולם 0 — כאזהרות, בזמן שאתם מסתכלים עליהן.
- הוא מציג את הפסיקה מראש וכותב דרך VS Code. את ה-COMPLIANT / NON-COMPLIANT שהטופס שלא נשמר היה מפיק מול ההרצה הטעונה מחשב מנוע התאימות של ההרחבה עצמה, ולא עותק שני של הכללים: תצוגה מקדימה שעלולה לסתור את הקריטריון גרועה מאי-הצגה כלל. השינויים עוברים דרך ממשק ההגדרות הרגיל אל
settings.json — של המשתמש או של סביבת העבודה, לבחירתכם — כך ש-VS Code מעצב את הקובץ ושומר על ההערות שבו; עריכה שנעשתה ידנית או בחלון אחר חוזרת אל הטופס הפתוח, בין אם נטענה הרצה ובין אם לא. אין צורך ברישיון: Community מקבל את אותו עורך כמו Pro.
תוקן
- הלחצן בהתראת העדכון הציג
Download && Install. הסימן הכפול הוא תו הבריחה למקשי קיצור, ונכון בכותרות שב-package.json ובתיבות דו-שיח מודאליות — אך לחצני הפעולה של התראה מקבלים את התווית שלהם כטקסט רגיל, ולכן שני התווים הודפסו בדיוק כפי שנכתבו, בכל 17 השפות, לכל מי שהוצע לו עדכון.
0.2025.27 · build 7 — עסקה שאתם בוחרים בה
2024-09-30
שונה
- הטלמטריה כבויה כברירת מחדל. היא סופקה כשהיא מופעלת, מתוך הנימוק שתקופת ההערכה זקוקה לנתונים. הנימוק הזה חדל לתקוף ברגע שרמת Community הפכה את הפעלת הטלמטריה למה שפותח את כל תכונות Pro בחינם: עסקה משמעותית רק אם האדם עושה אותה בעצמו, ועסקה שאיש לא בחר בה אינה עסקה. שום דבר אינו נשלח עד שתפעילו אותה, ו-Community ממשיך לעבוד ממילא עם מערכת התכונות הרגילה שלו.
- הגדרת הטלמטריה אומרת לשם מה היא, ולשאר מפנה בקישור. התיאור שלה נהג למנות כל שדה שנשלח בפינג, כלומר שני עותקים של אותה רשימה — אחד בהגדרה, אחד במדיניות הפרטיות — שהיו אמורים להישאר זהים לנצח ולא נשארו. כעת היא אומרת מה ההפעלה נותנת לכם ומקשרת למדיניות הפרטיות לרשימת השדות, כך שיש רשימה אחת לשמור על נכונותה במקום שתיים.
- התקנת הגרסה הזו פותחת מחדש את חלון ההערכה שלכם, פעם אחת. כל מי שתקופת הניסיון שלו כבר הסתיימה מקבל 14 ימים חדשים, מפני שגרסה זו משנה את התנאים שלפיהם העריכו: תקופת ניסיון שעברה כשהטלמטריה מופעלת כברירת מחדל לא הייתה ניסיון של המוצר המוצע כעת. זה קשור במכוון לאסימון חד-פעמי ולא לגרסה — איפוס בכל גרסה היה אומר שתקופת הניסיון לעולם אינה מסתיימת עבור מי שמתעדכן, וזו אינה תקופת ניסיון אלא רישיון ללא מחיר עם צעדים נוספים. האסימון נצרך בהפעלה הראשונה והכללים הרגילים חוזרים. רישיון בתשלום אינו נוגע בכך, מפני שאימות המפתח מסתיים עוד לפני שתקופת הניסיון נלקחת בחשבון, ו-Community אינו מושפע מפני שלמהדורה הזו אין תקופת ניסיון לפתוח מחדש.
- מפתח רישיון כבר אינו עולה שאלון. הודעות ההפעלה, הגדרת מפתח הרישיון ותיבת הדו-שיח בתום תקופת הניסיון — כולן הציגו מפתח כדבר שמונפק בתמורה למענה על שאלות. זה אינו כך: המפתח מונפק אוטומטית לפי בקשה, ושאלון המשוב הוא התנדבותי ונפרד לחלוטין.
תוקן
- שלושה מקומות עדיין הבטיחו תקופת ניסיון "עד 2026-12-31". תאריך כזה מעולם לא היה קיים במוצר — תקופת הניסיון היא 14 ימים, הנספרים לכל התקנה מהשימוש הראשון. שתי גרסאות קודמות תפסו את הטענה הזו בתיאורי ההגדרות וב-README; היא שרדה במסגרת ההערכה של הדף הזה עצמו, במדריך המשתמש וב-README של כלי הרישוי. מדריך המשתמש היה הגרוע מבין השלושה: נכתב בו שהחלון חל "על כל התקנה, ברחבי העולם, בבת אחת (לא ספירה לאחור לכל התקנה)", שזה בדיוק ההפך, ושהצגת הכיסוי מושהית בתום תקופת הניסיון, בעוד שלמעשה ההרחבה עוברת לרמת Community החינמית.
- הודעות הדוא"ל של הטלמטריה נשלחו מהדומיין הלא נכון. כותרת
From: הצביעה על תיבה ב-fucini.consulting בעוד שהשרת השולח אותן הוא fucini.software — בדיוק ההתאמה שההערה של ההגדרה עצמה מזהירה מפניה, ודרך בטוחה לגרום לדואר להיות מסונן כספאם או להידחות על הסף.
0.2025.26 · build 2 — אפור, לא נעלם
2024-08-27
שונה
- קובץ שהדוח מזכיר אך אינו קיים בדיסק מוצג היכן שהוא שייך — באפור, ועם הסבר מדוע. גרסה 0.2025.25 חדלה להמציא מיקומים לקבצים כאלה, וזה היה נכון, אך הותירה להם נתיב יחסי שאינו מיקום כלל — ולכן העץ עדיין יצר פרויקט מהמקטע הראשון שלו, ושלושת המקורות שנמחקו של תת-מודול ישבו ב-
app רפאים לצד אותו תת-מודול שממנו באו. אי-ההתאמה הייתה גלויה, וזו הייתה הכוונה, אבל היא הייתה גלויה במקום הלא נכון ולא אמרה דבר על מה שגוי.
- כעת הוא מופיע בפרויקט שממנו נמדד, בתיקייה שהדוח מציב אותו בה — מצויר באפור הבינוני של ערכת הנושא ובנטוי במקום בצבע החזית הרגיל. בריחוף מוצג הנתיב שהיה לו, עם הסבר שאין שם דבר — קרוב לוודאי ששמו שונה או שנמחק לאחר יצירת הדוח — ושהמספרים שלו עדיין נספרים. שום דבר לא מושמט ואף סכום אינו זז: השורה היא עדותו של הדוח על עצמו, וההאפרה היא מה שמונע ממנה להיקרא כשורה שנפתחת.
- הניחוש נשאר בתוך התצוגה. הנתיב הרשום של הקובץ הוא עדיין בדיוק מה שהדוח אמר, כי כל השאר ממופתח לפיו — העשרת הדוח החיצוני משווה אליו, הטלמטריה הופכת אותו ליחסי, התצוגה המוערת פותחת אותו — ולתת להם מיקום משוער היה מחליף ידוע במומצא. רק העץ מחבר בין השניים, ורק עבור נתיב שאינו מציין מיקום משלו: נתיב מוחלט שפשוט אינו קיים שומר על מה שהדוח אמר ומואפר במקומו.
0.2025.25 · build 4 — היכן זה נמדד
2024-08-07
תוקן
- הכיסוי של תת-מודול נוחת היכן שתת-המודול באמת נמצא, והשורות שלו נפתחות. תת-מודול git בונה דוח משלו לצד העץ שלו, ו-gcovr כותב בו
<source>.</source> — "התיקייה שבה נמצא הקובץ הזה" — עם שמות כמו app/Application.cpp מתחת. שום דבר לא עיגן את ה-. הזו לכלום: הנתיבים נפתרו פעם אחת, אחרי המיזוג, כשההרצה כבר לא ידעה מאיזה קלט הגיע כל קובץ, ולכן הבסיס היחיד שנותר היה שורש סביבת העבודה. הניסיון עם <workspace>/app/Application.cpp לא מצא דבר, כל נתיב נשאר יחסי, ותצוגת הכיסוי ציירה אותם כפרויקט בשם app — על שם המקטע הראשון של נתיב שמעולם לא היה מיקום — שכל שורה בו העתיקה ופתחה מקום שבו לא היה קובץ.
- נתיבים נפתרים כעת לכל קובץ מעקב בנפרד, לפני המיזוג.
sourceRoot יחסי מעוגן לתיקייה שבה יושב קובץ המעקב שלו, ולכן . לצד coverage.xml של תת-מודול פירושו אותו תת-מודול. אם כך לא נמצאים המקורות, החיפוש עולה למעלה מקובץ המעקב — פריסת CMake הרגילה כותבת כיסוי כמה רמות בתוך build/, ואיזו משתי הצורות פרויקט משתמש אינו כתוב בשום מקום בדוח, ולכן מערכת הקבצים עונה במקום ההגדרות. ההליכה עוצרת בשורש סביבת העבודה: מעבר לו, src/main.c חשוף היה עלול להיפתר בעותק שכן בעל אותה פריסה — תשובה שגויה שנראית נכונה. נתיב שכבר מוחלט וקיים נשאר בדיוק כפי שהיה, ולכן הרצות lcov רגילות אינן משתנות.
- תת-מודול נשאר פרויקט משל עצמו בתצוגת הכיסוי. קבצים שנפתרים כעת בתוך סביבת העבודה היו אחרת נבלעים בעץ שלה — תיקיות תת-המודול שזורות בשל ההורה, והמספרים שלו נוספים לסך של ההורה כאילו בסיס קוד אחד נמדד פעמיים. כל קובץ רושם את השורש שממנו נמדד, והתצוגה מקבצת לפיו, כך שתת-מודול שומר על כותרת משלו ועל סכומים משלו גם כשהוא יושב בתוך התיקייה הפתוחה. הרצה שנתיביה כבר מוחלטים אינה בעלת שורש כזה ומקובצת בדיוק כמו קודם.
- קובץ שהדוח מזכיר אך כבר איננו עדיין מדווח כחסר. הוא אינו מקבל נתיב סביר שבו הוא לא נמצא: דוח המזכיר קבצים שנמחקו מאז הוא דוח מיושן, וציורם במיקומים מומצאים היה מסתיר זאת. כל אחד מהם נקוב בערוץ הפלט תחת
FUCINI_REMAP_001, עם הנתיב שהיה לו.
0.2025.24 · build 3 — למה המושב שלך נעלם
2024-07-27
שונה
- מושב שנעלם אומר עכשיו למה. כל ביטול הציג את אותה שורה — המושב שלך בתוכנית זו אינו פעיל עוד — וזה נקרא כהאשמה המופנית לאדם הלא נכון. מנוי צוותי שהוקטן מתחת למספר המושבים שבשימוש משחרר כעת את העודף לאחר תקופת חסד, ומי שמאבד מושב לא עשה דבר מלבד להיות זה שהכי מזמן לא השתמש בו. במקום שבו לשרת הרישוי יש משהו מועיל לומר, ההרחבה אומרת זאת: מושב ששוחרר כדי להתאים למנוי מוקטן מסביר בדיוק את זה ומפנה למי שמנהל את המנוי, כאשר בקש מפתח חדש עדיין מוצע — משום שהדרך חזרה אמיתית: יהיה מקום במאגר ברגע שאותו אדם יפנה מושב.
- מנוי שהסתיים אינו מציע כפתור. ממנוי שפג תוקפו לא ניתן להנפיק מפתח חדש, ולכן הפעולה היחידה בהודעה ההיא יכלה רק להיכשל — וזה נקרא כהרחבה תקולה ולא כמנוי שהסתיים. כעת היא אומרת מה קרה ועוצרת שם. כל סיבה שגרסה זו אינה מזהה שומרת על הנוסח הכללי: שרת הרישוי נפרס באופן רציף והרחבה מותקנת אינה כזו, ולכן להיתקל בסיבה לא מוכרת הוא המקרה הרגיל ולא הקיצוני — לעולם לא מוצג מזהה גולמי, ולעולם אין שתיקה. שתי ההודעות החדשות תורגמו לכל שבע עשרה השפות.
0.2025.23 · build 5 — מחוץ להרחבה
2024-07-17
נוסף
- ההרצה יכולה סוף-סוף לצאת החוצה — בשישה פורמטים נוספים. עד כה היו רק שתי יציאות: Fucini JSON, שאיש מלבד ההרחבה אינו קורא, ודוח HTML, שדבר אינו קורא באופן מכונתי. Export Coverage Report... פותח בורר פורמטים וכותב את ההרצה הפעילה כ-CSV לכל קובץ (מכוסה/סה״כ/אחוז לשורות, הסתעפויות, פונקציות, MC/DC, אזורים והיווצרויות, הגרועים תחילה, עם שורת
TOTAL), כ-CSV לכל פונקציה (מספר הרצות, האם רצה, הסתעפויות לא מכוסות בתוכה, זוגות MC/DC), כ-סיכום Markdown להדבקה בבקשת משיכה, כ-קובץ מעקב LCOV, Cobertura XML, SARIF, או כ-תג SVG עצמאי ל-README. הוא נמצא בלוח הפקודות, בשורת הכותרת של תצוגת Covered Files לצד Generate Full HTML Report, ובתפריט המהיר של שורת המצב ברגע ש-quickActions.exportReport דלוק.
- עכשיו זה ממיר, לא רק מציג. ההרחבה כבר קוראת lcov, llvm-cov JSON, Cobertura, JaCoCo, Istanbul/nyc ו-SimpleCov; עם כותבי LCOV ו-Cobertura היא יודעת גם את הכיוון ההפוך. טענו דוח JaCoCo, או כמה דוחות שמוזגו להרצה אחת, והפיקו את קובץ המעקב היחיד ש-genhtml, Codecov, Coveralls ו-SonarQube כולם מקבלים — או את ה-XML ש-Jenkins, GitLab ו-Azure DevOps קולטים באופן מובנה. שניהם עוברים חזרה דרך המפענחים של ההרחבה עצמה, וטווחי שורות נפרשים שורה-שורה כך שה-
LF/LH שנכתבים תואמים לאחוז שעל המסך במקום לקרב אותו.
- כל כותב אומר מה הוא משמיט. כולם מלבד ה-CSV מאבדים מידע, ובשקט: ל-MC/DC, לאזורי קוד ולהיווצרויות C++ אין ייצוג ב-LCOV, ב-Cobertura או ב-SARIF, ו-Cobertura רושם כמה מתנאי השורה כוסו, לא איזה ענף. Fucini JSON ושני ה-CSV נשארים הפורמטים שנושאים את כל מה שנמדד. ב-CSV מדד שאין להרצה משאיר את תאיו ריקים ולא באפס — תא ריק אומר "הכלי הזה לא דיווח נתוני הסתעפות",
0 היה אומר "אף הסתעפות לא נפגעה", וגיליון אלקטרוני לא יבדיל ביניהם אחר כך. כל מה שגיליון אלקטרוני היה מריץ אחרת כנוסחה — שדה שמתחיל ב-=, +, - או @, כלומר כל נתיב npm עם היקף — מצוטט ומנוטרל לפני הכתיבה.
- SARIF מוסיף הערות ל-diff; התג אינו זקוק לרשת. טווחים לא מכוסים מדווחים ברמת
note, לא warning: קוד לא מכוסה הוא מידע על מערך הבדיקות, וסריקת קוד מתייחסת לאזהרה כאל דבר שאמור לחסום — השער שחוסם נשאר Check Coverage Thresholds. התג מצויר כאן ולא נשלף מ-shields.io, ולכן עובד גם במאגר מנותק או מקומי, וצבעו נלקח מאותו colorScale של השוליים ושורת המצב. במהדורת Community החינמית הבורר נפתח ושני ה-CSV עובדים, עם תקרה של 20 ייצואים ביום כמו Export Fucini JSON; פורמטי החליפין הם בשכבה בתשלום, לאורך אותו קו שהמהדורה הזאת תמיד סימנה: לקרוא את המספרים שלך חינם, להזין צינור CI לא.
0.2025.22 · build 3 — אין מה למדוד
2024-06-24
תוקן
- קובץ שאין בו דבר לאינסטרומנטציה כבר אינו מדווח ככזה שכוסה ב-100%. קובץ כותרת שכולו הצהרות — פרוטוטיפים, מאקרו, שומרי הכללה — אין בו גופי פונקציות, ולכן המהדר אינו מפיק עבורו מיפוי כיסוי כלל, וכל דבר שמחלק אפס באפס משיב 100%. הוא הופיע בירוק בעץ, לצד קוד שנבדק באמת. שני הקוראים לוקחים כעת את הסיכומים של הכלי עצמו כדיווח של הקובץ על עצמו —
LF/FNF/BRF ב-lcov, ובלוק summary ב-JSON של llvm-cov — וקובץ שכל סיכומיו אפס נשאר מחוץ להרצה במקום לקבל ציון. הרשומות לפי שורה שמתחת לסיכומים מתעלמים מהן במכוון: הרחבת מאקרו מיוחסת לשורה שמגדירה אותו, בעוד שהספירה שייכת לשורה שמשתמשת בו, בקובץ אחר, ואותה שורה מושאלת הייתה הסיבה היחידה לכך שכותרת כזו נראתה נמדדת. גם סיכומי ההרצה מאבדים אותה, ולכן המספר הראשי נמוך מעט יותר ונכון הרבה יותר. כל נתיב שהושמט מצוין בערוץ הפלט, ודוח שבו כל הקבצים הם הצהרות בלבד שומר על כולם.
שונה
- Pick Coverage File מתווספת למה שכבר טעון במקום להחליף אותו. בנייה שכותבת דוח לכל מודול אין לה קובץ יחיד לקבע, ובחירת הדוח של המודול השני ביטלה בשקט את טעינת הראשון. תיבת הדו-שיח מקבלת כעת כמה קבצים בבת אחת, כל בחירה מתווספת לקבוצה, וכל מה שנבחר ממוזג להרצה אחת — המצוירת בלוח תחת שמו של כל פרויקט. המעקב חל על כולם, ודוח שנבנה מחדש אינו מסיר עוד את האחרים מהמסך. Show Loaded Coverage Files מסתיים בבטל טעינת הקבצים שבחרת, שמחזיר לאיתור הרגיל.
- לתמיכה יש כתובת בדומיין של המוצר עצמו:
support@fucini.software. כאשר ההפעלה אינה יכולה להסתיים מעצמה, לוח הרישוי והודעת קוד הבקשה נתנו כתובת fucini.consulting — דומיין שונה מכל קישור אחר בהרחבה, ונקרא כמו חברה אחרת. license@fucini.software לא השתנה: משם נשלחים המפתחות, זו אינה תיבה לכתוב אליה.
0.2025.21 — של מי ה-src הזה
2024-06-21
נוסף
- כל עץ בתצוגת Coverage אומר עכשיו לאיזה פרויקט הוא שייך. גרסה 0.2025.19 נתנה להרצה ממוזגת בלוק נפרד ומסומן בשם לכל פרויקט, אבל הרצה רגילה עדיין ציירה עץ חשוף — כך שסביבת עבודה שנחתכה לתיקייה שלה עצמה נפתחה על
src בלי שדבר מעליו יאמר איזה src זה. כל עץ נושא עכשיו את השורש שלו: התיקיות שמובילות אל הפרויקט בצבע מעומעם, ותיקיית הפרויקט עצמה אחריהן בצבע מלא. עץ שנחתך לתיקיית סביבת העבודה עדיין אומר לאן בדיוק הוא נחתך, ושני בסיסי קוד שמוזגו להרצה אחת לעולם אינם נקראים כעץ אחד. זו כותרת ולא שורה — אין שם מה להרחיב, והתיקיות שמתחתיה נקפלות בדיוק כמו קודם. בחלונית צרה התיקיות המובילות מתקצרות ראשונות, כך שהתיקייה שבאמת נושאת את שם הפרויקט היא האחרונה להיעלם, וריחוף מציג את הנתיב כולו.
0.2025.20 · build 7 — התפריט שציפיתם לו
2024-06-08
נוסף
- לשורות בתצוגת Coverage יש עכשיו את תפריט ההקשר של סייר הקבצים עצמו. לחיצה ימנית על קובץ או תיקייה פתחה עד כה את גזור/העתק/הדבק של תצוגת הרשת — שלושה פריטים בלי דבר לפעול עליו. כעת נפתח התפריט האמיתי של VS Code: פתח, Open to the Side, פתח באמצעות…, Reveal in Explorer View, Reveal in File Explorer, Open in Integrated Terminal, חפש בתיקייה… עבור תיקייה, וכן Copy Path / Copy Relative Path — ולצידם ב-Windows גם הגרסאות עם קווים נטויים, היכן ששתי הצורות נבדלות. הכפתור
⋯ והתפריט שלו לא השתנו, והם הפריט האחרון בתפריט החדש.
שונה
- מדד שאין עבורו נתונים בקובץ הכיסוי שלכם אינו נשפט עוד. סף ל-MC/DC כשאין MC/DC בבנייה נחשב לכישלון — כך שקובץ עם 100% בכל מדד שהבנייה באמת מדדה ישב מתחת לכרטיס שאמר "3 מתוך 5 הושגו", מול רף שדבר בקובץ הכיסוי הזה לא היה יכול לעבור. מדדים ללא נתונים מדולגים כעת בכל מקום שבו נקבע פסק דין: שורת המצב לקובץ, כרטיס ההרצה כולה, הכותרת מעל הקוד המסומן והדוח ב-HTML. Check Coverage Thresholds עדיין מציינת במפורש מדד חסר, ושם מקומו.
- קבצים שאין בהם דבר למדוד נשמטים מתצוגת Coverage. קובץ כותר של הצהרות, קובץ של ייצוא חוזר בלבד, מודול של טיפוסים בלבד: שום בדיקה שתכתבו לא תשנה את המספר שלהם, ופתיחתם אינה מציגה מדדים כלל. ב-0.2025.19 הם הופיעו עם מקף; כעת הם פשוט אינם ברשימה, ותיקיות שנותרו ריקות נעלמות איתם. הרצה שבה שום דבר אינו ניתן למדידה עדיין מציגה הכול.
תוקן
- אות כונן עדיין יכלה לעמוד בראש העץ. בכיסוי שהנתיבים שלו אינם תחת תיקיית העבודה הפתוחה — קובץ מאוחד מפרויקט אחר, או חלון בלי תיקייה פתוחה — העץ התחיל ב-
W:, וב-Linux וב-macOS בשורה בלי שם כלל: שורה אחת עם ילד יחיד, שאין טעם להרחיב. שורש מערכת הקבצים אינו מצויר עוד לעולם, יהיו הנתיבים אשר יהיו, וכל שורה עדיין נושאת את הנתיב המוחלט האמיתי שלה עבור התפריט והעורך.
0.2025.19 · build 6 — נתיבים, לא הקדמה
2024-05-16
נוסף
- תפריט שורה לכל קובץ ותיקייה בתצוגת Coverage. הכפתור שבסוף השורה מעתיק את הנתיב בכל אחת מארבע הצורות שעורך, מעטפת או הנחיה עשויים לבקש — מוחלט או יחסי לסביבת העבודה, עם מפרידי המערכת או עם לוכסנים — ומציע Reveal in File Explorer וOpen in Integrated Terminal, כשקובץ פותח את המסוף בתיקייה שלו עצמו. הפריטים עם הלוכסנים מופיעים רק היכן שהם שונים מהצורה המקורית, ולכן ב-Linux וב-macOS התפריט קצר בשני פריטים. עד היום העתקת נתיב פירושה הייתה למצוא את אותו קובץ בפעם השנייה בסייר.
- כפתורי כיווץ הכול והרחבת הכול מעל העץ. לכווץ הכול ואז לפתוח את התיקייה האחת שמעניינת אתכם היא הדרך המהירה ביותר בעץ גדול, וקודם היא עלתה קליק אחד לכל תיקייה. מה שכיווצתם כך נזכר בדיוק כמו תיקייה שסגרתם ידנית, כך שטעינה מחדש לא תבטל זאת.
- הרצה ממוזגת שמשתרעת על יותר מפרויקט אחד מציירת כעת כל פרויקט בנפרד, תחת שמו שלו. מיזוג קובץ מעקב מבסיס קוד שני היה תולה את התיקיות שלו על אותו עץ כמו אלה של סביבת העבודה, כך ש-
src הופיע פעמיים בלי לומר מדוע, והספריות של שני הפרויקטים התערבבו לפי סדר האלפבית. כל פרויקט מקבל כעת בלוק משלו עם שם, מופרד בקו, וזה של סביבת העבודה בא ראשון. הרצה המכסה פרויקט יחיד לא השתנתה ואינה נושאת כותרת — לא היה ממה להבחין בה.
תוקן
- קובץ שאין בו שום דבר בר-הרצה דווח ככזה שכוסה ב-0%. מודול שכולו ייצוא-חוזר של
export *, או רק הצהרות טיפוסים, מתקמפל למשהו שאף כלי כיסוי אינו יכול למדוד — ולכן קובץ המעקב אינו רושם עבורו ולו פקודה אחת. תצוגת Coverage נתנה לזה 0% והציבה את הקובץ באדום לצד קוד שבאמת אינו נבדק, אף שאין דבר שאפשר לכתוב עבורו בדיקה; ובמקביל, הסייר סימן את אותו קובץ ב-100% ירוק, משום שסך אפס נקרא כ"הכול מתוך כלום כוסה". אף אחד משני המספרים לא היה נכון, ואף אחד מהם כבר אינו מוצג: השורה בחלונית מקבלת מקף ומסגרת מקווקוות עם הסבר קצר, ותג הסייר פשוט אינו מופיע. גם תיקייה שיש בה רק קבצים כאלה נשארת ללא ציון. קובץ שהוא 0% ממשהו שכן נמדד עדיין מציג 0% — המקף פירושו "אין מה למדוד", לא "נמדד והוחמץ". - שורות מפרויקט ממוזג הצביעו למקום הלא נכון. הנתיבים שלהן נבנו משורש סביבת העבודה ולא משלהן, כך שעבור קובץ מחוץ לסביבת העבודה תפריט השורה העתיק — ו"Reveal in File Explorer" פתח — נתיב שהקובץ מעולם לא היה בו. כעת הן נושאות את השורש שממנו הן באמת הגיעו.
שונה
- תצוגת Coverage כבר לא מציירת את שורש סביבת העבודה. העץ התחיל בשורש מערכת הקבצים וירד דרך כל תיקייה מעל הפרויקט — הכונן, אחר כך התיקייה שמכילה את הפרויקטים שלכם, אחר כך הפרויקט עצמו — לפני שהגיע לתיקייה הראשונה שבאמת הייתה שלכם. אלה היו כמה רמות הזחה, בכל שורה, שחזרו על מה שכותרת החלון כבר אמרה. הנתיבים מתחילים כעת בתיקיית סביבת העבודה. הנתיב המוחלט המלא הוא עדיין מה שתפריט השורה מעתיק ומה שהעורך פותח.
0.2025.18 · build 4 — נשאר במקום שהשארתם
2024-04-30
תוקן
- תיקיות שכיווצתם בתצוגת Coverage נפתחו שוב בכל טעינה מחדש. המעקב פעיל כברירת מחדל, ולכן בנייה שמייצרת כיסוי מחדש מציירת את החלונית מחדש — ומכיוון שכל תיקייה צוירה פתוחה, כיווץ נשמר רק עד הבנייה הבאה. בעץ גדול פירוש הדבר היה לעשות את אותה עבודה כמה פעמים בשעה. החלונית זוכרת עכשיו אילו תיקיות סגרתם ומשאירה אותן סגורות. תיקייה שמופיעה לראשונה בהרצה מאוחרת יותר עדיין מוצגת פתוחה, כמו כל תיקייה אחרת: מה שנזכר הוא הפעולה המכוונת של סגירה, לא מצב ברירת המחדל.
- כיבוי הטלמטריה לא עצר את הפינג של הסרת ההתקנה. את הפינג הזה שולח סקריפט קטן ועצמאי ש-VS Code מריץ כשאתם מסירים את ההרחבה. אין לו גישה ל-API של VS Code והוא אינו יכול לקרוא את ההגדרות שלכם, ולכן הדבר היחיד שאומר לו לא לשלוח הוא היעדרו של קובץ שההרחבה כותבת כל עוד הטלמטריה פעילה — והקובץ הזה מעולם לא נמחק כשכיביתם את הטלמטריה. מי שהפעיל אותה ואחר כך כיבה אותה היה שולח בכל זאת, בעת הסרת ההתקנה, את שם המשתמש שלו במערכת ההפעלה, את שם המחשב ואת תיקיית הבית. הקובץ נמחק עכשיו ברגע שהטלמטריה כבויה.
- חידוש Pro יכול היה לדווח על הצלחה עבור מפתח שהחלפתם זה עתה. החידוש השקט קרא את המפתח שהוגדר פעמיים: פעם אחת כדי להחליט אם לחדש, ופעם נוספת אחר כך כדי להחליט אם להציג הודעה. הדבקת מפתח חדש בזמן שחידוש היה בעיצומו גרמה לקריאה השנייה לראות מפתח אחר, וההודעה "המינוי שלכם ל-Pro חודש" תיארה את המפתח שהוחלף. עכשיו המפתח נקרא פעם אחת בלבד.
שונה
- כל מודול בהרחבה מכוסה עכשיו בבדיקות משלו. לכלי שכל תפקידו לומר לכם לאן הבדיקות שלכם מגיעות בפועל, נראה שכדאי לעשות זאת כראוי: 53 מתוך 54 קובצי המקור עומדים על 100% בפקודות, בענפים, בפונקציות ובשורות, והקובץ הנותר — שכבת החיבור ל-VS Code — על 95% מהפונקציות שלו. כתיבתן חשפה את התקלות שלמעלה, ולצידן כעשרים ומשהו בדיקות הגנה שלעולם לא יכלו לרוץ: מסלולי גיבוי שעמדו מאחורי בדיקות שכבר שללו אותם, שנראו כמו רשתות ביטחון ולא תפסו דבר. הן הוסרו במקום להיות מכוסות בבדיקה שלא יכלה להיכשל.
0.2025.17 — נשאל ברגע שראוי לענות בו
2024-04-27
שונה
- הסקר האופציונלי ממתין כעת עד שתשתמשו בהרחבה באמת, ושואל ברגע טוב יותר. הוא ספר ימי לוח מאז ההתקנה, כלומר מדד כמה זמן עבר מאז שהתקנתם ולא אם ראיתם אותה פועלת — התקנה שלא נגעו בה חודש התבקשה לדרג מוצר שמעולם לא הראה לה דבר. כעת נדרשות טעינות כיסוי אמיתיות בנוסף לזמן שחלף, והוא כבר אינו מופיע בזמן עליית העורך: הוא ממתין לטעינה מוצלחת. אחרי שנה מגיעה הזמנה שלישית ואחרונה, משום ששתיים באותו רבעון הדירו לצמיתות כל מי שפשוט היה עסוק אז.
- התרגום ההולנדי אינו רשמי עוד. הוא פנה אליכם בכל מקום ב-«u», שנשמע נוקשה לכלי פיתוח ולא התאים לשאר קולו של המוצר. כל הטקסטים ההולנדיים משתמשים כעת ב-«je» — נכתבו מחדש משפט אחר משפט, מכיוון שהשינוי גורר עמו את צורות הפועל.
0.2025.16 — קוד, לא חברה
2024-04-23
שונה
- טופס ההפעלה ביקש „company code“ ממפתחים עצמאיים. רכישת Pro או Pro Plus כאדם יחיד מעניקה קוד מהמנוי שלכם עצמכם — אין מאחוריו שום חברה, והבקשה לכזו מרמזת שהגעתם לטופס הלא נכון. השדה נקרא כעת Subscription code ב-Pro וב-Pro Plus, ונשאר Company code ב-Business וב-Enterprise, שם צוות אכן חולק אחד. ההסברים שמתחתיו כבר נכתבו לכל תוכנית בנפרד; רק התווית נשארה כללית.
0.2025.15 · build 3 — נמדד לפי מה שהגדרתם
2024-03-25
תוקן
- דוח ה-HTML שנוצר שפט את הקוד שלכם מול 100%, לא משנה אילו ספים הגדרתם. עמודת הסטטוס בדקה כל מדד מול 100 סמוי, כך שפרויקט שהגדיר את הספים שלו ל-80 ועמד בהם ראה כרזת COMPLIANT ירוקה ממש מעל עמודה של איקסים אדומים — לאותה הרצה, באותו עמוד. מקרא המדדים עשה אותו דבר. שניהם משתמשים כעת בספים שהגדרתם, ובמקום שבו אף סף אינו חל הם מציגים מקף עמום במקום להמציא פסק דין.
- כרזת התאימות טענה יותר ממה שבדקה. תמיד נכתב בה "כל הספים שהוגדרו הושגו", גם במצב ברירת המחדל שבודק רק את הציון המשוקלל — כך שהרצה יכלה לטעון שכל הספים הושגו בזמן שאחד מהם נכשל בבירור בטבלה שמתחת. כעת כל מצב מציין איזה כלל באמת הופעל.
- ה-README טען שהתוסף "פועל בחינם עד 2026-12-31". תאריך כזה לא קיים במוצר. גרסה קודמת תיקנה את הטענה הזו בתיאורי ההגדרות אך פספסה את ה-README — הדבר הראשון שקוראים ב-Marketplace. עכשיו כתוב בו מה קורה באמת: 14 יום התנסות מהשימוש הראשון, ואז שכבת Community החינמית, בלי תאריך שאחריו משהו נפסק.
0.2025.14 — להבחין ביניהן
2024-03-15
שונה
- שתי המהדורות כבר לא נראות זהות ב-Marketplace. Pro ו-Community נבנות מאותו עץ קוד, ועד עכשיו זה כלל גם את הסמל — ולכן שני הפריטים היו אותה תמונה עם כיתובים שונים, זה לצד זה באותן תוצאות חיפוש. כעת לכל מהדורה יש סמל משלה: אותו איור עם פס צבעוני בתחתית, טורקיז ל-Pro ואפור-כחלחל ל-Community. המילה היא שמבדילה ביניהן כשהסמל מוצג בגדול; בשורת תוצאות חיפוש המילה קטנה מכדי להיקרא, ואז הצבע עושה זאת במקומה.
0.2025.13 — נגיש מהמקום שבו אתם נמצאים
2024-02-26
תוקן
- פתיחת התצוגה המוערת כבר לא מונעת מכם לפתוח אותה שוב. חלונית המקור המוער היא תצוגת ווב ולא עורך טקסט, ולכן כל עוד היא בפוקוס התוסף לא ראה «קובץ נוכחי» — והפקודה Open Annotated Source השיבה שם «פתחו תחילה קובץ עם כיסוי טעון», למי שהביט בדיוק בתצוגה המוערת של קובץ שיש לו כיסוי. עכשיו היא נסמכת על הקובץ שמאחורי החלונית שלפניכם. אותה חסימה גם דילגה בשקט על הבדיקה החוזרת שלשמה קיימת הרצה שנייה: כשמוגדר דוח HTML של llvm-cov, דווקא ההרצה החוזרת היא שמעבירה את החלונית לעמוד של אותו דוח — כך שאם בניית הכיסוי הסתיימה אחרי שפתחתם את החלונית, לא הייתה דרך להגיע אליה מהחלונית עצמה.
0.2025.12 · build 2 — לומר את מה שנכון
2024-02-15
נוסף
- מנוי Pro בתשלום מתחדש עכשיו מעצמו. כל מפתח הפעלה תקף בדיוק לתקופה ששולמה. תוכניות הצוות קולטות תקופה מחודשת בבדיקה הבאה שלהן, אבל Pro אישי לעולם אינו פונה לשרת — הוא עובד לגמרי לא־מקוון — ולכן שום דבר לא הביא אליו את החידוש, ומפתח של מנוי חודשי היה פג בערך מדי חודש, ולא משנה כמה בקפידה שילם. ההרחבה מבקשת כעת מפתח חדש בשקט, רק בימים שסביב הפקיעה שלה ורק כשברשותה הקוד שמוכיח שמנוי שילם עליה. להיות לא־מקוון בחלון הזה לא עולה דבר: המפתח ממשיך לעבוד עד שהוא באמת פג, והניסיון הבא לאחר מכן משחזר אותו.
- הפעלה מתוך מייל הרכישה היא בלחיצה אחת. הקישור מוסר להרחבה את התוכנית והקוד ישירות, במקום לפתוח את VS Code, לחפש את הפקודה ולהדביק את הקוד ידנית. תמיד מתבקש אישור לפני ניצול מושב. הזנת הקוד ידנית עובדת בדיוק כמו קודם — הקישור הוא קיצור דרך, לעולם לא הדרך היחידה — והוא עובד גם בגרסת Community.
תוקן
- תיאור של הגדרה טען שההרחבה "חינמית עד 2026-12-31". תאריך כזה אינו קיים בשום מקום במוצר. מה שקורה בפועל הוא תקופת ניסיון של 14 ימים מהשימוש הראשון, ואחריה ההרחבה עוברת לרמת Community החינמית. עכשיו זה מה שכתוב שם, בכל שפה.
- הגדרות הסף אינן מציינות עוד את הגרסה שבה השתנו ברירות המחדל שלהן — מספר גרסה באמצע משפט עונה על שאלה שאיש אינו שואל בקריאת תיאור של הגדרה.
- כמה תיאורים מתורגמים ציינו פקודה שאף VS Code מתורגם אינו מציג. הם התייחסו לפקודת ההפעלה בשמה האנגלי, וכך כל מי שאינו עובד באנגלית נשלח לחפש בלוח הפקודות מחרוזת שאינה שם.
0.2025.11 · build 3 — לספור את מה שנחשב
2023-12-26
תוקן
- פרויקט ללא החלטות MC/DC היה עלול להציג 0% כיסוי כולל. כלים מסוימים מדווחים על מקטע MC/DC גם כשאין בו דבר למדוד, וזה נקרא כ־„0% מכוסה” במקום „אין מה לכסות”. מכיוון שהציון הכולל צונח לאפס ברגע שמדד כלשהו הוא אפס, פרויקט מכוסה במלואו היה עלול להציג 0%. מדד שאין בו דבר למדוד אינו נכלל עוד בציון כלל, והשורה שלו נעלמת במקום להופיע כ־„0 / 0 תנאים מכוסים”.
- מצב הרישיון מתורגם כעת לכל 17 השפות. הוא נשאר באנגלית בכל מקום, ומכיוון שהוא משובץ בתוך משפטים שכבר תורגמו, התקבלה שורה מתורגמת למחצה בשורת המצב, בהתראות ובלוח הקבצים המכוסים.
- גם התצוגה „מקור מוער” ופרטי הכיסוי בריחוף מתורגמים כעת — טבלת פירוט העמידה בדרישות, לחצני הניווט והתיאורים שלהם, ופרטי הענפים ו־MC/DC.
שונה
- מנוי Pro בתשלום ניתן כעת להפעלה באמצעות קוד ייעודי. רשימת התוכניות בבקשת המפתח קיבלה רשומת Pro, כך שלקוד המגיע עם מנוי Pro יש סוף־סוף היכן להיות מוזן. מפתחות Pro אישיים עדיין פועלים באופן מלא ללא חיבור לאינטרנט ואינם פונים לשרת לאחר ההפעלה.
- הסמל בסרגל הפעילות גדול וברור יותר לצד הסמלים המובנים.
- מעבר למהדורת Community מתקין אותה כעת מ־fucini.software. קודם לכן נעשה ניסיון דרך ה־Marketplace, שבו מהדורת Community אינה מפורסמת, ולכן המעבר היה עלול להשאיר אותך ללא הרחבה מותקנת כלל.
0.2025.10 · build 5 — נחיתה רכה יותר
2023-12-08
שונה
- מנוי שפג תוקפו נוחת כעת ברמה החינמית — כשמפתח הפעלה אישי הגיע לסופו, התוסף המשיך לבקש מכם לחדש ללא הגבלה. בחירה שלא לחדש היא סיום רגיל של מנוי, לא תקלה, ולכן התוסף מתייצב כעת במקום זאת על רמת Community החינמית והקבועה. תוכניות לצוותים אינן מושפעות מכך במכוון: מפתח Pro Plus, Business או Enterprise שפג תוקפו עדיין מדווח כפג תוקף, שכן שם מנהל מערכת הוא שצריך לחדש אותו, והורדה שקטה של החברה כולה לרמה החינמית הייתה מסתירה זאת.
תוקן
- כיבוי הטלמטריה מכובד כעת בכל מקרה. נתיב קוד אחד היה עלול לדלג על הבדיקה כאשר מצב האבחון המפורט הפנימי של התוסף היה פעיל. מצב זה כבוי בכל בנייה שפורסמה, ולכן אף גרסה שיצאה מעולם לא התנהגה כך, אך הבדיקה מתבצעת כעת ללא תנאי.
- ההגדרות חלות מיד במקום להמתין לטעינה מחדש. עריכה של מיפוי מחדש של נתיבים, אי-הכללת הערות, סינון לפי git-diff או הסכומים של הקבצים שאינם נכללים טוענת כעת את הכיסוי מחדש באופן מיידי — ובמיוחד מיפוי מחדש של נתיבים, שכן זו בדיוק ההגדרה שאליה פונים כשהנתיבים אינם מתיישבים זה עם זה.
- "Unlock Full Features" ו"Switch to Community" היו עלולים להיעצר באמצע בלי לומר זאת. שניהם רצים כעת עד הסוף.
- מפתח ההפעלה שלכם נשאר קשור לאותה זהות מכונה. בחלק מהתצורות זהות זו הייתה עלולה להיווצר מחדש בין הפעלות, מה שפסל מפתח שכבר הונפק.
0.2025.9 — תרגומים מלאים
2023-12-02
נוסף
- תרגומים מלאים בכל 17 השפות הכלולות — כמאה ממחרוזות הממשק החדשות יותר, ובכללן דיאלוגי ההפעלה והרישוי, סקר המשוב האופציונלי, תהליך הפתיחה של Community והתראות העדכון העצמי, עדיין נפלו חזרה לאנגלית בכל חבילה שאינה אנגלית. כל 17 השפות מכסות כעת את מלוא ממשק זמן הריצה של התוסף.
שונה
- מעבר תחזוקה על הערות המקור, תיעוד סקריפטי הבנייה ורשימת קובצי האריזה. מערך הקבצים הנשלח בתוסף לא השתנה; ללא שינויים פונקציונליים או התנהגותיים.
0.2025.8 — המהדורות כבר לא מתנגשות
2023-11-20
תוקן
- התקנת מהדורות Pro ו-Community יחד עלולה הייתה להקריס אחת מהן בעת ההפעלה — הן רושמות את אותן פקודות ואת אותה תצוגת קובצי כיסוי. כעת הדבר מזוהה מראש: אם המהדורה השנייה מותקנת גם היא, ההפעלה נעצרת בצורה נקייה עם הודעה המנחה אתכם להסיר אחת מהן, במקום כשל הפעלה בלתי מוסבר.
0.2025.7 — תחזוקה שוטפת
2023-10-30
גרסת תחזוקה שוטפת; ללא שינויים פונקציונליים.
0.2024.6 — רמת Community ותוכניות צוות
2023-10-17
רמה חינמית קבועה, תוכניות צוות החולקות מאגר מושבים, ומהדורת Community נפרדת של התוסף.
נוסף
- רמת Community חינמית וקבועה — במקום עצירה מוחלטת בתום תקופת הניסיון של 14 הימים, התוסף מתייצב כעת על Community: כל תכונה למעט MC/DC, טעימה חודשית מוגבלת מ-Full HTML Report ומתצוגות Annotated Source הקבועות, מגבלות יומיות נדיבות על מספר מצומצם של פעולות הניתנות לאוטומציה, וכל היתר ללא הגבלה.
- פתחו כל תכונה בחינם — פקודה חדשה, "Unlock Full Features", מחליפה טלמטריית שימוש מפורטת בהרשאה מלאה ובלתי מוגבלת, הפיכה בכל עת. סקר משוב אופציונלי בתוך היישום מעניק במקום זאת מפתח מלא-תכונות ל-30 יום, ללא כל תנאים נלווים.
- תוכניות צוות: Pro Plus, Business ו-Enterprise — אלו חולקות מאגר מושבים (קוד חברה בתוספת מספר מושבים) במקום מפתח אחד לכל מכונה, עם בדיקה תקופתית ברקע השומרת על עדכניות ההרשאה של המושב ומסמנת אוטומטית מושב שבוטל או צומצם.
- Fucini Coverage Studio Community — פרסום נפרד וייעודי הנבנה מאותו קוד מקור, שבו קוד תקופת הניסיון/ההפעלה/תוכניות הצוות של הרמות בתשלום נעדר לחלוטין ולא רק מוסתר. ראו את עמוד ההורדה.
שונה
- יצירת Full HTML Report ותצוגות Annotated Source הקבועות (רגילה וצד לצד) הן כעת תכונות של הרמות בתשלום בבסיס Community — רק תצוגת ההחלפה במקום נותרה, מוגבלת חודשית כמקודם. הפתיחה עדיין מעניקה את כל אלו.
- אזהרת מגבלת שימוש ברמת Community מציעה כעת את שתי הדרכים קדימה בהנחיה אחת: לצפות בתוכניות בתשלום, או לפתוח באמצעות טלמטריה.
תוקן
- טלמטריה מפורטת ובעלת פוטנציאל מזהה (שם המשתמש של מערכת ההפעלה, תיקיית הבית, מפרטי מעבד/זיכרון, ממשקי רשת ותוכן הדוח/המקור המלא) יכולה כעת להישלח רק על ידי Community או על ידי הרשאה חינמית מותנית-טלמטריה — לעולם לא על ידי רישיון Pro/Pro Plus/Business/Enterprise בתשלום, ללא תלות בהגדרות הטלמטריה המקומיות.
- התקנה שכבר מריצה בנייה קודמת אינה מקבלת עוד חלון ניסיון חדש רק משום ששודרגה — היא נוחתת כעת נכונה ברמת Community אם תקופת הניסיון הישנה שלה כבר הסתיימה.
- התראת העדכון, התקדמות ההורדה והודעות השגיאה מציגות כעת את גרסת
Major.Year.Minor הפשוטה (התואמת למה שתצוגת Extensions של VS Code מציגה) במקום לחשוף את מספר הבנייה הפנימי, למשל 0.2024.6 במקום 0.2024.6.2.
0.2024.5 — מפתחות רישיון מכווננים
2023-09-03
מפתחות הפעלה יכולים כעת להגביל תכונות בודדות בנפרד, ומנהלי רישיונות יכולים להנפיק ידנית מפתח מכוונן במדויק מלוח הבקרה.
נוסף
- מגבלות שימוש לכל תכונה — מפתחות הפעלה יכולים כעת להגביל כל תכונה/פעולה באופן עצמאי (למשל, ייצוא דוחות HTML ל-1 לחודש) במקום מגבלה משותפת אחת לטעינות כיסוי. מפתחות קיימים ממשיכים לעבוד ללא שינוי.
- הנפקת מפתח ידנית — מנהלי רישיונות יכולים כעת להנפיק ידנית מפתח עבור קוד בקשה שהתקבל מחוץ לשאלון שבתוך העורך, ולבחור בדיוק אילו תכונות להעניק, מועד תפוגה ומגבלות לכל תכונה, כאשר המפתח נשלח בדוא"ל אוטומטית כשניתנת כתובת.
0.2024.4 — אמינות ערוץ העדכונים
2023-07-24
מתקן באג מטמון שעלול היה להסתיר גרסאות חדשות ממשתמשים הנמצאים מאחורי שרתי פרוקסי ארגוניים מסוימים.
תוקן
- אמינות ערוץ העדכון העצמי — מניפסט העדכון מוגש כעת עם כותרת no-cache קפדנית, כך ששרת פרוקסי ממטמן בין fucini.software לבין הקורא אינו יכול עוד להגיש עותק מיושן שמסתיר גרסאות חדשות.
0.2024.3 — תיקונים קלים וביצועים
2023-07-13
גרסת תחזוקה קטנה: כמה תיקוני באגים קלים ושיפורי ביצועים.
תוקן
- תיקוני באגים — תיקוני באגים קלים ושיפורי יציבות.
- ביצועים — שיפורי ביצועים קלים בטעינה ובתצוגה של נתוני הכיסוי.
0.2024.2 — הפעלה אוטומטית
2023-06-20
מפתחות ההפעלה מונפקים ומוחלים כעת באופן אוטומטי — אין יותר צורך להמתין לדוא"ל.
גרסת הערכה. כל התקנה מקבלת תקופת ניסיון חינמית של 14 ימים עם הכול פתוח, מהשימוש הראשון; לאחר מכן היא עוברת לרמת Community החינמית במקום להיפסק. מפתח רישיון מונפק אוטומטית לפי בקשה. מידע נוסף →
שונה
- הפעלה אוטומטית — בקשת מפתח שולחת כעת שאלון קצר ומחילה את המפתח שהתקבל על ההגדרות שלכם באופן אוטומטי, ללא חילופי דוא"ל.
- חידושים מהירים יותר — בקשת חידוש שואלת רק שאלות שימוש ומשאלות; פרטי הקשר שלכם מבקשה קודמת נעשה בהם שימוש חוזר, ולעולם לא נשאלים מחדש.
- חלון הערכה קבוע — תקופת הניסיון נמשכת כעת עבור כולם עד 31.12.2026, במקום הספירה לאחור הקודמת של 14 יום מההתקנה.
- תהליך ההפעלה מותאם לשפה — השאלון לחידוש ואישורי ההפעלה מתורגמים כעת לכל 18 השפות הנתמכות, כמו שאר התוסף.
0.2024.1 · build 3 — בדיקת עדכונים חכמה יותר
2023-06-02
התוסף כעת בודק עדכונים גם ב-fucini.software וגם ב-VS Code Marketplace, ותמיד מציע את הגרסה החדשה יותר.
תוקן
- בדיקה משני מקורות — כעת שואל גם את fucini.software וגם את VS Code Marketplace, ומציע את הגרסה החדשה יותר.
0.2024.0 — גרסה ראשונית
2023-04-26
הגרסה הציבורית הראשונה של Fucini Coverage Studio — כיסוי מובנה ל-VS Code הקולט קובצי מעקב של תקני תעשייה, מנרמל אותם למודל קנוני אחד, ממזג הרצות באופן דטרמיניסטי ומדווח דרך ה-Test Coverage API המובנה של VS Code.
נוסף
- קליטת פורמטים מרובים — LCOV, llvm-cov JSON, Cobertura XML, JaCoCo XML, Istanbul/nyc ו-SimpleCov JSON, מזוהים אוטומטית.
- מיזוג דטרמיניסטי — מספר קובצי מעקב משולבים להרצה אחת עם מקור מתועד, יציב ללא תלות בסדר הטעינה.
- ממשק כיסוי מובנה — סימוני שורה/ענף/פונקציה, סרגל סקירה והפאנל המובנה Test Coverage.
- כיסוי MC/DC — פירוט לכל החלטה בעת מעבר עכבר וסימון שוליים צבעוני אופציונלי.
- ציון מורכב — ממוצע הרמוני משוקלל לפי SIL על פני שורות, ענפים, פונקציות, אזורים, MC/DC ומופעי C++.
- פסק דין תאימות — בקרת COMPLIANT / NON-COMPLIANT עם המצבים
strict, whm, both ו-either.
- מיפוי מחדש של נתיבים, כיסוי הפרשי, תגי Explorer ושורת מצב כללית.
- ניתוח בתוך העורך — CodeLens לפונקציות, מעבר עכבר על ענפים, אזהרות קוד מת, אזהרות כיסוי מיושן ו-Next/Previous Uncovered.
- תצוגת קבצים מכוסים, דוחות HTML, היסטוריה ומגמות, מצב מעקב וייצוא Fucini JSON.