कमांड-लाइन पर 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 वही कहता है जो उसका एग्ज़िट कोड कहता है। कोई थ्रेशोल्ड सेट न होने पर वह एग्ज़िट कोड 0 के साथ "passed": false लिखता था, और जो पाइपलाइन एग्ज़िट कोड के बजाय JSON पढ़ती थी वह उस रन को विफल कर देती थी जिसे कमांड ने पास किया था। passed एक शब्द में एग्ज़िट कोड है; यह बताने वाला कि कोई गेट था ही नहीं, configured है। खाली --lines "" अब उस गेट को चुपचाप बंद करने के बजाय अस्वीकार किया जाता है। - तुलना बेसलाइन को वहीं रखती है जहाँ वह रन को रखती है।
pathRemap और रिपोर्ट द्वारा घोषित मूल रन पर लागू होते थे, बेसलाइन पर नहीं — इसलिए बिल्ड सर्वर पर लिखी बेसलाइन किसी से मेल नहीं खाती थी और तुलना यह बताती थी कि कुछ नहीं बदला, जबकि कुल आँकड़ा स्पष्ट रूप से बदल चुका था।
कमांड-लाइन पर Coverage Studio 2.2026.3 — दो इंजनों से मापी गई फ़ाइल फिर एक ही फ़ाइल है
2026-10-04
ठीक किया गया
- किसी रिपोर्ट के सापेक्ष पथ वहीं से जुड़े होते हैं जहाँ वह रिपोर्ट लिखी गई थी। llvm-cov फ़ाइल का पूरा पथ लिखता है; gcovr उसे उस बिल्ड फ़ोल्डर के सापेक्ष लिखता है जिसमें उसकी रिपोर्ट रखी है। एक ही ट्री की दोनों रिपोर्टें देने पर
summary उन दोनों में समान हर फ़ाइल को दो बार सूचीबद्ध करता था — हर इंजन के आँकड़ों के साथ एक बार — और दोनों को कुल में जोड़ देता था, क्योंकि सापेक्ष पथ के पास हल होने के लिए कोई मूल नहीं था और वह उस फ़ोल्डर के सापेक्ष हल होता था जिसमें शेल उस समय था। 5,258 पंक्तियों का एक ट्री 5,836 के रूप में बताया जाता था, और अतिरिक्त हिस्सा एक ऐसे पथ के नीचे की फ़ाइलों का था जिसमें इनमें से कोई नहीं है। अब हर रिपोर्ट अपनी ही डायरेक्टरी और उसके ऊपर की डायरेक्टरियों से जुड़ती है, उस फ़ोल्डर तक जिसमें कमांड चलती है — जैसा दोनों संस्करण पहले से करते हैं — ताकि दोनों एक ही फ़ाइल-समूह के रूप में मिलें, हर बिल्ड डायरेक्टरी के लिए एक pathRemap नियम के बिना। - बाइट-ऑर्डर मार्क से शुरू होने वाली सेटिंग्स फ़ाइल भी अस्वीकार होती थी। Windows पर कोई एडिटर उसे पाठ से पहले लिख सकता है; अब उसे JSON का हिस्सा नहीं माना जाता।
- जल्दी रुकने वाले पाठक को भेजा गया आउटपुट चुपचाप समाप्त होता है।
summary को head या PowerShell के Select-Object -First में पाइप करने पर वह बिना संभाले गए 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, गेट। लाइनों, ब्रांचों, फ़ंक्शनों, MC/DC, कंडीशनों, रीजनों, म्यूटेशन या भारित स्कोर पर थ्रेशोल्ड से नीचे होने पर एग्ज़िट कोड 1, सेटिंग्स से या कमांड-लाइन से; --new-code 80 --base-ref origin/main उन लाइनों को परखता है जो किसी ब्रांच ने बदलीं, टूल द्वारा चलाए गए git diff से; --require-reasons बिना कारण वाले एक्सक्लूज़न मार्कर को विफल करता है।
summary, export, report, badge, compare। कुल और हर फ़ाइल; रन को प्रति-फ़ाइल या प्रति-फ़ंक्शन CSV, Markdown, LCOV, Cobertura, SARIF, एक्सक्लूज़न सूची, बैज या Fucini के JSON के रूप में; बहु-पृष्ठ HTML रिपोर्ट; सेटिंग्स के पैमाने से रंगा बैज; यह रन किसी बेसलाइन के मुक़ाबले, रिग्रेशन सबसे पहले, पुल रिक्वेस्ट जाँच के लिए --fail-on-regression के साथ।
mcp, AI एजेंट के लिए। संस्करणों के छह टूल, रन के ऊपर 127.0.0.1 पर एक टोकन के पीछे परोसे गए, और क्लाइंट की mcp.json के लिए प्रविष्टि छाप दी जाती है।
- Visual Studio संस्करण की सेटिंग्स फ़ाइल। कोड के बगल में
fucini-coverage.json, VS Code सेटिंग्स की fuciniCoverage.* कुंजियों के साथ; उसके नीचे .vscode/settings.json। रिपोर्टें फ़ाइलों, फ़ोल्डरों या पैटर्न के रूप में बताई जाती हैं, .gz खोल लिया जाता है, और हर कमांड अपना दस्तावेज़ ख़ुद देता है: fucini-coverage help <command>।
Coverage Studio for VS Code 2.2026.2 — ट्रायल लाइसेंस सर्वर के उत्तर के साथ शुरू होता है
2026-10-04
बदला गया
- नए इंस्टॉल का ट्रायल लाइसेंस सर्वर के पहले उत्तर के साथ शुरू होता है। जब तक एक्सटेंशन एक बार fucini.software तक नहीं पहुँचता, वह Community टियर पर चलता है और कारण बताता है। जो इंस्टॉल पहले से ट्रायल पर है या जिसके पास लाइसेंस है, उसे कोई फ़र्क़ नहीं दिखेगा।
- डेवलपमेंट कंटेनर या Codespace में कोई ट्रायल नहीं। वहाँ एक्सटेंशन Community टियर पर शुरू होता है; सब्सक्रिप्शन कोड, कुंजी या 7-दिन का पास सब कुछ अनलॉक करता है।
- उपयोग बही मशीन को एक दूसरे हैश से पहचानती है, जो ऑपरेटिंग सिस्टम के अपने पहचानकर्ता का है। केवल हैश भेजा जाता है; गोपनीयता नीति देखें।
Coverage Studio for Visual Studio 2.2026.1 — छोटे सुधार
2026-10-04
ठीक किया गया
- छोटे सुधार। एक रखरखाव रिलीज़: अंदरूनी छोटे सुधार, और ऐसा कुछ नहीं जो आपके देखने या इस्तेमाल करने का तरीका बदले।
Coverage Studio for VS Code 2.2026.1 — छोटे सुधार
2026-10-04
ठीक किया गया
- छोटे सुधार। एक रखरखाव रिलीज़: अंदरूनी छोटे सुधार, और ऐसा कुछ नहीं जो आपके देखने या इस्तेमाल करने का तरीका बदले।
Coverage Studio for 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 से दोनों संस्करण एक ही वर्शन रखते हैं, इसलिए उस न्यूनतम से पुराना बिल्ड अपडेट किए जाने को कहता है, जैसे VS Code संस्करण करता है।
Coverage Studio for 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 क्लाइंट की प्रविष्टि क्लिपबोर्ड पर रख देता है। - वही आँकड़े जो स्क्रीन पर हैं। टूल लोड किए गए रन से जवाब देते हैं — वही एक्सक्लूज़न, वही रीमैपिंग — इसलिए जिस एजेंट को किसी फ़ंक्शन की कवरेज की कमियाँ भरने को कहा गया है और मार्जिन देख रहा रिव्यूअर, दोनों उन्हीं पंक्तियों की बात कर रहे हैं।
Visual Studio के लिए Coverage Studio 1.2026.22 — दो इंजनों से मापी गई फ़ाइल एक ही फ़ाइल है
2026-10-04
ठीक किया गया
- दो इंजनों से मापी गई फ़ाइल एक ही फ़ाइल है। llvm-cov फ़ाइल का पूरा पथ लिखता है; gcovr उसे उस बिल्ड फ़ोल्डर के सापेक्ष लिखता है जिसमें उसकी रिपोर्ट रखी है। सापेक्ष पथ रिपोर्ट की अपनी डायरेक्टरी और उसके ऊपर के फ़ोल्डरों से जोड़ा जाता है — पर उससे पहले रिज़ॉल्वर यह पूछता था कि पथ जैसा लिखा है वैसा मौजूद है या नहीं, और इस प्रश्न का उत्तर उस फ़ोल्डर से मिलता है जिससे स्वयं Visual Studio शुरू किया गया था। यदि उस फ़ोल्डर में वह फ़ाइल थी, तो पथ सापेक्ष ही रह जाता था: फ़ाइल के दो नाम हो जाते, वह Coverage विंडो में दो बार दिखती और कुल में दो बार गिनी जाती थी। 5,258 पंक्तियों का एक ट्री 5,836 के रूप में पढ़ा जाता था। जो पथ अपना कोई स्थान नहीं बताता, उससे अब यह पूछा ही नहीं जाता; वह वहीं जोड़ा जाता है जहाँ रिपोर्ट लिखी गई थी, और पंक्ति यही कहती है।
VS Code के लिए Coverage Studio 1.2026.23 — दो इंजनों से मापी गई फ़ाइल एक ही फ़ाइल है, और आपका चुना हुआ गटर मोड आपकी सेटिंग्स से बाहर रहता है
2026-10-04
ठीक किया गया
- दो इंजनों से मापी गई फ़ाइल एक ही फ़ाइल है। llvm-cov फ़ाइल का पूरा पथ लिखता है; gcovr उसे उस बिल्ड फ़ोल्डर के सापेक्ष लिखता है जिसमें उसकी रिपोर्ट रखी है। सापेक्ष पथ रिपोर्ट की अपनी डायरेक्टरी और उसके ऊपर के फ़ोल्डरों से जोड़ा जाता है — पर उससे पहले रिज़ॉल्वर यह पूछता था कि पथ जैसा लिखा है वैसा मौजूद है या नहीं, और इस प्रश्न का उत्तर उस फ़ोल्डर से मिलता है जिससे एक्सटेंशन होस्ट शुरू हुआ था, यानी
code . के बाद आपकी प्रोजेक्ट रूट। तब पथ सापेक्ष ही रह जाता था: फ़ाइल के दो नाम हो जाते, वह Coverage दृश्य में दो बार दिखती और कुल में दो बार गिनी जाती थी। 5,258 पंक्तियों का एक ट्री 5,836 के रूप में पढ़ा जाता था। जो पथ अपना कोई स्थान नहीं बताता, उससे अब यह पूछा ही नहीं जाता; वह वहीं जोड़ा जाता है जहाँ रिपोर्ट लिखी गई थी, और पंक्ति यही कहती है। - आपका चुना हुआ गटर मोड सत्र भर बना रहता है, और आपकी सेटिंग्स वैसी ही रहती हैं जैसी आपने लिखी थीं। स्टेटस बार, चयन सूची या Toggle Coverage Painting से मोड चुनने पर वह
settings.json में लिख दिया जाता था — ऐसी फ़ाइल जो कई प्रोजेक्ट्स में वर्शन कंट्रोल में रहती है, और जिसे मिनट में दो बार दबाए जाने वाले बटन ने बदल दिया। अब यह चुनाव सत्र भर जीता है, और सेटिंग्स में आपने जो मोड लिखा है वह विंडो खुलने पर अब भी जीतता है।
Coverage Studio for Visual Studio 1.2026.21 — क्या कोई टेस्ट पकड़ेगा? कैरेट पर एक म्यूटेशन रन
2026-10-03
जोड़ा गया
- Run Mutation Tests Here. कवरेज बताती है कि पंक्ति चली; म्यूटेशन टूल बताता है कि उसके ग़लत होने पर कोई टेस्ट उसे पकड़ता या नहीं। कैरेट जिस फ़ंक्शन में है — या चुनी हुई पंक्तियाँ, या फ़ाइल — फ़ोल्डर के रनर को वही म्यूटेट करने को कहा जाता है, और उसकी रिपोर्ट स्क्रीन पर मौजूद कवरेज के साथ लोड होती है: C# के लिए Stryker.NET, JavaScript और TypeScript के लिए StrykerJS, Java के लिए Maven के साथ PIT। पूरे प्रोजेक्ट का म्यूटेशन रन एक घंटा लेता है; एक फ़ंक्शन का एक मिनट।
Coverage Studio for VS Code 1.2026.22 — क्या कोई टेस्ट पकड़ेगा? कैरेट पर एक म्यूटेशन रन
2026-10-03
जोड़ा गया
- Run Mutation Tests Here. कवरेज बताती है कि पंक्ति चली; म्यूटेशन टूल बताता है कि उसके ग़लत होने पर कोई टेस्ट उसे पकड़ता या नहीं। कैरेट जिस फ़ंक्शन में है — या चुनी हुई पंक्तियाँ, या फ़ाइल — फ़ोल्डर के रनर को वही म्यूटेट करने को कहा जाता है, और उसकी रिपोर्ट स्क्रीन पर मौजूद कवरेज के साथ लोड होती है: C# के लिए Stryker.NET, JavaScript और TypeScript के लिए StrykerJS, Java के लिए Maven के साथ PIT। पूरे प्रोजेक्ट का म्यूटेशन रन एक घंटा लेता है; एक फ़ंक्शन का एक मिनट।
Coverage Studio for Visual Studio 1.2026.20 — ख़ुद ऐप, कवरेज के साथ
2026-10-03
जोड़ा गया
- Run App with Coverage… वह मापता है जहाँ तक कोई व्यक्ति पहुँचता है, केवल वह नहीं जो टेस्ट करते हैं: फ़ोल्डर का .NET ऐप Microsoft के
dotnet-coverage के तहत, अपने अलग कंसोल में शुरू होता है, और बंद किए जाने तक चलता है। ऐप में जहाँ-जहाँ से गुज़रा गया वह फिर किसी भी रन की तरह लोड होता है, और कवरेज सेशन में टेस्टों के चलाए हुए में जुड़ जाता है। इसके लिए dotnet tool install --global dotnet-coverage चाहिए।
Coverage Studio for VS Code 1.2026.21 — ख़ुद ऐप, कवरेज के साथ
2026-10-03
जोड़ा गया
- Run App with Coverage… वह मापता है जहाँ तक कोई व्यक्ति पहुँचता है, केवल वह नहीं जो टेस्ट करते हैं: फ़ोल्डर का .NET ऐप Microsoft के
dotnet-coverage के तहत, अपने अलग कंसोल में शुरू होता है, और बंद किए जाने तक चलता है। ऐप में जहाँ-जहाँ से गुज़रा गया वह फिर किसी भी रन की तरह लोड होता है, और कवरेज सेशन में टेस्टों के चलाए हुए में जुड़ जाता है। इसके लिए dotnet tool install --global dotnet-coverage चाहिए।
Coverage Studio for Visual Studio 1.2026.19 — GitHub और GitLab के ज़िप आर्टिफ़ैक्ट
2026-10-03
जोड़ा गया
- ज़िप आर्टिफ़ैक्ट से CI बेसलाइन। GitHub और GitLab आर्टिफ़ैक्ट को आर्काइव के रूप में प्रकाशित करते हैं। जहाँ
baseline.report ऐसे किसी आर्काइव का नाम देता है — URL, या डिस्क पर एक ज़िप — वहाँ वह खोला जाता है और उसके भीतर की रिपोर्ट रखी जाती है: वह सदस्य जिसका नाम # के बाद दिया गया है (ci/artifact.zip#coverage/lcov.info), वरना आर्काइव की इकलौती फ़ाइल, वरना उसकी वह इकलौती फ़ाइल जो रिपोर्ट जैसी दिखती है।
Coverage Studio for VS Code 1.2026.20 — GitHub और GitLab के ज़िप आर्टिफ़ैक्ट
2026-10-03
जोड़ा गया
- GitHub और GitLab के ज़िप आर्टिफ़ैक्ट। CI एक आर्टिफ़ैक्ट प्रकाशित करता है, और आर्टिफ़ैक्ट एक आर्काइव होता है। लाया गया ज़िप अब खोला जाता है और उसके भीतर की रिपोर्ट रखी जाती है — वह सदस्य जिसका नाम URL के
# के बाद दिया गया है (…/zip#coverage/lcov.info), वरना आर्काइव की इकलौती फ़ाइल, वरना उसकी वह इकलौती फ़ाइल जो रिपोर्ट जैसी दिखती है। coverageFile.paths के URL के लिए, baseline.report के लिए, और उस बेसलाइन के लिए जो डिस्क पर एक ज़िप है।
ठीक किया गया
- Cobertura बेसलाइन की फ़ाइलें रिपोर्ट के अपने
<source> के नीचे नहीं मिलती थीं। तुलना एक बदले हुए योग के बगल में 0 file(s) moved कहती थी। अब वही रूट इस्तेमाल होता है जिसका नाम रिपोर्ट देती है, जैसे लोड की गई रिपोर्ट के लिए होता है।
Coverage Studio for Visual Studio 1.2026.18 — लेखक और तारीख़ के हिसाब से नया कोड
2026-10-03
जोड़ा गया
- लेखक और तारीख़ के हिसाब से नया कोड। नया कोड वे पंक्तियाँ थीं जो किसी git ref के मुक़ाबले बदलीं। दो सेटिंग्स वह पूछती हैं जो ref नहीं पूछ सकता:
fuciniCoverage.gitDiff.author — एक व्यक्ति की लिखी पंक्तियाँ — और fuciniCoverage.gitDiff.since — किसी दिन के बाद से लिखी गई पंक्तियाँ। दोनों git blame से पढ़ी जाती हैं और डिफ़ कवरेज तथा नए कोड के गेट पर लागू होती हैं।
Coverage Studio for VS Code 1.2026.19 — लेखक और तारीख़ के हिसाब से नया कोड
2026-10-03
जोड़ा गया
- लेखक और तारीख़ के हिसाब से नया कोड। नया कोड वे पंक्तियाँ थीं जो किसी git ref के मुक़ाबले बदलीं। दो सेटिंग्स वह पूछती हैं जो ref नहीं पूछ सकता:
fuciniCoverage.gitDiff.author — एक व्यक्ति की लिखी पंक्तियाँ — और fuciniCoverage.gitDiff.since — किसी दिन के बाद से लिखी गई पंक्तियाँ। दोनों git blame से पढ़ी जाती हैं और डिफ़ कवरेज तथा नए कोड के गेट पर लागू होती हैं।
Coverage Studio for 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] फ़ंक्शन क्रेट में अपने पथ से चलता है, --exact; mod में हो तो उस मॉड्यूल के टेस्ट; tests/ के नीचे का इंटीग्रेशन टेस्ट, अपनी ही बाइनरी में।
Coverage Studio for 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] फ़ंक्शन क्रेट में अपने पथ से चलता है, --exact; mod में हो तो उस मॉड्यूल के टेस्ट; tests/ के नीचे का इंटीग्रेशन टेस्ट, अपनी ही बाइनरी में।
Coverage Studio for Visual Studio 1.2026.16 — GCC 14 की कंडीशन कवरेज, पंक्ति-दर-पंक्ति
2026-10-02
जोड़ा गया
- GCC 14 की कंडीशन कवरेज, पंक्ति-दर-पंक्ति।
-fcondition-coverage प्रति फ़ाइल दो गिनतियों के रूप में पढ़ा जाता था; अब हर कंडीशन अपनी पंक्ति पर चिह्नित होती है और होवर में नाम से बताई जाती है — कंडीशन 1 कभी सत्य नहीं हुई, कंडीशन 0 कभी न सत्य हुई न असत्य — gcov के JSON से और उसकी टेक्स्ट लिस्टिंग से। threshold.conditions इस पर गेट लगाता है, Copy Coverage Summary में Conditions कॉलम है, badge.metric conditions लेता है, और सर्च conditions < 80 लेती है।
ठीक किया गया
- फ़ंक्शन का ब्रांच आँकड़ा उसकी कंडीशनों के नतीजे भी गिनता था।
branches 8/12, जहाँ टूल ने 6 में से 4 कहा था। कंडीशन वहाँ छोड़ दी जाती हैं, जैसे फ़ाइल और रन के आँकड़ों में।
Coverage Studio for VS Code 1.2026.17 — GCC 14 की कंडीशन कवरेज, पंक्ति-दर-पंक्ति
2026-10-02
जोड़ा गया
- GCC 14 की कंडीशन कवरेज, पंक्ति-दर-पंक्ति।
-fcondition-coverage प्रति फ़ाइल दो गिनतियों के रूप में पढ़ा जाता था; अब हर कंडीशन अपनी पंक्ति पर चिह्नित होती है और होवर में नाम से बताई जाती है — कंडीशन 1 कभी सत्य नहीं हुई, कंडीशन 0 कभी न सत्य हुई न असत्य — gcov के JSON से और उसकी टेक्स्ट लिस्टिंग से। threshold.conditions इस पर गेट लगाता है, Copy Coverage Summary में Conditions कॉलम है, badge.metric conditions लेता है, और सर्च conditions < 80 लेती है।
ठीक किया गया
- फ़ंक्शन का ब्रांच आँकड़ा उसकी कंडीशनों के नतीजे भी गिनता था।
branches 8/12, जहाँ टूल ने 6 में से 4 कहा था। कंडीशन वहाँ छोड़ दी जाती हैं, जैसे फ़ाइल और रन के आँकड़ों में।
Coverage Studio for Visual Studio 1.2026.15 — Coverage व्यू एडिटर के साथ चलता है
2026-10-02
जोड़ा गया
- Coverage व्यू एडिटर के साथ चलता है। जो फ़ाइल आप देख रहे हैं वह ट्री में हाइलाइट होती है, उसके ऊपर के फ़ोल्डर खुल जाते हैं और उसकी पंक्ति स्क्रॉल होकर सामने आ जाती है।
fuciniCoverage.coverageView.followActiveEditor इसे बंद करता है।
Coverage Studio for VS Code 1.2026.16 — Coverage व्यू एडिटर के साथ चलता है
2026-10-02
जोड़ा गया
- Coverage व्यू एडिटर के साथ चलता है। जो फ़ाइल आप देख रहे हैं वह ट्री में हाइलाइट होती है, उसके ऊपर के फ़ोल्डर खुल जाते हैं और उसकी पंक्ति स्क्रॉल होकर सामने आ जाती है।
fuciniCoverage.coverageView.followActiveEditor इसे बंद करता है।
Coverage Studio for 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 Cobertura पंक्ति का branch एट्रिब्यूट True लिखते हैं, और केवल छोटे अक्षरों वाला true पढ़ा जाता था — इसलिए ऐसी रिपोर्ट का हर निर्णय छूट जाता था। अब दोनों वर्तनियाँ पढ़ी जाती हैं। आँकड़े बदलते हैं: .NET प्रोजेक्ट की ब्रांच कवरेज वहाँ दिखती है जहाँ पहले कुछ नहीं था, और उसके साथ उसका स्कोर भी। - कई ट्री से मिलाकर बनी Cobertura रिपोर्ट को केवल पहले ट्री की फ़ाइलें मिलती थीं। ऐसी रिपोर्ट हर ट्री के लिए एक
<source> का नाम देती है; अब हर एक को आज़माया जाता है, रिपोर्ट के क्रम में।
Coverage Studio for 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 Cobertura पंक्ति का branch एट्रिब्यूट True लिखते हैं, और केवल छोटे अक्षरों वाला true पढ़ा जाता था — इसलिए ऐसी रिपोर्ट का हर निर्णय छूट जाता था। अब दोनों वर्तनियाँ पढ़ी जाती हैं। आँकड़े बदलते हैं: .NET प्रोजेक्ट की ब्रांच कवरेज वहाँ दिखती है जहाँ पहले कुछ नहीं था, और उसके साथ उसका स्कोर भी। - कई ट्री से मिलाकर बनी Cobertura रिपोर्ट को केवल पहले ट्री की फ़ाइलें मिलती थीं। ऐसी रिपोर्ट हर ट्री के लिए एक
<source> का नाम देती है; अब हर एक को आज़माया जाता है, रिपोर्ट के क्रम में।
Coverage Studio for Visual Studio 1.2026.13 — सबसे कम टेस्ट जो फिर भी हर पंक्ति चलाते हैं
2026-10-01
जोड़ा गया
- Show Minimal Test Set… वे सबसे कम टेस्ट खोजता है जो फिर भी हर वह पंक्ति चलाते हैं जिसे सुइट चलाता है, और उनके नीचे वे टेस्ट सूचीबद्ध करता है जो अपनी ओर से कोई पंक्ति नहीं जोड़ते। कमिट से पहले के तेज़ रन के लिए, और उसके लिए जो सुइट की छँटाई करता है — यह याद दिलाते हुए कि पंक्तियों के हिसाब से फ़ालतू होना, टेस्ट जो जाँचता है उसके हिसाब से फ़ालतू होना नहीं है।
Coverage Studio for VS Code 1.2026.14 — सबसे कम टेस्ट जो फिर भी हर पंक्ति चलाते हैं
2026-10-01
जोड़ा गया
- Show Minimal Test Set… वे सबसे कम टेस्ट खोजता है जो फिर भी हर वह पंक्ति चलाते हैं जिसे सुइट चलाता है, और उनके नीचे वे टेस्ट सूचीबद्ध करता है जो अपनी ओर से कोई पंक्ति नहीं जोड़ते। कमिट से पहले के तेज़ रन के लिए, और उसके लिए जो सुइट की छँटाई करता है — यह याद दिलाते हुए कि पंक्तियों के हिसाब से फ़ालतू होना, टेस्ट जो जाँचता है उसके हिसाब से फ़ालतू होना नहीं है।
Coverage Studio for 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 for 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 for 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… उन पंक्तियों की सूची देता है जिनकी कवरेज बदली जबकि उन्हें किसी ने संपादित नहीं किया — वह कोड जो इसलिए चलना बंद हुआ कि कोई टेस्ट हट गया, या इसलिए कि उससे पहले की कोई ब्रांच अब जल्दी लौट जाती है। जहाँ
baseline.report किसी CI बेसलाइन का नाम देता है वहाँ उसके मुक़ाबले, वरना पिछले रन के मुक़ाबले।
Coverage Studio for 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… उन पंक्तियों की सूची देता है जिनकी कवरेज बदली जबकि उन्हें किसी ने संपादित नहीं किया — वह कोड जो इसलिए चलना बंद हुआ कि कोई टेस्ट हट गया, या इसलिए कि उससे पहले की कोई ब्रांच अब जल्दी लौट जाती है। जहाँ
baseline.report किसी CI बेसलाइन का नाम देता है वहाँ उसके मुक़ाबले, वरना पिछले रन के मुक़ाबले।
Coverage Studio for Visual Studio 1.2026.10 — केवल वे टेस्ट चलाएँ जिन्हें आपके बदलाव छूते हैं
2026-10-01
जोड़ा गया
- Run Tests Affected by My Changes… उन टेस्टों की सूची देता है जिन्होंने कोई ऐसी पंक्ति चलाई जिसे वर्किंग ट्री
fuciniCoverage.testImpact.baseRef (डिफ़ॉल्ट रूप से HEAD) के मुक़ाबले बदलता है, सबसे पहले वह जिसने बदलाव का सबसे बड़ा हिस्सा चलाया। कोई टेस्ट चुनने पर वह खुलता है; जहाँ रिपोर्टें प्रति-टेस्ट रन (testRun.perTest) से आई हों, वहाँ पहली प्रविष्टि केवल उन्हीं टेस्टों को चलाती है।
ठीक किया गया
testRun.skipWhenTestsFail रन के बाद भी लागू रहता है। लाल रन की लिखी रिपोर्टें डिस्क पर रह जाती थीं, जहाँ वॉचर उन्हें पल भर बाद लोड कर लेता था। अब वे हटा दी जाती हैं।- TRX लॉगर कवरेज रिपोर्ट की जो प्रति बनाता है, उसे कभी ट्रेसफ़ाइल नहीं समझा जाता।
Coverage Studio for VS Code 1.2026.11 — केवल वे टेस्ट चलाएँ जिन्हें आपके बदलाव छूते हैं
2026-10-01
जोड़ा गया
- Run Tests Affected by My Changes… उन टेस्टों की सूची देता है जिन्होंने कोई ऐसी पंक्ति चलाई जिसे वर्किंग ट्री
fuciniCoverage.testImpact.baseRef (डिफ़ॉल्ट रूप से HEAD) के मुक़ाबले बदलता है, सबसे पहले वह जिसने बदलाव का सबसे बड़ा हिस्सा चलाया। कोई टेस्ट चुनने पर वह खुलता है; जहाँ रिपोर्टें प्रति-टेस्ट रन (testRun.perTest) से आई हों, वहाँ पहली प्रविष्टि केवल उन्हीं टेस्टों को चलाती है।
ठीक किया गया
testRun.skipWhenTestsFail रन के बाद भी लागू रहता है। लाल रन की लिखी रिपोर्टें डिस्क पर रह जाती थीं, जहाँ वॉचर उन्हें पल भर बाद लोड कर लेता था। अब वे हटा दी जाती हैं।- TRX लॉगर कवरेज रिपोर्ट की जो प्रति बनाता है, उसे कभी ट्रेसफ़ाइल नहीं समझा जाता।
Coverage Studio for 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 की अपनी कोड कवरेज, लोड की हुई। Visual Studio का Analyze Code Coverage जो
.coverage फ़ाइल लिखता है, वह dotnet-coverage से कन्वर्ट होकर अपने आप लोड होती है: Coverage Studio बिल्ट-इन कलेक्टर से मुक़ाबला करने के बजाय उसी को आधार बनाता है।
Coverage Studio for 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 for Visual Studio 1.2026.8 — रीलोड जो आपकी खोज, आपका सेशन और आपका पिछला रन बनाए रखते हैं
2026-09-30
ठीक किया गया
- कवरेज के रीलोड होने पर सर्च बॉक्स अपनी क्वेरी और अपना फ़ोकस बनाए रखता है। हर रीलोड उसे ख़ाली कर देता था, अक्सर तब जब क्वेरी अभी टाइप ही हो रही होती थी।
< 80% जैसी क्वेरी उन रिस्क हॉटस्पॉट को भी रखती है जो उससे मेल खाते हैं। - कवरेज सेशन अब एक ही रन को दो बार नहीं गिनता। बिना बदली रिपोर्टों का हर रीलोड उन्हें फिर जोड़ देता था, और हर हिट गिनती दोगुनी हो जाती थी। सेशन अब रिपोर्टों के हर सेट को एक बार रखता है।
- CI बेसलाइन अब लोड को नहीं रोकती। पहले लोड दिखाया जाता है और तुलना उसके बाद आती है। बेसलाइन एक बार तैयार की जाती है और तब तक रखी जाती है जब तक उसकी रिपोर्ट और सेटिंग्स वही रहें, और जब URL तक पहुँचा न जा सके तो पहले लाई गई प्रति इस्तेमाल होती है।
- “पिछले रन के बाद से” बिना बदली रिपोर्टों के रीलोड के बाद भी बना रहता है। सेटिंग्स में बदलाव या रिफ़्रेश स्क्रीन पर मौजूद रन को ही उसका अपना पिछला रन बना देता था, और उससे पहले वाले रन के बाद का हर बदलाव ग़ायब हो जाता था। इस तरह दोबारा पढ़ा गया रन अब इतिहास में भी नहीं रखा जाता।
- एक बार में एक ही लोड। एक साथ माँगे गए दो रीलोड साथ-साथ चलते थे, और धीमा वाला जीत जाता था। लोड के दौरान माँगे गए रीलोड अब उसके बाद एक ही लोड बन जाते हैं।
- HTTP से आने वाली CI बेसलाइन वैसे ही लाई जाती है जैसे VS Code में। एक क्लाइंट, आख़िरी प्रति उस समय के लिए रखी हुई जब सर्वर तक पहुँचा न जा सके, और
remote.headers केवल उसी पते पर भेजे जाते हैं जिसके लिए वे लिखे गए थे — सादे HTTP पर कभी नहीं। - जिस कमांड का काम विफल होता है, वह यह बताती है। किसी कमांड या टाइमर की विफलता निगल ली जाती थी; अब वह Output विंडो में एक पंक्ति है।
- UI थ्रेड पर कम काम। फ़ाइल वॉचर बैकग्राउंड में बनते हैं, Error List की प्रविष्टियाँ हर लोड पर एक बार निकाली जाती हैं, और लॉग पंक्ति-दर-पंक्ति के बजाय खेपों में लिखा जाता है।
- Visual Studio की दो विंडो अब रन इतिहास को नुक़सान नहीं पहुँचातीं। उसका इंडेक्स एक ऐसे लॉक के तहत एक ही चरण में बदला जाता है जिसे दोनों साझा करती हैं, और खो जाने पर रनों से दोबारा बनाया जाता है।
- Run Native Project with Coverage प्रोजेक्ट का अपना प्लैटफ़ॉर्म बिल्ड करता है, और
llvm-cov व llvm-profdata कंपाइलर के LLVM से, जोड़ी के रूप में लेता है। - Coverage विंडो के चेतावनी, त्रुटि और पास के रंग लाइट थीम के अनुसार भी चलते हैं, जैसे डार्क थीम के अनुसार।
- बिना सेव किए बदलावों के साथ खुली सेटिंग्स फ़ाइल ओवरराइट नहीं की जाती। सेटिंग्स पेज कहता है कि पहले उसे सेव करें।
बदला गया
- आपकी चुनी हुई कवरेज फ़ाइल, और टेस्ट रन की लिखी रिपोर्ट, आपके लिए याद रखी जाती हैं,
.vscode/settings.json में लिखे जाने के बजाय। वह फ़ाइल अक्सर कमिट की जाती है, इसलिए टेस्ट रन रिपॉज़िटरी में ऐसा बदलाव छोड़ जाता था जो किसी ने माँगा नहीं था। coverageFile.paths में पहले से मौजूद पथ काम करते रहते हैं।
Coverage Studio for VS Code 1.2026.9 — रीलोड जो आपकी खोज, आपका सेशन और आपका पिछला रन बनाए रखते हैं
2026-09-30
ठीक किया गया
- कवरेज के रीलोड होने पर सर्च बॉक्स अपनी क्वेरी और अपना फ़ोकस बनाए रखता है। हर रीलोड उसे ख़ाली कर देता था, अक्सर तब जब क्वेरी अभी टाइप ही हो रही होती थी।
< 80% जैसी क्वेरी उन रिस्क हॉटस्पॉट को भी रखती है जो उससे मेल खाते हैं। - कवरेज सेशन अब एक ही रन को दो बार नहीं गिनता। बिना बदली रिपोर्टों का हर रीलोड उन्हें फिर जोड़ देता था, और हर हिट गिनती दोगुनी हो जाती थी। सेशन अब रिपोर्टों के हर सेट को एक बार रखता है।
- CI बेसलाइन अब लोड को नहीं रोकती। पहले लोड दिखाया जाता है और तुलना उसके बाद आती है। बेसलाइन एक बार तैयार की जाती है और तब तक रखी जाती है जब तक उसकी रिपोर्ट और सेटिंग्स वही रहें, और जब URL तक पहुँचा न जा सके तो पहले लाई गई प्रति इस्तेमाल होती है।
- बदली हुई रिपोर्ट फ़ाइलों की जाँच एक बार में एक ही पास चलाती है। धीमी नेटवर्क ड्राइव पर दो पास एक ही बदलाव देखते थे, और कवरेज दो बार लोड होती थी।
- “पिछले रन के बाद से” बिना बदली रिपोर्टों के रीलोड के बाद भी बना रहता है। सेटिंग्स में बदलाव या रिफ़्रेश स्क्रीन पर मौजूद रन को ही उसका अपना पिछला रन बना देता था, और उससे पहले वाले रन के बाद का हर बदलाव ग़ायब हो जाता था। इस तरह दोबारा पढ़ा गया रन अब इतिहास में भी नहीं रखा जाता।
बदला गया
- आपकी चुनी हुई कवरेज फ़ाइल, और टेस्ट रन की लिखी रिपोर्ट, आपके लिए याद रखी जाती हैं,
.vscode/settings.json में लिखे जाने के बजाय। वह फ़ाइल अक्सर कमिट की जाती है, इसलिए टेस्ट रन रिपॉज़िटरी में ऐसा बदलाव छोड़ जाता था जो किसी ने माँगा नहीं था। coverageFile.paths में पहले से मौजूद पथ काम करते रहते हैं।
Coverage Studio for 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# की टेस्ट फ़ाइलें पढ़ता है।
Public Sub के ऊपर <Fact>, और let या member के ऊपर [<Fact>], कभी पहचाने नहीं जाते थे। - टेस्ट रन रद्द करने पर उसकी शुरू की हुई हर प्रोसेस ख़त्म होती है। केवल शेल ख़त्म होता था, और
dotnet test उसके पीछे चलता रहता था। Visual Studio बंद करने पर भी रन रद्द होता है। - सेव के बाद के रन के दौरान टाइप करने से निशान अब नहीं खिसकते। वे उसी टेक्स्ट से बँधे रहते हैं जिसे रन ने मापा।
- नेटवर्क शेयर पर रखा सॉल्यूशन अपने टेस्ट वहीं चलाता है। रन
C:\Windows में शुरू होता था, क्योंकि कमांड शेल \\server\share पथ को अपने फ़ोल्डर के रूप में नहीं लेता।
Coverage Studio for 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# की टेस्ट फ़ाइलें पढ़ता है।
Public Sub के ऊपर <Fact>, और let या member के ऊपर [<Fact>], कभी पहचाने नहीं जाते थे। - जो टेस्ट टास्क कोई प्रोसेस शुरू किए बिना ख़त्म हो जाए, वह अब Run Tests with Coverage को हमेशा के लिए प्रतीक्षा में नहीं छोड़ता। वह ख़त्म होता है, और बताता है कि रन ने कुछ नहीं लिखा।
Coverage Studio for Visual Studio 1.2026.6 — किन टेस्टों ने पंक्ति चलाई, हर सेव के बाद कवरेज और CI बेसलाइन
2026-09-29
जोड़ा गया
- किन टेस्टों ने यह पंक्ति चलाई। जहाँ रिपोर्ट इसे दर्ज करती है —
--show-contexts के साथ coverage.py, 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 नोड id — और जो लिखा गया उसे लोड करता है। टेस्ट टेक्स्ट से पढ़ा जाता है, इसलिए यह बिना किसी लैंग्वेज सर्विस के 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. Tools मेन्यू से स्टार्टअप C++ प्रोजेक्ट: ClangCL प्रोजेक्ट clang के कवरेज इंस्ट्रुमेंटेशन के साथ
coverage/native/ में दोबारा बनता है, चलता है और उसकी रिपोर्ट लोड होती है; कोई भी दूसरा टूलसेट OpenCppCoverage के तहत चलता है जहाँ वह इंस्टॉल हो, और जहाँ दोनों में से कुछ भी संभव न हो, एक वाक्य बताता है कि क्या इंस्टॉल करना है।
- कवरेज सेशन और ट्रेंड। Start Coverage Session — और उसके बाद लोड हुआ हर रन पिछले रनों में जुड़ता है: पंक्तियाँ, ब्रांच और फ़ंक्शन सभी, जो किसी भी रन ने चलाया वह कवर माना जाता है — ताकि यूनिट टेस्ट, इंटीग्रेशन टेस्ट और ऐप्लिकेशन में एक चक्कर मिलकर दिखाएँ कि वे कहाँ तक पहुँचे। टूलबार के नीचे सेव किए गए इतिहास की लाइन कवरेज ट्रेंड के रूप में बनती है, हर रन का एक बिंदु।
- Compare Two History Runs, VS Code की तरह: सहेजे गए दो रन चुनें, और उनके बीच बदली फ़ाइलें पुराने से नए क्रम में दिखती हैं, चाहे पहले कोई भी चुना गया हो।
- Compare with CI Baseline.
baseline.report उस रिपोर्ट का नाम देता है जिसे आपकी मुख्य ब्रांच का बिल्ड प्रकाशित करता है — remote.headers के साथ लाया गया URL, या डाउनलोड की गई फ़ाइल — और हर लोड उसके सामने मापा जाता है: स्टेटस बार का कार्ड बताता है कि यह रन कहाँ खड़ा है, और Compare with CI Baseline बदली हुई फ़ाइलें दिखाता है। बेसलाइन उसी इग्नोर सूची से गुज़रती है जिससे रन, ताकि योगों की तुलना बराबरी पर हो।
- इन्हें कहाँ पाएँ। नई कमांड Tools > Coverage Studio में और एडिटर के कॉन्टेक्स्ट मेन्यू में हैं; Show Tests That Ran This Line Ctrl+Shift+U, T से भी मिलती है, और Exclude Selection from Coverage एक बल्ब ऐक्शन है।
ठीक किया गया
- टेस्ट रन की रिपोर्ट में अब आपका यूज़र और मशीन नाम नहीं रहता। Microsoft का Code Coverage कलेक्टर अपनी रिपोर्ट का नाम
<user>_<machine>_<stamp>.cobertura.xml रखता है, और वह नाम ट्री में और उसके हर स्क्रीनशॉट में दिखता था; अब लोड होने से पहले रिपोर्ट का नाम बदलकर coverage.cobertura.xml कर दिया जाता है।
- किसी जनरेट की गई फ़ाइल के बारे में कहा जाता था कि उसे
fuciniCoverage.ignore ने छोड़ा। हर छोड़ी गई फ़ाइल अब उस सेटिंग के तहत गिनी जाती है जिसने उसे छोड़ा — ignore, ignore.generated या ignore.namespaces — ताकि दिखाया गया नाम वही हो जिसे बदलना है।
- हर टेस्ट के लिए लिखी गई lcov ट्रेसफ़ाइल प्रति फ़ाइल एक रिकॉर्ड के रूप में पढ़ी जाती है, टेस्ट सेक्शन जोड़कर, जैसे VS Code उसे पढ़ता है; पहले हर टेस्ट का रिकॉर्ड एक अलग फ़ाइल होता था।
- लॉग बताता है कि पार्सर ने क्या छोड़ा। वे फ़ाइलें जिनमें पार्सर को इंस्ट्रुमेंट करने लायक कुछ नहीं मिला (
FUCINI_PARSE_030) और रिपोर्ट का अपनी कमियों का अपना ब्योरा (FUCINI_PARSE_031, OpenCover का MissingPdb) लॉग में लिखे जाते हैं, जैसे VS Code उन्हें लिखता है।
- मैक्रो वाला हेडर अब ट्री में 100% पर नहीं दिखता। llvm-cov और gcov किसी मैक्रो के उपयोग को उसे परिभाषित करने वाली पंक्तियों पर गिनते हैं; बाहर की गई पंक्तियों पर मौजूद ब्रांच और फ़ंक्शन अब उन पंक्तियों के साथ ही हटते हैं, और जिस फ़ाइल में मापने लायक कुछ न बचे उसे रन से हटाकर आउटपुट में नाम से बताया जाता है (
FUCINI_EXCLUDE_001)।
- असमर्थित फ़ॉर्मेट कहकर ठुकराई गई पाँच रिपोर्टें पहचानी जाती हैं। Kover का JaCoCo XML, Stryker.NET रिपोर्ट, NCover रिपोर्ट, पुराना SimpleCov resultset और कई खाली फ़ाइलों वाली SonarQube रिपोर्ट अब अपनी शुरुआत में मौजूद चीज़ों से पहचानी जाती हैं। जिस Clover या SonarQube रिपोर्ट के पथों में
cobertura शब्द हो, वह अब Cobertura की तरह नहीं पढ़ी जाती।
- आंकड़े जो उन्हें लिखने वाले टूल से मेल खाते हैं। MC/DC बिल्ड का ब्रांच आंकड़ा
llvm-cov report से मेल खाता है; LCOV 2 की एक्सेप्शन ब्रांच (BRDA:12,e0,1,3) गिनी जाती हैं; llvm-cov फ़ंक्शन केवल उसी फ़ाइल में घोषित होता है जो उसे परिभाषित करती है; दो टेस्ट बाइनरी द्वारा सूचीबद्ध Go ब्लॉक अपनी गिनतियाँ जोड़ता है; दो क्लासों द्वारा रिपोर्ट किया गया Cobertura निर्णय और दो बार सूचीबद्ध JaCoCo पंक्ति अपनी सभी भुजाएँ एक बार रखते हैं।
- छोटे सुधार। लिखते-लिखते कटी ट्रेसफ़ाइल अब कोई फ़ाइल नहीं खोती; कई
.gcda फ़ाइलों पर gcov -t हर एक की अलग फ़ाइल देता है, टेम्पलेट इंस्टैंस एक बार पढ़े जाते हैं और gcov -H की 1.20k जैसी गिनतियाँ बनी रहती हैं; GNATcoverage फ़ाइलें अब सभी अपनी कवरेज के बाद बदली हुई नहीं बताई जातीं; लंबित Stryker म्यूटेंट या बाधित PIT रन अब स्कोर के ख़िलाफ़ नहीं गिने जाते।
- सेटिंग्स फ़ाइल में हाथ से किया गया बदलाव सेव होते ही लागू होता है, जैसे VS Code सेटिंग बदलाव लागू करता है।
Coverage Studio for VS Code 1.2026.7 — किन टेस्टों ने पंक्ति चलाई, हर सेव के बाद कवरेज और CI बेसलाइन
2026-09-29
जोड़ा गया
- किन टेस्टों ने यह पंक्ति चलाई। जहाँ रिपोर्ट इसे दर्ज करती है —
--show-contexts के साथ coverage.py, 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 नोड id — और जो लिखा गया उसे लोड करता है। टेस्ट टेक्स्ट से पढ़ा जाता है, इसलिए यह बिना किसी लैंग्वेज सर्विस के 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 उस रिपोर्ट का नाम देता है जिसे आपकी मुख्य ब्रांच का बिल्ड प्रकाशित करता है — remote.headers के साथ लाया गया URL, या डाउनलोड की गई फ़ाइल — और हर लोड उसके सामने मापा जाता है: स्टेटस बार का कार्ड बताता है कि यह रन कहाँ खड़ा है, और Compare with CI Baseline बदली हुई फ़ाइलें दिखाता है। बेसलाइन उसी इग्नोर सूची से गुज़रती है जिससे रन, ताकि योगों की तुलना बराबरी पर हो।
ठीक किया गया
- टेस्ट रन की रिपोर्ट में अब आपका यूज़र और मशीन नाम नहीं रहता। Microsoft का Code Coverage कलेक्टर अपनी रिपोर्ट का नाम
<user>_<machine>_<stamp>.cobertura.xml रखता है, और वह नाम ट्री में और उसके हर स्क्रीनशॉट में दिखता था; अब लोड होने से पहले रिपोर्ट का नाम बदलकर coverage.cobertura.xml कर दिया जाता है।
- टर्मिनल PowerShell होने पर Windows पर टेस्ट रन विफल होता था।
Code Coverage;Format=cobertura के आसपास के उद्धरण चिह्न pwsh तक पहुँचते-पहुँचते खो जाते थे, जो ; को कमांड का अंत पढ़ता था; अब रेसिपी टर्मिनल को शब्द-दर-शब्द दी जाती है और जिस शेल को वह शुरू करता है उसके लिए उद्धृत की जाती है।
- किसी जनरेट की गई फ़ाइल के बारे में कहा जाता था कि उसे
fuciniCoverage.ignore ने छोड़ा। हर छोड़ी गई फ़ाइल अब उस सेटिंग के तहत गिनी जाती है जिसने उसे छोड़ा — ignore, ignore.generated या ignore.namespaces — ताकि दिखाया गया नाम वही हो जिसे बदलना है।
- मैक्रो वाला हेडर अब ट्री में 100% पर नहीं दिखता। llvm-cov और gcov किसी मैक्रो के उपयोग को उसे परिभाषित करने वाली पंक्तियों पर गिनते हैं; बाहर की गई पंक्तियों पर मौजूद ब्रांच और फ़ंक्शन अब उन पंक्तियों के साथ ही हटते हैं, और जिस फ़ाइल में मापने लायक कुछ न बचे उसे रन से हटाकर आउटपुट में नाम से बताया जाता है (
FUCINI_EXCLUDE_001)।
- असमर्थित फ़ॉर्मेट कहकर ठुकराई गई पाँच रिपोर्टें पहचानी जाती हैं। Kover का JaCoCo XML, Stryker.NET रिपोर्ट, NCover रिपोर्ट, पुराना SimpleCov resultset और कई खाली फ़ाइलों वाली SonarQube रिपोर्ट अब अपनी शुरुआत में मौजूद चीज़ों से पहचानी जाती हैं। जिस Clover या SonarQube रिपोर्ट के पथों में
cobertura शब्द हो, वह अब Cobertura की तरह नहीं पढ़ी जाती।
- आंकड़े जो उन्हें लिखने वाले टूल से मेल खाते हैं। MC/DC बिल्ड का ब्रांच आंकड़ा
llvm-cov report से मेल खाता है; LCOV 2 की एक्सेप्शन ब्रांच (BRDA:12,e0,1,3) गिनी जाती हैं; llvm-cov फ़ंक्शन केवल उसी फ़ाइल में घोषित होता है जो उसे परिभाषित करती है; दो टेस्ट बाइनरी द्वारा सूचीबद्ध Go ब्लॉक अपनी गिनतियाँ जोड़ता है; दो क्लासों द्वारा रिपोर्ट किया गया Cobertura निर्णय और दो बार सूचीबद्ध JaCoCo पंक्ति अपनी सभी भुजाएँ एक बार रखते हैं।
- छोटे सुधार। लिखते-लिखते कटी ट्रेसफ़ाइल अब कोई फ़ाइल नहीं खोती; कई
.gcda फ़ाइलों पर gcov -t हर एक की अलग फ़ाइल देता है, टेम्पलेट इंस्टैंस एक बार पढ़े जाते हैं और gcov -H की 1.20k जैसी गिनतियाँ बनी रहती हैं; GNATcoverage फ़ाइलें अब सभी अपनी कवरेज के बाद बदली हुई नहीं बताई जातीं; लंबित Stryker म्यूटेंट या बाधित PIT रन अब स्कोर के ख़िलाफ़ नहीं गिने जाते।
बदला गया
- हर लोड पर अब
FUCINI_ENCODING_001 नहीं। बाइट-ऑर्डर मार्क के बिना रिपोर्ट UTF-8 के रूप में पढ़ी जाती है, जैसे हर टूल उसे लिखता है, और इसके बारे में कोई नोट नहीं आता।
Coverage Studio for Visual Studio 1.2026.5 — जहाँ रिपोर्ट आएगी, वहाँ निगरानी
2026-09-28
जोड़ा गया
- वाइल्डकार्ड वाली सापेक्ष प्रविष्टि किसी भी गहराई पर खोजी जाती है।
coverageFile.paths में *.lcov.info फ़ाइल को आधार फ़ोल्डर के नीचे जहाँ भी वह हो, ढूँढ लेता है — जैसा VS Code उसे हमेशा से पढ़ता आया है; निरपेक्ष प्रविष्टि — ${workspaceFolder}/build/coverage-merged/*.lcov.info, किसी भी गहराई के लिए ** — पहले की तरह ठीक वहीं देखती है जहाँ वह कहती है।
- जहाँ रिपोर्ट आएगी, वहाँ निगरानी। निगरानी उन फ़ोल्डरों पर होती है जिनका नाम सेटिंग्स लेती हैं, चाहे वहाँ अभी कोई रिपोर्ट हो या न हो: निरपेक्ष फ़ाइल का फ़ोल्डर, वाइल्डकार्ड से पहले के फ़ोल्डर — और जब पैटर्न सबफ़ोल्डरों तक पहुँचता है तो उनके नीचे का सब कुछ — और सापेक्ष वाइल्डकार्ड के लिए आधार फ़ोल्डर। बिल्ड वहाँ जो रिपोर्ट लिखता है वह अपने आप लोड होती है; उन फ़ोल्डरों की किसी और फ़ाइल में लिखे जाने को अनदेखा किया जाता है।
ठीक किया गया
- llvm-cov की JSON रिपोर्ट को असमर्थित फ़ॉर्मैट कहकर अस्वीकार कर दिया जाता था। फ़ॉर्मैट पहले 4096 अक्षरों से पहचाना जाता है, और llvm-cov अपना
"type": "llvm.coverage.json.export" मार्कर बिल्कुल अंत में लिखता है; जिस एक्सपोर्ट के पहले फ़ाइल रिकॉर्ड में बहुत-सी ब्रांचें और नेस्टेड मैक्रो विस्तार हों, उसके उस शुरुआती हिस्से में पहचानने लायक और कुछ नहीं था। ऐसी रिपोर्ट अब अपनी शुरुआत {"data":[{"files":[ से पहचानी जाती है, जो किसी और फ़ॉर्मैट में नहीं होती।
gcov --json-format के साथ भी यही। gcov फ़ाइल के फ़ंक्शन उसकी पंक्तियों से पहले लिखता है, और दर्जन भर फ़ंक्शनों वाली फ़ाइल के जाँचे गए शुरुआती हिस्से में भी कोई पंक्ति प्रविष्टि नहीं होती; अब दस्तावेज़ की अपनी gcc_version कुंजी उसे पहचानती है।
Coverage Studio for VS Code 1.2026.6 — पूरे पथ में वाइल्डकार्ड, और जहाँ रिपोर्ट आएगी वहाँ निगरानी
2026-09-28
जोड़ा गया
- निरपेक्ष
coverageFile.paths प्रविष्टि में वाइल्डकार्ड। ${workspaceFolder}/build/coverage-merged/*.lcov.info उस फ़ोल्डर की ऐसी हर फ़ाइल लोड करता है, और ** किसी भी गहराई के लिए है: पहले वाइल्डकार्ड से पहले के फ़ोल्डर खोजे जाते हैं, बाक़ी उनके नीचे का पैटर्न है — जैसा Visual Studio संस्करण ऐसी प्रविष्टि को हमेशा से पढ़ता आया है। पहले निरपेक्ष प्रविष्टि जैसी लिखी हो वैसी ही खोजी जाती थी, इसलिए तारे वाली प्रविष्टि किसी चीज़ से मेल नहीं खाती थी — और वाइल्डकार्ड होने के कारण, यह भी कभी नहीं बताया जाता था कि वह किसी चीज़ से मेल नहीं खाई। वहाँ बाद में आई रिपोर्ट वॉचर या पोल द्वारा लोड होती है, ठीक शाब्दिक प्रविष्टि की तरह; जिस वाइल्डकार्ड से कुछ मेल न खाए उसकी रिपोर्ट नहीं की जाती, क्योंकि वह किसी बिल्ड की प्रतीक्षा में हो सकता है।
ठीक किया गया
- llvm-cov की JSON रिपोर्ट को असमर्थित फ़ॉर्मैट कहकर अस्वीकार कर दिया जाता था। फ़ॉर्मैट पहले 4096 अक्षरों से पहचाना जाता है, और llvm-cov अपना
"type": "llvm.coverage.json.export" मार्कर बिल्कुल अंत में लिखता है; जिस एक्सपोर्ट के पहले फ़ाइल रिकॉर्ड में बहुत-सी ब्रांचें और नेस्टेड मैक्रो विस्तार हों, उसके उस शुरुआती हिस्से में पहचानने लायक और कुछ नहीं था। ऐसी रिपोर्ट अब अपनी शुरुआत {"data":[{"files":[ से पहचानी जाती है, जो किसी और फ़ॉर्मैट में नहीं होती।
gcov --json-format के साथ भी यही। gcov फ़ाइल के फ़ंक्शन उसकी पंक्तियों से पहले लिखता है, और दर्जन भर फ़ंक्शनों वाली फ़ाइल के जाँचे गए शुरुआती हिस्से में भी कोई पंक्ति प्रविष्टि नहीं होती; अब दस्तावेज़ की अपनी gcc_version कुंजी उसे पहचानती है।
Coverage Studio for 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 for VS Code 1.2026.5 — दो रिपोर्टें, एक जवाब, और जहाँ कवर है वहाँ हरा
2026-09-26
जोड़ा गया
- किसी फ़ाइल की रिपोर्टें चुनें या मिलाएँ।
coverageFile.sources हर फ़ाइल के लिए तय करता है कि लोड की गई कई रिपोर्टों में से कौन-सी उसकी ओर से बोलेगी — या उन्हें मिला देता है: agree किसी पंक्ति को तभी कवर गिनता है जब हर रिपोर्ट ने उसे चलाया हो, और जिन पंक्तियों पर वे असहमत हैं उन्हें टील रंग में चिह्नित करता है; union वहाँ जहाँ किसी ने भी चलाया। Coverage व्यू की किसी पंक्ति पर या खुली फ़ाइल के लिए Choose Coverage Source... आपके लिए नियम लिख देता है। सशुल्क प्लान का हिस्सा; Community पर सबसे नई रिपोर्ट तय करती है।
- लाल, एम्बर और हरा, और एक क्लिक वाला गटर मोड।
coverage मोड कवर की गई पंक्तियों को हरा रंगता है; हीटमैप के शेड सेटिंग्स हैं, सेटिंग्स पैनल में लाइव पूर्वावलोकन के साथ; स्टेटस बार का एक बटन और Alt+G गटर को बंद, अनकवर्ड, कवरेज और हीटमैप के बीच बदलते हैं।
ठीक किया गया
- स्टेटस बार में फ़ाइल का आँकड़ा वही है जो उसके कार्ड पर है। जिस मीट्रिक में कुछ नहीं था — बिना निर्णयों वाली फ़ाइल पर MC/DC — वह आइटम में 100% गिना जाता था और उसके खोले गए कार्ड पर बिल्कुल नहीं।
- केवल स्थिरांकों वाला हेडर अब 0% या 100% नहीं दिखाता।
excludeComments चालू होने पर प्रीप्रोसेसर डायरेक्टिव, टिप्पणियों की तरह, कोड नहीं गिने जाते।
Coverage Studio for Visual Studio 1.2026.3 — कोड के सिवा कुछ नहीं चुनना
2026-09-24
बदला गया
- Licence डायलॉग सिर्फ़ कोड माँगता है। चार प्लान बटन हट गए हैं: सदस्यता या आमंत्रण कोड एक पूल का नाम बताता है, और पूल अपना प्लान जानता है, इसलिए कोड से बेहतर जवाब कोई व्यक्ति दे ही नहीं सकता था — और Pro अभी भी चुना होने पर पेस्ट किया गया Business आमंत्रण गलत प्लान के कारण अस्वीकार हो जाता था। कोड पेस्ट करें और Activate दबाएँ।
Coverage Studio for VS Code 1.2026.4 — कोड के सिवा कुछ नहीं चुनना
2026-09-24
बदला गया
- Enter Subscription Code सिर्फ़ कोड माँगता है। प्लान वाला सवाल हट गया है: कोड एक पूल का नाम बताता है और पूल अपना प्लान जानता है, इसलिए आगे का काम सर्वर संभालता है और अब किसी कोड को गलत प्लान का बताकर अस्वीकार नहीं करता। ईमेल के एक-क्लिक लिंक जैसे थे वैसे ही हैं; सक्रियण ईमेल में अब "अपना प्लान चुनें" वाला चरण नहीं है, और वही कोड बिना VS Code के Coverage Studio for Visual Studio को सक्रिय करता है।
Coverage Studio for Visual Studio 1.2026.2 — हर टेस्ट रन, हर रिपोर्ट, और जो बदला
2026-09-24
जोड़ा गया
- हर टेस्ट रन के बाद कवरेज। Collect Coverage in Test Explorer… Microsoft के Cobertura कलेक्टर वाली एक
.runsettings सॉल्यूशन के बगल में रखता है — 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 पैनल VS Code API है, और 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, ग्लोबल usings, Migrations/ और obj/ के नीचे की हर चीज़ को हर टोटल, पेज और एक्सपोर्ट से हटा देता है। एक डिज़ाइनर फ़ाइल जिसे कोई टेस्ट नहीं करता, अब सॉल्यूशन का गेट नहीं छीनती।
- विफल रन पिछली अच्छी कवरेज रखता है।
testRun.skipWhenTestsFail के साथ, विफल टेस्ट के साथ समाप्त होने वाला रन कवरेज को स्क्रीन पर जैसी थी वैसी छोड़ देता है, और Output पैन में ऐसा बताता है। डिफ़ॉल्ट रूप से बंद।
बदला गया
- Test Explorer का रन अपने आप मिल जाता है। बिना कुछ कॉन्फ़िगर किए, जाने-पहचाने नामों में अब हर टेस्ट प्रोजेक्ट का
TestResults/<run>/ फ़ोल्डर शामिल है, केवल वर्कस्पेस फ़ोल्डर का अपना नहीं, और Coverlet की फ़ाइल के बगल में Microsoft के कलेक्टर की <user>_<machine>_<date>.cobertura.xml भी। जिस .NET सॉल्यूशन के टेस्ट Visual Studio में चलाए गए हों, वह पहली बार खोलते ही अपनी कवरेज दिखाता है; हर रन फ़ोल्डर लोड होता है, और मर्ज हर फ़ाइल पर सबसे नए रन की बात रखता है।
Visual Studio के लिए Coverage 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। वॉच मोड तब रीलोड करता है जब आपके बिल्ड द्वारा लिखी फ़ाइल बदलती है। - Getting Started, छह चरण हर एक के लिए बटन के साथ, 18 भाषाओं में; पहली बार अपने आप खुलता है।
- सेटिंग्स Coverage विंडो के टूलबार के गियर से, जो इस संस्करण की यूज़र सेटिंग्स या फ़ोल्डर की
.vscode/settings.json लिखता है और संपादित फ़ाइल की टिप्पणियाँ बनाए रखता है। - लाइसेंस: हर सशुल्क योजना में शामिल। जिस मशीन पर VS Code के लिए Coverage Studio सक्रिय है उसे और कुछ नहीं चाहिए — कुंजी अपने आप मिल जाती है; कहीं और, Tools → Coverage Studio → Licence… आपके सक्रियण ईमेल का सदस्यता कोड लेता है। बिना सदस्यता के कवरेज नहीं पढ़ा जाता: Visual Studio में कोई मुफ़्त स्तर नहीं है।
इस संस्करण में अभी नहीं
- Run Tests with Coverage और Test Coverage पैनल VS Code API हैं; Solution Explorer बैज नहीं दिखा सकता। Annotated Source व्यू, HTML रिपोर्ट और एक्सपोर्ट, Check Thresholds, Error List प्रविष्टियाँ, इतिहास और रुझान, तथा डिफ़ कवरेज उस क्रम में आएँगे जिसमें ग्राहक उन्हें माँगेंगे।
Coverage Studio for VS Code 1.2026.2 — शुरुआत, और एक सदस्यता पर दो एडिटर
2026-09-23
जोड़ा गया
- एक वॉकथ्रू। Get started with Coverage Studio — Help → Welcome → Walkthroughs के अंतर्गत, और इंस्टॉल के बाद अपने आप खुलता है — नए उपयोगकर्ता को छह चरणों में कवरेज रिपोर्ट से उन लाइनों तक ले जाता है जिन्हें कोई नहीं परखता, हर चरण में उस कमांड के लिए बटन के साथ जिसके बारे में वह है। सभी अठारह भाषाओं में।
- इंस्टॉल आईडी वहाँ छोड़ी जाती है जहाँ Visual Studio के लिए Coverage 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 पर — और lcov 2.2 के FNL:/FNA: जोड़े भी साथ पढ़े जाते हैं।
- C++ टेम्पलेट अब सिर्फ़ इसलिए कभी न चला हुआ नहीं दिखाया जाता कि उसका एक इंस्टैंशिएशन नहीं चला, और मैक्रो से भरा फ़ंक्शन फिर से एक ही फ़ंक्शन है, हर मैक्रो के लिए एक नहीं।
- सहमति के पाठ वही कहते हैं जो इंस्टॉल वास्तव में भेजता है: आपके स्रोत का कोई मासिक पेज नहीं, और उपयोग का सारांश वही रिक्वेस्ट कोड रखता है जिस पर आपकी कुंजी जारी हुई थी।
जोड़ा गया
- कंडीशन कवरेज अपनी अलग मेट्रिक है।
a && b एक डिसीजन और दो कंडीशन हैं, और कोई सूट दोनों ब्रांच ले सकता है पर b को कभी ग़लत न देखे। अब इसकी अपनी पंक्ति, कॉलम, एक्सपोर्ट, बैज, स्कोर में भार (3, ब्रांच और MC/DC के बीच) और गेट है — BullseyeCoverage, TRACE32 के cond एक्सपोर्ट और GCC 14 के -fcondition-coverage से पढ़ा जाता है।
- म्यूटेंट, जहाँ वे हैं। PIT और Stryker की रिपोर्टें म्यूटेंट-दर-म्यूटेंट पढ़ी जाती हैं: जो बच गए वे एडिटर में अपनी ही लाइन पर चिह्नित होते हैं, हॉवर पर बदलाव और उसे चलाने वाले टेस्ट दिखते हैं, और वे HTML रिपोर्ट तथा एनोटेटेड सोर्स में सूचीबद्ध होते हैं।
- इस लाइन को किन टेस्टों ने चलाया।
--show-contexts के साथ लिखी coverage.py और -coverbytest से जुटाई OpenCover — दोनों बताती हैं कि कौन से टेस्ट लाइन तक पहुँचे; हिट-काउंट हॉवर उनके नाम बताता है।
- चली हुई लाइन का वह हिस्सा जो कभी नहीं चला, एडिटर में रंगा जाता है, और C तथा C++ के फ़ंक्शन को वह कॉम्प्लेक्सिटी और CRAP स्कोर मिलता है जो llvm-cov के पास पहले से मौजूद ब्रांच डेटा से गिना जाता है।
- JaCoCo, Cobertura और Coverlet प्रोजेक्ट पहली बार खोलते ही लोड हो जाते हैं, बिना किसी सेटिंग के — उन जगहों सहित जहाँ Maven, Gradle और
dotnet test डिफ़ॉल्ट रूप से लिखते हैं।
- हर चौड़ाई पर, हर फ़ाइल के बगल में हर मेट्रिक, आपके स्कोर में उसके भार के क्रम में; जो नहीं समाता वह गायब होने के बजाय स्क्रॉल होता है — और जब आप कहीं और देख रहे हों और कोई ट्रेसफ़ाइल दोबारा लोड हो, तो Coverage आइकन पर गिनती आ जाती है।
- एक प्री-रिलीज़ चैनल जिसमें आप स्वेच्छा से शामिल हो सकते हैं, और एडिटर टाइटल बार में एक बटन जो कवरेज की रंगाई बंद करता है और ठीक वही वापस लाता है जो था।
बदला गया
- Bullseye और TRACE32: ब्रांच कवरेज में अब कंडीशन शामिल नहीं हैं। डिसीजन अब ब्रांच कवरेज हैं और कंडीशन, कंडीशन कवरेज — इसलिए ऐसे प्रोजेक्ट का ब्रांच आंकड़ा बदलेगा और उसके साथ संयुक्त स्कोर भी। पुराने स्कोर के लिए
whmWeights.conditions को 0 कर दीजिए।
- मुफ़्त Community टियर में अब साप्ताहिक सीमा है: गिनी जाने वाली हर क्रिया के लिए हफ़्ते में पाँच, जहाँ पहले दिन में बीस थीं, और सीमा पर सब्सक्रिप्शन या 7-दिन का पास सुझाया जाता है। पहले से चल रहे इंस्टॉल को 30 दिन तक पुरानी सीमाएँ मिलती हैं और तारीख के साथ एक बार बताया जाता है।
- ट्रायल और मुफ़्त टियर लाइसेंस सर्वर के साथ एक उपयोग-लेजर रखते हैं: VS Code की मशीन आईडी का हैश, संस्करण, मूल्यांकन शुरू होने का दिन, और गिनी जाने वाली क्रियाओं की गिनती — और कुछ नहीं; पेड लाइसेंस पर कभी नहीं, और उसका इंतज़ार कभी नहीं। टेलीमेट्री के बदले मिलने वाली अवधि अब एक बार के 30 दिन है।
- स्रोत कोड का मासिक पेज हटा दिया गया है — किसी के लिए भी न इकट्ठा किया जाता है, न रखा जाता है, न भेजा जाता है; और पिछली बिल्ड का रखा हुआ पेज इस बिल्ड के पहले स्टार्ट पर मिटा दिया जाता है।
0.2026.82 — आपके प्रोजेक्ट के अनुरूप सीमाएँ, और वह सब कुछ जो आपकी रिपोर्टों में होता है
2026-09-17
ठीक किया गया
- डार्क थीम पर हीटमैप अब सही दिशा में पढ़ा जाता है। इसका रंग-क्रम हल्के पीले से गहरे भूरे तक जाता था, इसलिए सबसे अधिक चलने वाले लूप की पट्टी सबसे धुँधली दिखती थी। डार्क थीम के पास अब अपना अलग रंग-क्रम है, धुँधले जैतूनी से चटक नारंगी तक।
- MC/DC होवर अपना विवरण फिर से दिखाता है, और llvm-cov का डिसीज़न अपनी कंडीशनें सही गिनता है। मौजूदा VS Code होवर को एक ही पंक्ति में समेट देता था; और
(a && b) || c को 100% वाली एक ही कंडीशन के साथ सूचीबद्ध किया जाता था, जबकि शीर्षक सही बताता था कि 3 में से 2 जोड़े। - C++ फ़ंक्शनों के नाम वैसे ही दिखते हैं जैसे आपने लिखे थे:
clamp_to<int> और gearbox::next_gear, न कि लिंकर का ??$clamp_to@H@@YAHHHH@Z — llvm-cov, lcov और gcov के लिए। - Istanbul की पंक्ति-गणना nyc से मेल खाती है,
dotnet-coverage XML पढ़ा जाता है, SimpleCov की :nocov: पंक्तियाँ गड़बड़ाने के बजाय बाहर रखी जाती हैं, और जिस रिपोर्ट में केवल सारांश होता है वह अपने आँकड़े बनाए रखती है, चाहे रिपोर्टें किसी भी क्रम में पढ़ी जाएँ। - मल्टी-रूट वर्कस्पेस: HTML रिपोर्ट अब किसी फ़ोल्डर का नाम दो बार नहीं लिखती, Coverage व्यू वर्कस्पेस फ़ोल्डर को उसके नाम से शीर्षक देता है, और
pathRemap नियम में अब ${workspaceFolder} भी लिखा जा सकता है, ठीक ${workspaceRoot} की तरह।
जोड़ा गया
- रिपोर्ट में जो कुछ भी होता है, वह सब दिखाया जाता है। फ़ंक्शन कॉल, ऑब्जेक्ट कोड और म्यूटेशन स्कोर को Coverage व्यू, HTML रिपोर्ट तथा CSV और Markdown एक्सपोर्ट में एक कॉलम, स्टेटस बार के कार्डों में एक पंक्ति और एनोटेटेड सोर्स में एक बैज मिलता है — और जो मेट्रिक रिपोर्ट में नहीं होता, उसे शून्य दिखाने के बजाय छोड़ दिया जाता है।
- जटिलता और CRAP। जहाँ रिपोर्ट में साइक्लोमैटिक जटिलता होती है (OpenCover, JaCoCo, Clover, Cobertura), वहाँ हर फ़ंक्शन को उसके CodeLens पर CRAP स्कोर मिलता है, फ़ाइल को एक 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 फ़ाइल नमूने, टिप्पणी और उत्तर पते के साथ, और जब तक आप भेजें पर क्लिक नहीं करते, कुछ नहीं भेजती।
- त्रुटि रिपोर्टें। जब VS Code का टेलीमेट्री स्तर
all या error हो, तो FUCINI_* त्रुटि फ़ाइल सामग्री, पथ या नाम के बिना रिपोर्ट होती है। तीन लॉग पंक्तियों को अपने कोड मिले: FUCINI_REMOTE_002, FUCINI_REMOTE_003 और FUCINI_GITDIFF_002, हर एक उपयोगकर्ता गाइड में वर्णित है।
बदला गया
- हर कवरेज प्रतिशत में दो दशमलव अंक हैं, गोल करने के बजाय काटे गए:
87.43%, और 100.00% केवल तब जब कवरेज ठीक 100 हो। - गेट सटीक मान पर निर्णय लेते हैं। अब तक हर प्रतिशत पहले पूर्णांक में गोल किया जाता था, इसलिए 89.6% 90% का गेट पार कर लेता था। केवल गोलाई के कारण पास होने वाला प्रोजेक्ट अब NON-COMPLIANT दिखाएगा जब तक उसका कवरेज वास्तव में सीमा तक न पहुँचे।
- टेलीमेट्री दैनिक है। हर इंस्टॉलेशन VS Code के टेलीमेट्री स्तर
all पर रोज़ एक छोटा लाइसेंस संदेश भेजती है; 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” — और कुछ भी नहीं पूछा जाता। अपना प्लान चुनें, खरीद ईमेल से कोड पेस्ट करें, पुष्टि करें — और आपकी लाइसेंस की (key) आपके लिए जारी होकर लागू कर दी जाती है। अब तक एडिटर के भीतर से एकमात्र रास्ता मूल्यांकन प्रश्नावली था — नाम, ईमेल, खाते का प्रकार, कंपनी, एक सर्वे — और यह उस व्यक्ति के सामने रखने के लिए गलत फ़ॉर्म है जो पहले ही खरीद चुका है। दूसरा रास्ता ईमेल में मौजूद
vscode:// लिंक था, और उस पर क्लिक करने से सतर्क रहना डरपोकपन नहीं, समझदारी है: ऐसा लिंक आपके देखे किसी भी पेज से चल सकता है, और ठीक इसी कारण एक्टिवेशन आपसे पुष्टि मांगता है। यह कमांड पैलेट में है, और कवरेज पैनल के लाइसेंस बैनर पर तथा एक्टिवेशन डायलॉग में एक बटन भी है — हर स्थिति में, क्योंकि लाइसेंस मशीनों के बीच जाता है और ट्रायल के बीच में खरीदना अपवाद नहीं, सामान्य बात है।
- ट्रायल से ही प्लान देखने का एक रास्ता। कीमतों का पेज मुफ़्त संस्करण की स्क्रीनों से खुलता था, पर एक्टिवेशन डायलॉग या लाइसेंस बैनर से नहीं — उस एक जगह से नहीं, जहाँ “3 दिन बाकी” देखने वाला असल में देखता है। उस पाठक को एक प्रश्नावली और
settings.json की एक सलाह दी जाती थी, और कीमत बिलकुल नहीं।
बदला गया
- एक्टिवेशन डायलॉग और लाइसेंस बैनर अब
FCK1 से शुरू नहीं होते। दोनों पहले आपके रिक्वेस्ट कोड और “की (key) को settings.json में पेस्ट करें” से शुरू होते थे, जो उस स्थिति का रास्ता है जब हमारे लाइसेंस सर्वर तक पहुँचा ही न जा सके। सबसे पहले दिखने के कारण यही निर्देश जैसा पढ़ा जाता था — इसलिए FCB1… सब्सक्रिप्शन कोड वाला ग्राहक “Enter Activation Key” पर भेज दिया जाता था, वही एक फ़ील्ड जो उसे निश्चित रूप से अस्वीकार करेगा। दोनों अब भी मौजूद हैं, उन रास्तों के नीचे जो खरीद चुके व्यक्ति के लिए सही हैं, और उसी रूप में बताए गए हैं जो वे वास्तव में हैं।
0.2026.76 — वह कमांड जिसका ईमेल ने नाम लिया
2026-09-12
ठीक किया गया
- “Request Activation Key” अब वाकई एक कमांड है। आपका खरीद ईमेल — और हर भाषा में एक्टिवेशन पेज — यह बताते हैं कि अगर एक-क्लिक लिंक आपके मेल ऐप से बचकर न निकले, तो आप कमांड पैलेट से Fucini Coverage: Request Activation Key चला सकते हैं, अपना प्लान चुन सकते हैं और अपना कोड पेस्ट कर सकते हैं। पर वह नाम पैनल की टाइटल बार का और खुद लिंक का था, किसी कमांड का कभी नहीं, इसलिए पैलेट में उसके नीचे कुछ भी नहीं आता था — और नाम से सबसे नज़दीकी मेल, Enter Activation Key, वह
FCK1… की (key) लेता है जो हमारा सर्वर जारी करता है, न कि वह FCB1… कोड जो आपका ईमेल लाता है। निर्देशों का पालन करने पर आप ठीक उसी एक फ़ील्ड में पहुँचते थे जो आपके हाथ में मौजूद चीज़ को निश्चित रूप से अस्वीकार करता। अब यह असली कमांड है।
- ट्रायल या की (key) अभी चालू रहते हुए भी एक्टिवेशन डायलॉग लाइसेंस का अनुरोध करें… देता है। पहले इसे तब तक रोक कर रखा जाता था जब तक इनमें से कोई एक समाप्त न हो जाए, इस तर्क पर कि चालू इंस्टॉल को लाइसेंस सर्वर से संपर्क करने की कोई वजह नहीं है। लेकिन ट्रायल के बीच में खरीदना अपवाद नहीं, सामान्य बात है, और ऐसी स्थिति के खरीदार के पास डायलॉग से उस फ़ील्ड तक कोई रास्ता नहीं था जहाँ उसका कोड जाता है: बचे हुए दो बटन ऐसी की (key) मांगते थे जो कोड भुनाने पर ही बनती है।
0.2026.75 — रंग-अंधता के अनुकूल पैलेट
2026-09-12
जोड़ा गया
- रंग-अंधता के अनुकूल पैलेट।
colorScale.preset को colorblind पर सेट करें और कवरेज लाल, एम्बर और हरे के बजाय सिंदूरी, नारंगी और नीले (Okabe–Ito पैलेट) में दिखाई जाती है — ग्रेडिएंट, गटर बार, पंक्ति हाइलाइट, एक्सप्लोरर बैज और पिछले रन के बाद के चिह्न, सभी में। आपके द्वारा स्वयं सेट किया गया रंग प्राथमिकता पाता है।
0.2026.74 — टेस्ट के अनुसार फ़िल्टर की गई कवरेज
2026-09-12
जोड़ा गया
- VS Code के अपने Test Coverage व्यू में टेस्ट के अनुसार कवरेज फ़िल्टर करें। जब कोई ट्रेसफ़ाइल अपने टेस्ट के नाम देती है — lcov के
TN: सेक्शन — तो हर टेस्ट Test Explorer में Fucini Coverage के नीचे एक आइटम बन जाता है, Test Coverage व्यू की हर फ़ाइल उन टेस्ट की सूची दिखाती है जिन्होंने उसमें कुछ चलाया, और किसी एक को चुनने पर वे पंक्तियाँ दिखती हैं जहाँ तक वह टेस्ट पहुँचा। - पाथ सेटिंग्स में
${command:…}। ${command:cmake.buildDirectory}/coverage.info चुनी गई CMake किट के साथ चलता है। कमांड हर डिस्कवरी से पहले, अधिकतम पाँच सेकंड और केवल भरोसेमंद वर्कस्पेस में चलती है; विफल होने वाली कमांड वेरिएबल को जैसा लिखा है वैसा ही छोड़ देती है, और आउटपुट कारण बताता है। - 30 सेकंड की क्विक स्टार्ट और विकल्पों से तुलना अब Marketplace पेज और होम पेज की शुरुआत में हैं।
ठीक किया गया
- जो ट्रेसफ़ाइल किसी फ़ाइल को हर टेस्ट के लिए अलग दर्ज करती थी, वह उसे हर टेस्ट के लिए अलग गिनती भी थी। अब ये रिकॉर्ड हर ट्रेसफ़ाइल में जोड़ दिए जाते हैं, जैसे genhtml उन्हें पढ़ता है: कुल योग में फ़ाइल एक बार गिनी जाती है, और कई ट्रेसफ़ाइल लोड होने पर किसी भी टेस्ट की पंक्तियाँ नहीं खोतीं।
0.2026.73 — हस्ताक्षरित अपडेट, और ऐसी कुंजी जो संस्करण बदलने पर भी काम करती है
2026-09-11
ठीक किया गया
- इंस्टॉल आईडी अब किसी भी चीज़ द्वारा उपयोग किए जाने से पहले सहेजी जाती है। 0.2026.72 बिल्ड 2 ने आईडी को हर कॉल पर नए सिरे से तय करना बंद कर दिया था, लेकिन स्टार्ट-अप अब भी उसके लिखे जाने की प्रतीक्षा नहीं करता था, इसलिए खुलने के तुरंत बाद बंद की गई विंडो उसे अब भी खो सकती थी — और उसके साथ वह मशीन फ़िंगरप्रिंट भी, जिससे सक्रियण कुंजी बंधी होती है। अब स्टार्ट-अप प्रतीक्षा करता है।
- 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 और उसका पिछला जोड़ीदार उन शाखाओं से गुज़रते हैं जिनकी कुछ भुजाएँ चलीं और कुछ कभी नहीं। यही वह अंतर है जो असुरक्षित पंक्तियों वाला नेविगेशन दिखा नहीं सकता: जिस पंक्ति का कथन चला वह कवर मानी जाती है, और चाहे उसकी कितनी भी भुजाएँ कभी न ली गई हों, कवर बनी रहती है —
a के असत्य होने पर एक बार पहुँचा if (a && b) पंक्ति-स्तर पर 100% कवर है और आधा ही परखा गया। भुजा के बजाय निर्णय के हिसाब से एक पड़ाव, क्योंकि if/else की भुजाएँ पन्नों की दूरी पर हो सकती हैं, और switch की पाँचवीं भुजा पर जाना खुद switch पर जाने से कम बताता है। जिन निर्णयों तक कोई भुजा पहुँची ही नहीं, वे असुरक्षित-पंक्ति कमांड के हवाले रहते हैं, जो वहाँ पहले से रुकते हैं — और जिस फ़ाइल की रिपोर्ट में शाखाएँ दर्ज ही नहीं, वह यही कहती है, बजाय यह दावा करने के कि हर निर्णय दोनों तरह से परखा गया।
Reload Coverage जो पहले से लोड है उसे फिर से पढ़ता है। निगरानी बंद होने पर, टेस्ट दोबारा चलाने के बाद ताज़ा आँकड़ों तक लौटने का एकमात्र रास्ता Load Coverage था, जो खोज दोबारा चलाता है और स्क्रीन पर मौजूद सेट से अलग सेट लौटा सकता है। यह कमांड ठीक वही फिर से पढ़ता है जो अभी लोड है, उन ट्रेसफ़ाइलों सहित जो हाथ से चुनी गई थीं और जिन्हें खोज दोबारा कभी न पाती।
Copy Coverage Summary रन को Markdown तालिका में रखता है। सबसे कम कवर फ़ाइल पहले, कुल योग की पंक्ति के साथ, पुल रिक्वेस्ट में चिपकाने को तैयार। शाखा और MC/DC के कॉलम तभी दिखते हैं जब रन में किसी ने उन्हें मापा हो: डैश से भरा कॉलम "न मापा गया" के बजाय शून्य कवरेज पढ़ा जाता है, जो सच के ठीक उलट है।
ठीक किया गया
- इंस्टॉल आईडी सत्रों के बीच बदल सकती थी — और लाइसेंस फ़िंगरप्रिंट इसी से बनता है। यह हर कॉल पर नए सिरे से तय होती थी और लिखे जाने का इंतज़ार किए बिना सहेजी जाती थी, इसलिए दूसरी कॉल, या शुरू होने के तुरंत बाद बंद हुई एडिटर विंडो, नई आईडी बना सकती थी। बदलती आईडी का मतलब है एक सक्रियण कुंजी जो अब मेल नहीं खाती; साथ ही यह प्रति-इंस्टॉल गिने जाने वाले हर आँकड़े को बढ़ा-चढ़ाकर दिखाती थी। अब यह प्रति सत्र एक बार तय होती है और कुछ भी उसका उपयोग करने से पहले सहेज ली जाती है। बिल्ड 2।
0.2026.71 — इस पंक्ति को किस ट्रेसफ़ाइल ने कवर किया
2026-09-08
जोड़ा गया
- पंक्ति-स्तर पर स्रोत का श्रेय। एक से अधिक ट्रेसफ़ाइल लोड होने पर हिट-गिनती वाला होवर अब किसने कवर किया: और उन रिपोर्टों के साथ समाप्त होता है जिन्होंने उस पंक्ति पर हिट दर्ज की — और Coverage दृश्य में किसी ट्रेसफ़ाइल की पंक्ति पर क्लिक करने से अब हर खुले संपादक में वे पंक्तियाँ रोशन होती हैं जो उसने दीं, ठीक वैसे ही जैसे पहले से उसके द्वारा मापी गई फ़ाइलें रोशन होती थीं। यह वही एक प्रश्न है जिसका उत्तर विलय किया गया रन दे सकता है और अकेली रिपोर्ट नहीं: एक ही फ़ाइल को मापने वाली दो ट्रेसफ़ाइलें उसकी पंक्तियों पर असहमत होती हैं, और अब तक विलय उस असहमति को चपटा कर देता था और कभी दिखाता नहीं था। विलय अब भी फ़ाइल के आधार पर होता है — साझा फ़ाइल पूरी तरह नवीनतम रिपोर्ट जीतती है — इसलिए प्रति-पंक्ति स्रोत विलय से पहले अनुक्रमित किए जाते हैं। केवल कवर की गई पंक्तियाँ गिनी जाती हैं: जिस रिपोर्ट ने किसी पंक्ति को
0 दर्ज किया, उसने उसे कवर नहीं किया।
- lcov का
TN: रिकॉर्ड आख़िरकार पढ़ा जाता है। जो ट्रेसफ़ाइल अपनी सुइट का नाम देती है — TN:integration — वह जहाँ भी स्रोत का नाम आता है coverage.info (integration) के रूप में दिखती है, और यह नाम lcov में वापस निर्यात करने पर खाली लिखे जाने के बजाय बना रहता है। अधिकांश उपकरण TN: खाली लिखते हैं और उनमें कोई बदलाव नहीं; जो इसे भरते हैं वही हैं जिनकी ट्रेसफ़ाइलें विलय होती हैं, और तब नाम ही एकमात्र चीज़ है जो बताती है कि कौन-सी कौन-सी है।
fuciniCoverage.lineHighlight पंक्तियों को स्वयं रँगता है। off | uncovered | heatmap, डिफ़ॉल्ट रूप से बंद: हर बिना कवर और आंशिक रूप से कवर पंक्ति के पीछे पारभासी रंग, और heatmap में हर चली हुई पंक्ति के पीछे भी — जितनी बार चली, उतना गर्म। editorGutter.mode के चौथे मान के बजाय अपनी सेटिंग, क्योंकि लोग इन्हें अलग-अलग जोड़ों में चाहते हैं: गटर साफ़ रखते हुए खाली जगहें रँगी हुई, या कोड के पीछे रंग के बिना केवल पट्टियाँ। पारभासी इसलिए कि यह पाठ के नीचे रहता है, और यह कवर की गई पंक्तियों के बजाय खाली जगहें रँगता है — उसी कारण से जिस कारण गटर ऐसा करता है।
fuciniCoverage.overviewRuler स्क्रॉलबार की पट्टी पर स्वयं निर्णय लेता है। follow (डिफ़ॉल्ट) वही करता है जो हमेशा करता था: जहाँ गटर बिना कवर या आंशिक पट्टी खींचता है वहाँ पट्टी, और हीटमैप के लिए कभी नहीं। uncovered इसे editorGutter.mode बंद होने पर भी खींचता है — स्क्रॉलबार के साथ फ़ाइल की खाली जगहों का नक्शा और कोड के पास कुछ नहीं। off पट्टियाँ रखता है और यह पट्टी हटा देता है। पहले रूलर गटर से जुड़ा हुआ था, इसलिए ये दोनों संयोजन संभव नहीं थे।
ठीक किया गया
- जो ट्रेसफ़ाइल पार्स नहीं हो पाती, वह अब बताती है कि उसे किस रूप में पढ़ा गया। "…सुगठित नहीं है" पढ़ने वाले को यह अनुमान लगाने पर छोड़ देता था कि फ़ाइल उस प्रारूप के रूप में पहचानी भी गई या नहीं — और VectorCAST पार्सर द्वारा अस्वीकृत Cobertura दस्तावेज़ उस 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):// URL हो सकती है। आर्टिफ़ैक्ट हर लोड पर एक्सटेंशन के स्टोरेज में लाया जाता है और वहीं से लोड होता है; Coverage व्यू URL का नाम बताता है, कैश पथ का नहीं। हर फ़ेच सशर्त है (ETag / Last-Modified), इसलिए अपरिवर्तित आर्टिफ़ैक्ट का दोबारा फ़ेच कुछ डाउनलोड नहीं करता, और फ़ेच विफल होने पर आख़िरी डाउनलोड की गई प्रति लोड होती है और कारण आउटपुट में होता है। fuciniCoverage.remote.headers वेरिएबल विस्तारित करके Name: value हेडर जोड़ता है — Authorization: Bearer ${env:CI_TOKEN} टोकन को settings.json से बाहर रखता है — और fuciniCoverage.remote.refreshMinutes टाइमर पर दोबारा फ़ेच करता है। जब URL स्वयं किसी फ़ाइल नाम पर ख़त्म न हो, तो फ़ॉर्मैट पता रहे इसके लिए URL फ़्रैगमेंट के रूप में #lcov.info (या कोई और फ़ाइल नाम) जोड़ें। - लोडिंग और Generate Full HTML Report प्रगति दिखाते हैं, और रद्द किए जा सकते हैं। दस या अधिक ट्रेसफ़ाइलों का, या 8 MB या अधिक का लोड एक प्रगति सूचना के तहत चलता है जिसमें Cancel बटन है और जो पढ़ी जा रही फ़ाइल और चरण (पढ़ना, फिर स्रोत जाँचना) बताती है; छोटा लोड पहले की तरह सिर्फ़ स्टेटस बार घुमाता है। रद्द करने पर पिछला रन लोड रहता है और यह बताया जाता है। HTML रिपोर्ट भी रेंडर और लिखे गए हर पृष्ठ पर यही करती है।
- रीलोड के दो और कारण। वर्कस्पेस के बाहर की निरपेक्ष
coverageFile.paths प्रविष्टि — चेकआउट के बगल का बिल्ड ट्री, Bazel का आउटपुट रूट — अब पोल भी की जाती है, ताकि विंडो खुलने के बाद वहाँ आई फ़ाइल लोड हो, न कि फिर कभी न देखी जाए; वॉचर केवल वर्कस्पेस ही देखता था। और fuciniCoverage.watch.reloadAfterTasks उन टास्कों के नाम लेता है (tasks.json का label, या 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} का अर्थ प्रविष्टि का अपना फ़ोल्डर है; हर फ़ोल्डर में मिली ट्रेसफ़ाइलें एक रन में मर्ज होती हैं, और Coverage व्यू फ़ाइलों को फ़ोल्डर के अनुसार समूहित करता है। pathRemap नियम में ${workspaceRoot} पहले ट्रेसफ़ाइल का अपना फ़ोल्डर आज़माता है, फिर बाकी। जिसे एक ही फ़ोल्डर चाहिए — फ़ाइल डायलॉग, रिपोर्ट और बैज आउटपुट, git मेटाडेटा, Run Tests with Coverage — वह सक्रिय एडिटर का फ़ोल्डर लेता है, और कई फ़ोल्डर हों पर कोई एडिटर न हो तो टेस्ट रन पूछता है कि कौन-सा। वर्कस्पेस में फ़ोल्डर जोड़ने या हटाने पर कवरेज अपने आप रीलोड होती है। इससे पहले बारह जगहें पहला फ़ोल्डर ले लेती थीं और दूसरे रूट को हर चीज़ के लिए ग़लत आधार मिलता था। - रन VS Code के अपने Test Coverage व्यू में प्रकाशित होता है।
fuciniCoverage.testCoverage.publish (डिफ़ॉल्ट रूप से चालू) के साथ हर लोड किया गया रन नेटिव Test Coverage पैनल, Explorer में उसके प्रति-फ़ाइल प्रतिशत और एडिटर के अपने “Show Inline Coverage” टॉगल में भी जाता है — पंक्तियाँ, ब्रांच आर्म और फ़ंक्शन, विवरण माँग पर लोड होते हुए। Show in Test Coverage View सक्रिय रन को प्रकाशित करके पैनल खोलता है, सेटिंग चाहे जो कहे; स्टेटस-बार मेनू इसे quickActions.showTestCoverage के पीछे देता है। - फ़ाइलें मेल न खाएँ तो पथ-रीमैप नियम सुझाया जाता है। सबसे आम “लोड तो हुआ पर कुछ जलता नहीं” वह ट्रेसफ़ाइल है जिसके पथ किसी कंटेनर या 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/**) लोड होते समय रन से हटा दी जाती हैं, इसलिए Coverage व्यू, स्टेटस बार, थ्रेशोल्ड, बैज, CodeLens, इतिहास और निर्यात सब उनके बिना गिनते हैं; लोड परिणाम बताता है कि कितनी छोड़ी गईं और आउटपुट उनके नाम देता है। पैटर्न वर्कस्पेस-सापेक्ष पथ और निरपेक्ष पथ से मिलाए जाते हैं; बिना / वाला पैटर्न किसी भी गहराई पर फ़ोल्डर या फ़ाइल नाम से मेल खाता है, .gitignore की तरह। पूरी फ़ाइलों के लिए — फ़ाइल के भीतर की पंक्तियाँ टूल के अपने बहिष्करण मार्करों से ही चलती रहती हैं। - प्रति-पंक्ति Problems प्रविष्टियाँ, ऑप्ट-इन।
fuciniCoverage.problems.perLine (off, uncovered या uncoveredAndPartial; डिफ़ॉल्ट रूप से बंद) कभी न चली पंक्तियों के हर सटे हुए ब्लॉक पर एक Information डायग्नोस्टिक रखता है — चालीस पंक्तियों का डेड फ़ंक्शन एक प्रविष्टि है, चालीस नहीं — और दूसरे मोड में हर उस पंक्ति पर भी जिसकी कोई ब्रांच आर्म कभी नहीं ली गई। केवल खुले दस्तावेज़ों के लिए, ताकि दो हज़ार फ़ाइलों का रन पैनल को भर न दे; बफ़र संपादित होने पर प्रविष्टियाँ अपनी पंक्तियों के साथ चलती हैं और दस्तावेज़ बंद होते ही चली जाती हैं। problems.enabled के पीछे की प्रति-फ़ाइल प्रविष्टि अपरिवर्तित है। - README के लिए कवरेज बैज। Generate Coverage Badge सक्रिय रन के लिए shields-शैली का SVG वर्कस्पेस में लिखता है (
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 Coverage व्यू में एक बिना मापी समूह जोड़ता है जिसमें रन द्वारा मापे गए प्रकार की वह हर वर्कस्पेस फ़ाइल है जो रन में नहीं है, उन्हें लोड परिणाम में गिनता है, बैज चालू होने पर 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 — फ़ंक्शन CodeLens पर ब्रांच, MC/DC और स्कोर
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] दोनों ट्रेसफ़ाइलों का नाम और उनकी साझा फ़ाइलों की संख्या देता है।
- “Show What Changed Since Last Run” फ़ाइल पंक्ति के
… मेनू में, जब तुलना के लिए कोई पिछला रन मौजूद हो — वही प्रति-फ़ाइल अंतर जो Compare with Last Run पहले से निकालता है, पर पूरे ट्री के बजाय उसी एक फ़ाइल पर केंद्रित जिसके बारे में आपने पूछा। जिस फ़ाइल में कुछ नहीं हिला, वह कुछ न देने के बजाय साफ़-साफ़ यही कहती है।
- Tune Colour Scale कमांड:
colorScale.* के रंग और थ्रेशहोल्ड तय करने से पहले उन्हें लाइव Coverage व्यू पर आज़माएँ। हर संपादन सीधे सेटिंग में लिखा जाता है — व्यू किसी भी colorScale/threshold बदलाव पर पहले से दोबारा रंग भरता है, इसलिए मान लिखना ही प्रीव्यू है — और अंत में “रखें” या “मूल मानों पर लौटें” बात पूरी करता है।
- Problems पैनल में प्रति-फ़ाइल कवरेज की कमियाँ,
threshold.statement से नीचे की हर लोड की गई स्रोत फ़ाइल के लिए एक प्रविष्टि, नई fuciniCoverage.problems.enabled के पीछे (डिफ़ॉल्ट रूप से बंद — डिफ़ॉल्ट स्टेटमेंट थ्रेशहोल्ड 100 है)। हर प्रविष्टि बताती है कि क्या-क्या कवर नहीं हुआ (“62% पंक्तियाँ कवर्ड — 14 पंक्तियाँ कवर नहीं, 2 फ़ंक्शन कवर नहीं”) और उसके साथ एक क्विक फ़िक्स है जो जो भी चैट एक्सटेंशन इंस्टॉल हो (Copilot, Claude Code, …) उसे इस कमी के लिए टेस्ट लिखने के प्रॉम्प्ट के साथ खोलता है — प्रति-पंक्ति डायग्नोस्टिक असली कोडबेस पर Problems को भर देता, इसलिए यह फ़ाइल स्तर पर ही रहता है, वह स्तर जिस पर पढ़ने वाला सचमुच कुछ कर सकता है।
ठीक किया गया
- Coverage व्यू में किसी अनुपस्थित/बेमेल/सत्यापित फ़ाइल का कारण अब चुना और कॉपी किया जा सकता है। वह पहले सिर्फ़ पंक्ति के नेटिव
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 (या फ़ंक्शन/फ़ंक्शन-कॉल/म्यूटेशन) रोलअप का अंश के साथ भाजक भी जुड़ जाता था, जिससे असली प्रतिशत कम दिखता था। स्रोत बैज का टूलटिप अब “जोड़ा गया” के बजाय “_ ने इसके बारे में जो कहा था उसकी जगह” कहता है।
ठीक किया गया
- Coverage व्यू में लंबा फ़ाइलनाम अब बाहर बहने के बजाय कटकर दिखता है। पंक्ति के नाम वाले span में
min-width: 0 नहीं था, वह इकलौती घोषणा जो किसी flex आइटम के overflow/text-overflow: ellipsis को सचमुच काम करने देती है — उसके बिना, पैनल काफ़ी संकरा होते ही लंबा नाम अपनी पूरी चौड़ाई बनाए रखता और उसके बाद आने वाले स्रोत बैज, प्रतिशत और बार के नीचे से गुज़र जाता था।
0.2026.64 — Coverage व्यू को स्कोर से क्रमबद्ध करें
2026-08-01
जोड़ा गया
- Coverage व्यू को सिर्फ़ नाम से नहीं, स्कोर से भी क्रमबद्ध करें। हर पंक्ति पहले से एक WHM स्कोर और प्रति-मेट्रिक विवरण रखती है; बड़े ट्री में सबसे ख़राब फ़ाइल ढूँढ़ने का मतलब था उसके लिए वर्णानुक्रम सूची को ऊपर से नीचे पढ़ना। Collapse all / Expand all के बगल का एक ड्रॉपडाउन अब फ़ाइल नाम, समग्र स्कोर, पंक्तियाँ, ब्रांच और MC/DC देता है — फ़ाइल नाम के सिवा हर मोड फ़ोल्डरों और फ़ाइलों को एक साथ मिलाकर उस मेट्रिक के अपने प्रतिशत से सबसे ख़राब को पहले रखता है, ताकि ख़राब टेस्ट वाला फ़ोल्डर ठीक वैसे ही रैंक हो जैसे ख़राब टेस्ट वाली फ़ाइल, न कि उससे अलग समूह में चला जाए। जिस फ़ाइल के पास देखे जा रहे मेट्रिक का डेटा न हो (मान लीजिए ऐसा फ़ॉर्मैट जो ब्रांच बताता ही नहीं) वह 0% मानी जाने के बजाय सबसे नीचे जाती है। चुनाव करते ही वह नई
fuciniCoverage.coverageView.sortBy सेटिंग में लिखा जाता है, ताकि विंडो रीलोड के बाद भी बना रहे और हर बार फ़ाइल नाम पर वापस न लौटे।
ठीक किया गया
- बहु-पंक्ति फ़ंक्शन सिग्नेचर अब ग़लती से “हिला हुआ” चिह्नित नहीं होता। Istanbul का
fnMap हर फ़ंक्शन को दो पंक्ति संदर्भ देता है — जहाँ उसका नाम है, और जहाँ उसका बॉडी शुरू होता है — और पार्सर उस बेमेल जाँच के लिए, जो बाद में स्रोत टेक्स्ट में नाम खोजती है, बॉडी वाली पंक्ति को तरजीह देता था। जिस भी फ़ंक्शन की पैरामीटर सूची दो पंक्तियों से लंबी हो (100 कॉलम पर रैप होने वाले कोडबेस में आम बात), उसके नाम की असली पंक्ति दर्ज पंक्ति से बहुत दूर होती थी, और फ़ाइल Coverage व्यू में एक ग़लत “अब अपनी कवरेज से मेल नहीं खाती” चेतावनी के साथ धुँधली पड़ जाती थी। पार्सर अब नाम की अपनी पंक्ति को तरजीह देता है, जो वही है जिसे बेमेल जाँच हमेशा से खोज रही थी।
0.2026.63 — हर पंक्ति अपनी ट्रेसफ़ाइल बताती है
2026-07-20
जोड़ा गया
- हर पंक्ति बताती है कि उसे किस ट्रेसफ़ाइल ने मापा। पूरे प्रोजेक्ट की रन के ऊपर किसी एक मॉड्यूल की अपनी रिपोर्ट लोड करना वही फ़ाइलें दो बार मापने जैसा है, और ट्री यह नहीं बताता था कि कोई पंक्ति कौन-सी रिपोर्ट पढ़ रही है। एक से अधिक ट्रेसफ़ाइल लोड होने पर अब हर फ़ाइल पंक्ति उसे मापने वाली रिपोर्ट का नाम दिखाती है — कई होने पर सबसे हाल में लोड की गई — बाकी हर एक के लिए
+1 और उन्हें नाम से बताने वाले टूलटिप के साथ। विलय किसी एक को जिताने के बजाय उनकी हिट्स जोड़ देता है, और टूलटिप यही कहता है। केवल एक ट्रेसफ़ाइल पर कुछ नहीं दिखाया जाता, क्योंकि अलग बताने को कुछ होगा ही नहीं।
बदला गया
- एक्सटेंशन का अपना पेज हर सेटिंग को उसके असली डिफ़ॉल्ट के साथ बताता है। बीस सेटिंग्स की कोई पंक्ति ही नहीं थी — भाषा, तीन थ्रेशहोल्ड, एक वेट और पंद्रह क्विक-ऐक्शन स्विच — और टेलीमेट्री वाली पंक्ति डिफ़ॉल्ट चालू बताती थी, जबकि वह काफ़ी समय से बंद है। अब एक टेस्ट पेज की तुलना मैनिफ़ेस्ट से करता है, डिफ़ॉल्ट सहित।
ठीक किया गया
- पिछली रिलीज़ में जोड़ी गई
files.watcherExclude के अंतर्गत स्रोतों की पुनःजाँच अब अपने अलग सेटिंग नाम के बजाय बाक़ी जाँच की तरह staleWarning.enabled का पालन करती है।
0.2026.62 — एक्सप्लोरर को अछूता छोड़ा, मौन स्रोत फिर जाँचे गए
2026-07-06
बदला गया
- एक्सप्लोरर को अछूता छोड़ा गया। एक्सप्लोरर में फ़ाइलों के आगे दिखने वाले कवरेज बैज अब डिफ़ॉल्ट रूप से बंद हैं। वह कॉलम उसका है जो उसे इस्तेमाल करता है — VS Code वहाँ git के अपने M और U रखता है, और सिर्फ़ एक बैज ही समाता है — और कवरेज व्यू वही फ़ाइलें वही संख्याओं के साथ, उन्हीं के लिए बनी जगह पर दिखाता है।
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 · बिल्ड 3 — अनडू फिर से बिंदु हटा देता है
2026-06-01
ठीक किया गया
- अनडू संपादित पंक्तियों से बिंदु फिर हटा देता है। रन के बाद संपादित बफ़र फिर से लिखी गई पंक्तियों पर धूसर बिंदु दिखाता है, और कवरेज उनसे हट जाती है। उन संपादनों को अनडू करने पर बिंदु वहीं बने रहते थे: हर बदलाव गिना जाता था, वह भी जो टेक्स्ट को वापस कर देता था। अब यह याद रखा जाता है कि किसी के टाइप करने से पहले बफ़र में क्या था, और जैसे ही वह फिर वही होता है, बिंदु हट जाते हैं और संख्याएँ फिर से उस पर लागू हो जाती हैं।
- रिलीज़ नंबर एक-दूसरे से मिलाए जाते हैं। मैनिफ़ेस्ट, चेंजलॉग की सबसे ऊपरी प्रविष्टि और रिलीज़ टैग — तीनों संस्करण और बिल्ड रखते हैं, तीनों हाथ से लिखे जाते हैं, और पहले भी अलग हो चुके हैं। अब टेस्ट सूट उनकी तुलना करता है और जाँचता है कि प्रविष्टियाँ नई से पुरानी क्रम में हैं और हर एक पर असली तारीख़ है।
0.2026.59 — ऐसा अनलोड जो टिकता है
2026-05-12
बदला गया
- अनलोड की गई ट्रेसफ़ाइल अनलोड ही रहती है। कवरेज व्यू की सूची से कोई फ़ाइल हटाना ठीक उतनी देर टिकता था जितनी देर विंडो: कुछ भी कॉन्फ़िगर न हो तो खोज जाने-पहचाने नामों पर लौट आती है और अगली सुबह फिर
lcov.info मिल जाती थी, और इसके उलट कहने का एकमात्र तरीका था किसी एक को बाहर रखने के लिए पथ कॉन्फ़िगर करना। अब यह निर्णय वर्कस्पेस के लिए याद रखा जाता है। फ़ाइल को दोबारा चुनने या coverageFile.paths में उसका नाम देने से यह पलट जाता है — सेटिंग जिस फ़ाइल का नाम लेती है उसे कभी रोका नहीं जाता, इसलिए किसी के कहे बिना कुछ ग़ायब नहीं हो सकता।
ठीक किया गया
- संपादित बफ़र का दोबारा चित्रण तेज़ हुआ। फिर से लिखी गई पंक्तियों की सूची हर बार दोबारा चित्रण पर सभी दर्ज संपादनों से नए सिरे से बनती थी, इसलिए पूरी दोपहर संपादित की गई लंबी फ़ाइल एक ऐसे उत्तर के लिए पंक्तियों × संपादनों की क़ीमत चुकाती थी जो पिछले कीस्ट्रोक से बदला ही नहीं था। अब यह हर कीस्ट्रोक पर एक बार गिना जाता है।
0.2026.58 · बिल्ड 2 — टेस्ट रन अपनी ट्रेसफ़ाइल याद रखता है
2026-05-01
बदला गया
- टेस्ट रन अपनी ट्रेसफ़ाइल याद रखता है, ठीक वैसे जैसे हाथ से चुनी गई फ़ाइल। Run Tests with Coverage रन ने जो लिखा उसे लोड करता था और फिर पूछता था कि इसे
coverageFile.paths में जोड़ा जाए या नहीं। हाथ से चुनी फ़ाइल 0.2026.56 से वहाँ अपने आप लिखी जाती है, और टेस्ट रन उसी काम का दूसरा रास्ता है, इसलिए अब वह भी उसी तरह लिखता है। दोनों को एक ही सेटिंग, coverageFile.rememberPicks, चलाती है; कवरेज व्यू में उस ट्रेसफ़ाइल की पंक्ति वही जगह है जहाँ से दोनों में से कोई भी दोबारा हटाया जाता है।
ठीक किया गया
- पृष्ठभूमि के टाइमर एक्सटेंशन के साथ ही रुक जाते हैं। ट्रेसफ़ाइल वॉचर विंडो के साथ छोड़ दिया जाता था, पर उसके पीछे चलने वाला दो-सेकंड का पोल और कोई भी लंबित स्रोत-पुनःजाँच सादे टाइमर हैं, जिन्हें कुछ भी नहीं छोड़ता। एक्सटेंशन बंद करने पर, या उसके बंद रहते विंडो दोबारा लोड करने पर, वे चलते रह जाते थे और ऐसे वर्कस्पेस को पढ़ते रहते थे जिससे एक्सटेंशन का अब कोई सरोकार नहीं था।
0.2026.57 · बिल्ड 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 · बिल्ड 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 251 पंक्तियों की फ़ाइल की “पंक्ति 252” पर हिट लिखता है — और बेमेल जाँच इसे अंत में न्यूलाइन वाली हर PHP फ़ाइल में विरोधाभास कहती थी। अंतिम न्यूलाइन से एक पंक्ति आगे अब स्वीकार्य है; उससे आगे, या बिना अंतिम न्यूलाइन वाली फ़ाइल से आगे का संदर्भ, अब भी वही विरोधाभास है।
0.2026.54 · बिल्ड 2 — What Community Includes में ट्रायल पंक्ति
2026-03-24
जोड़ा गया
- Community संस्करण में What Community Includes में ट्रायल पंक्ति। उस बिल्ड में कभी ट्रायल नहीं था, इसलिए उसकी सूची अब 14-दिन का Pro ट्रायल शुरू करें… से शुरू होती है, जो 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 · बिल्ड 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 · बिल्ड 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 · बिल्ड 2 — स्क्रीन पर बेमेल पथ, पहली बार का संकेत, दो और कुंजियाँ
2025-08-09
जोड़ा गया
- ऐसे वर्कस्पेस के लिए पहली बार का संकेत जिसमें लोड करने को कुछ नहीं है। वॉच डिफ़ॉल्ट रूप से चालू है और स्टार्टअप लोड मौन है, इसलिए बिना ट्रेसफ़ाइल वाले प्रोजेक्ट में नई इंस्टॉल कुछ भी नहीं कहती थी। पहला मौन लोड जो खाली लौटे, अब यह बताता है — केवल एक बार, हमेशा के लिए — और करने लायक दो बातें सुझाता है: कवरेज फ़ाइल हाथ से चुनें, या अपने टूलचेन से इसे बनाने की रेसिपी खोलें। हाथ से चलाया गया लोड अपना संदेश बनाए रखता है।
- Toggle Annotated Source और Load Coverage के लिए कुंजियाँ।
Alt+A सक्रिय टैब को स्रोत और उसके एनोटेटेड व्यू के बीच बदलता है; Alt+Shift+R कवरेज को फिर से खोजकर लोड करता है (macOS पर Ctrl+Alt+A / Ctrl+Alt+R)। 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 पिछली पर ले जाता है (macOS पर Ctrl+Alt+N / Ctrl+Alt+P, जहाँ Option अक्षर टाइप करता है)। दोनों केवल फ़ोकस वाले टेक्स्ट एडिटर में काम करते हैं और किसी भी अन्य डिफ़ॉल्ट की तरह Keyboard Shortcuts में बदले जा सकते हैं।
0.2026.44 · बिल्ड 3 — मुफ़्त स्तर की सीमाएँ, एक ही सूची में
2025-07-24
जोड़ा गया
- Community में क्या शामिल है, एक सूची के रूप में। मुफ़्त स्तर आठ क्रियाओं को सीमित करता है और बारह सुविधाओं को रोकता है, और हर निर्णय अपने-अपने दरवाज़े पर लागू होता था — इसलिए स्तर की रूपरेखा जानने का एकमात्र तरीका था काम के बीच में हर दीवार से एक-एक कर टकराना। नया कमांड What Community Includes सब एक साथ दिखाता है: हर सीमित क्रिया और उसके दिन या महीने का कितना उपयोग हो चुका, हर रोकी गई सुविधा नाम से, और उन्हें हटाने के दो तरीके — सशुल्क योजना या टेलीमेट्री अनलॉक।
- जहाँ भी सवाल उठे, वहाँ उपलब्ध। स्टेटस बार मेनू में एक प्रविष्टि, Coverage व्यू के लाइसेंस बैनर में एक बटन, और उन दो संदेशों पर एक बटन जो Community इंस्टॉल दीवार पर मिलते हैं — उपयोग सीमा पूरी हुई और यह क्रिया शामिल नहीं है। पंक्तियाँ उसी अधिकार-सेट से निकलती हैं जिसे गेट लागू करते हैं, इसलिए सूची जो कहती है वही होगा।
बदला गया
- वॉच मोड बताता है कि वह मुफ़्त स्तर पर क्या करेगा। स्टेटस बार प्रविष्टि सबसे "कवरेज स्वचालित रूप से फिर से लोड करने" का वादा करती थी, और Community पर यह ऐसा वादा है जो वॉचर नहीं निभाता — वह नोटिस करता है और पूछता है। प्रविष्टि अब वहाँ यही कहती है, और कमांड का शीर्षक Toggle Tracefile Watch है, क्योंकि "Toggle Watch" कभी नहीं बताता था कि क्या देखा जा रहा है। व्यवहार स्वयं अपरिवर्तित है।
0.2026.43 · बिल्ड 3 — विफल लोड कारण बताता है, और छिपी फ़ाइलें गिनी जाती हैं
2025-06-25
बदला गया
- जो ट्रेसफ़ाइल लोड नहीं होती वह अब बताती है क्यों, और क्या आज़माएँ। हर विफलता एक जैसी सूचना देती थी — "no coverage could be parsed. See output." — और कारण एक चैनल दूर कोड और पार्सर संदेश के रूप में पड़ा रहता था। सूचना अब फ़ाइल से शुरू होती है और इनकार को उसकी असल श्रेणी में रखती है: ऐसे प्रारूप में नहीं जिसे यह एक्सटेंशन पढ़ता है, सुगठित नहीं (आमतौर पर बिल्ड अभी लिख ही रहा था), सुगठित लेकिन कुछ दर्ज नहीं (रन ने कोई इंस्ट्रुमेंटेड कोड नहीं चलाया), या पढ़ी नहीं जा सकी। पार्सर के अपने शब्द साथ जाते हैं, कई फ़ाइलें गिनी जाती हैं, और आउटपुट चैनल आउटपुट दिखाएँ बटन के पीछे दिया जाता है, ज़बरदस्ती खोला नहीं जाता।
- जो फ़ाइलें ट्रेसफ़ाइल सूचीबद्ध करती है पर जिनमें मापने को कुछ नहीं, अब स्क्रीन पर गिनी जाती हैं। केवल घोषणाओं वाला हेडर हमेशा Coverage व्यू से बाहर रखा गया, 0 में से 0 पर 100% अंक देने के बजाय — और उसका नाम आउटपुट चैनल में लिखा जाता था, और कहीं नहीं। लोड परिणाम अब कहता है N फ़ाइल(ें) जिनमें इंस्ट्रुमेंट करने को कुछ नहीं है, नहीं दिखाई जातीं, और कौन-सी? बटन नामों वाला चैनल खोलता है।
0.2025.42 · बिल्ड 3 — NCover और dotCover, वह .NET कवरेज जिसका कहीं ठिकाना नहीं था
2025-06-08
जोड़ा गया
- NCover और JetBrains dotCover। Coverlet का Cobertura और OpenCover यहाँ पहले से पढ़े जाते थे, जो अधिकांश नए .NET काम को कवर करता है और पुराने किस्म का कुछ भी नहीं। जो बिल्ड अब भी NCover की
Coverage.xml लिखता है, या जो टीम dotCover से मापती है, उसके पास डिस्क पर ऐसा कवरेज था जिसे यह एक्सटेंशन खोल नहीं पाता था। किसी भी फ़ॉर्मैट को कनवर्टर की ज़रूरत नहीं: दोनों पहले से फ़ाइल नाम और लाइन नंबर रखते हैं। - बाहर रखा गया NCover पॉइंट छोड़ दिया जाता है, न-चला हुआ नहीं गिना जाता।
excluded="true" उस कोड को चिह्नित करता है जिसे जानबूझकर मापन से बाहर रखा गया — [ExcludeFromCodeCoverage] वाला सदस्य, या NCoverExplorer फ़िल्टर। इसे अनकवर्ड गिनना मतलब होगा कि एक्सक्लूज़न उस संख्या को घटा दे जिसे सुधारने के लिए वह लिखा गया था। - dotCover को
/ReportType=DetailedXML चाहिए। इसकी दूसरी XML रिपोर्ट एक रोलअप है जिसमें कोई भी लाइन नंबर नहीं है; उस रिपोर्ट को पहचाना जाता है और उसे ठीक करने वाले फ़्लैग बताते हुए अस्वीकार किया जाता है, बजाय अज्ञात फ़ॉर्मैट के रूप में विफल होने के। dotCover प्रति स्टेटमेंट सिर्फ हाँ या ना दर्ज करता है, कभी विज़िट काउंट नहीं, इसलिए कवर किया गया स्टेटमेंट एक हिट के रूप में आता है।
0.2025.41 · बिल्ड 4 — म्यूटेशन टेस्टिंग: PIT और Stryker
2025-05-28
जोड़ा गया
- म्यूटेशन टेस्टिंग। कवरेज बताता है कि कोई लाइन चली; म्यूटेशन स्कोर बताता है कि वह लाइन बदलने पर कुछ असफल हुआ। एक सुइट किसी फ़ाइल की हर लाइन चला सकता है और इंजेक्ट किए गए किसी भी दोष को न पकड़े, और कोई भी कवरेज संख्या यह नहीं बताएगी। PIT Java, Kotlin और Scala को कवर करता है; Stryker JavaScript, TypeScript, C# और Scala को कवर करता है।
- इसे कभी कवरेज के साथ औसत नहीं किया जाता। "क्या यह लाइन चली" को "क्या बदलने पर किसी ने नोटिस किया" के साथ मिलाना दोनों में से किसी का उत्तर नहीं देता, इसलिए इसका संयुक्त स्कोर में कोई भार नहीं है और इसे अलग से
fuciniCoverage.threshold.mutation से गेट किया जाता है — डिफ़ॉल्ट रूप से 0, क्योंकि म्यूटेशन स्कोर बढ़ाने का लक्ष्य है, पहले ही दिन पार करने वाला मापदंड नहीं। - जिस म्यूटेंट को कभी निष्पक्ष रन नहीं मिला वह किसी भी आधे में नहीं गिना जाता। PIT का
NON_VIABLE और Stryker के CompileError तथा Ignored ऐसे म्यूटेशन हैं जिन्हें टूल बना ही नहीं सका; उन्हें अनडिटेक्टेड गिनना सुइट को उस दोष के लिए दंडित करना होगा जो उसे कभी दिया ही नहीं गया।
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 · बिल्ड 2 — ऑब्जेक्ट-कोड कवरेज, और उसके साथ असेंबली भी
2025-04-27
जोड़ा गया
- ऑब्जेक्ट-कोड कवरेज — बनी हुई बाइनरी का कितना हिस्सा वास्तव में चला। यहाँ की इकलौती मेट्रिक जो बिल्कुल भी स्रोत से नहीं मापी जाती: यह एक डिबगर से आती है जो असली टारगेट पर इंस्ट्रक्शन स्ट्रीम देखता है, टाइमिंग पर किसी भी प्रोब प्रभाव के बिना। यह इस सवाल का ईमानदार जवाब भी है कि "क्या यह असेंबली को कवर करता है?" — हाथ से लिखी असेंबली कभी इंस्ट्रुमेंट नहीं होती, और यहाँ की कोई भी अन्य मेट्रिक वहाँ तक नहीं पहुँचती।
- यह एक अपेक्षा है, कोई और भार नहीं। ऑब्जेक्ट-कोड कवरेज स्टेटमेंट कवरेज को समाहित करता है — यहाँ 100% का अर्थ वहाँ 100% है, उलटा नहीं — इसलिए संयुक्त स्कोर में इसका कोई भार नहीं है और इसके बजाय इसे एक सीमा से गेट किया जाता है, ठीक वैसे जैसे DO-178C स्तर A इसे MC/DC के अतिरिक्त माँगता है।
- अंतर ही असली परिणाम है। 100% लाइन कवरेज और 100% से कम ऑब्जेक्ट-कोड कवरेज वाला रन ठीक वही कंपाइलर-जनित कोड ढूँढ़ लाया है जिसका हिसाब आपके स्रोत में नहीं है; कंप्लायंस कार्ड इसे "94%" में दबाने के बजाय कहता है "312 बाइट कभी नहीं चले, जबकि लाइन कवरेज 100% है"। उलटा मामला — पूरी बाइनरी चली हुई बताई जाए जबकि उसका स्रोत नहीं — विरोधाभास के रूप में बताया जाता है, कम स्कोर के रूप में नहीं।
0.2025.38 · बिल्ड 2 — फ़ंक्शन-कॉल कवरेज, और VectorCAST तथा TRACE32 पूर्ण
2025-04-01
जोड़ा गया
- फ़ंक्शन-कॉल कवरेज — क्या हर कॉल साइट चलाई गई। फ़ंक्शन कवरेज से अलग सवाल: कोई फ़ंक्शन जो अपने तीन कॉल साइटों में से किसी एक से एक बार बुलाया गया, वह Functions के तहत पूर्ण है और यहाँ एक-तिहाई पूर्ण। VectorCAST, TRACE32 और Cantata सभी इसे रिपोर्ट करते थे जबकि इस मॉडल में उस संख्या को रखने की कोई जगह नहीं थी।
- यह VectorCAST और TRACE32 को पूर्ण बनाता है। पहले के रिलीज़ जानबूझकर इस डेटा को ब्रांच कवरेज में मोड़ने से इनकार करते थे, क्योंकि ब्रांच प्रतिशत को बढ़ा-चढ़ाकर दिखाना उस संख्या को बढ़ा देता है जो ऑडिट में जाती है। दोनों फ़ॉर्मैट अब वही लोड करते हैं जो वे हमेशा भेजते रहे।
बदला गया
- कंप्लायंस गेट और भारित स्कोर अब छह नहीं, सात मेट्रिक्स जानते हैं — दो नई सेटिंग्स,
fuciniCoverage.whmWeights.functionCalls और fuciniCoverage.threshold.functionCalls, सभी 17 भाषाओं में विवरण के साथ।
0.2025.37 — फ़ंक्शन कवरेज अब केवल जगह नहीं, गिनती के रूप में भी
2025-02-16
बदला गया
- अब फ़ंक्शन कवरेज तब भी गिना जाता है जब टूल यह न बताए कि फ़ंक्शन कहाँ हैं। TRACE32 का
func एक्सपोर्ट, VectorCAST के स्व-समापन <method> तत्व, और EMMA का method, % रोलअप — तीनों साफ़ तौर पर फ़ंक्शन गिनती बताते हैं, लेकिन CodeLens रखने के लिए कोई जगह नहीं देते — तीनों को आते ही छोड़ दिया जाता था। जहाँ डिक्लेरेशन मौजूद हैं वहाँ वे पसंदीदा स्रोत बने रहते हैं; जहाँ नहीं हैं वहाँ अब टूल द्वारा बताई गई संख्या को फ़ॉलबैक के रूप में इस्तेमाल किया जाता है।
0.2025.36 · बिल्ड 4 — UCIS और Aldec UCDB, और नए पार्सर लाइन तक टेस्ट किए गए
2025-02-03
जोड़ा गया
- UCIS और UCDB XML — सीधे सिम्युलेटर से VHDL और Verilog। इस नाम के दो दस्तावेज़ होते हैं, और किसी प्रोजेक्ट के पास वही होता है जो उसके सिम्युलेटर ने लिखा, इसलिए दोनों पढ़े जाते हैं: Accellera का मानक विनिमय रूप
<UCIS>, और Aldec का अपना ux:ucdb, जो असल में Active-HDL और Riviera-PRO से acdb2xml उत्पन्न करता है। स्टेटमेंट और ब्रांच कवरेज आ जाता है; टॉगल, FSM, एसर्शन और फंक्शनल कवरेज नहीं पढ़ा जाता, और केवल वही रखने वाला दस्तावेज़ खाली लोड होने के बजाय यह बता देता है। - ओपन-सोर्स VHDL को यहाँ पहले से ही कुछ नहीं चाहिए था: GHDL का GCC बैकएंड
-Wc,-ftest-coverage -Wc,-fprofile-arcs से इंस्ट्रुमेंट करता है, और परिणाम gcov, gcovr या lcov से होकर जाता है। यह रिलीज़ व्यावसायिक सिम्युलेटरों के लिए है।
0.2025.35 · बिल्ड 3 — EMMA XML, और Delphi के लिए आख़िरकार एक रास्ता
2025-01-22
जोड़ा गया
- EMMA XML। Delphi के लिए यहाँ आने का बिल्कुल कोई रास्ता नहीं था — न lcov, न Cobertura — और DelphiCodeCoverage
-xml के साथ ठीक यही स्कीमा लिखता है। यह वही भी है जो काफी पुराना Java टूलिंग आज भी उत्पन्न करता है, इसलिए एक पार्सर एक भाषा खोलता है और साथ ही एक विरासत को भी साफ करता है। -xmllines जोड़ें और रिपोर्ट को असली लाइन-वार हिट काउंट मिल जाते हैं, तो गटर काम करते हैं; इसके बिना केवल एक रोलअप प्रतिशत होता है, जिसे अनुमान के बजाय फ़ाइल सारांश और कोई गटर नहीं मिलता। डॉट वाला पैकेज नाम डायरेक्टरी तभी बनता है जब फ़ाइल Java-परिवार का स्रोत हो; Delphi रिपोर्ट में वही फ़ील्ड यूनिट नाम होता है, और उसे प्रीफ़िक्स देना ऐसा फ़ोल्डर गढ़ देगा जो डिस्क पर किसी के पास नहीं।
0.2025.34 · बिल्ड 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 · बिल्ड 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 · बिल्ड 4 — VectorCAST XML, और वह MC/DC जो चुपचाप छोड़ा जा रहा था
2024-12-08
जोड़ा गया
- VectorCAST XML। VectorCAST doctype तक एक Cobertura रिपोर्ट लिखता है, और फिर उन चीज़ों के लिए एट्रिब्यूट जोड़ता है जो सादा Cobertura नहीं बता सकता। इसका मतलब था कि ये फ़ाइलें यहाँ पहले से लोड हो रही थीं और पूर्ण दिखती थीं — जबकि
mcdcpair-coverage आते ही चुपचाप छोड़ दिया जाता था, ठीक उसी दर्शकों से जिन्होंने इसे बनाने के लिए ही खास तौर पर एक टूल खरीदा था। वे जोड़ी गिनतियाँ अब बचती हैं। वे MC/DC गेट, प्रतिशत और संयुक्त स्कोर को खिलाती हैं। - फ़ंक्शन-कॉल कवरेज को जानबूझकर अनुमानित नहीं किया जाता। इसे ब्रांच कवरेज में मोड़ना उस संख्या को बढ़ा-चढ़ा देगा जो ऑडिट में जाती है; यह तब तक इंतज़ार करता है जब तक मॉडल के पास इसके लिए कोई नाम न हो, जो 0.2025.38 में होता है।
बदला गया
- Cobertura रीडर अब एक बोली (dialect) साथ रखता है:
<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 आधा कवर न दिखे। Visual Studio का .coveragexml उन टीमों के लिए .NET को पूरा करता है जो Coverlet के बजाय MSTest और vstest पर हैं: पहले बाइनरी .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 तक सीमित था, इसलिए Go की coverage.out और gcov की .gcov.json.gz — दोनों ही फ़ॉर्मैट जिन्हें यह एक्सटेंशन पढ़ता है — ठीक उसी संवाद में धूमिल दिखती थीं जो आपसे फ़ाइल चुनने को कहता है।
- सामान्य Community इंस्टॉल अब अपने स्रोत का एक पृष्ठ नहीं भेजता। टिप्पणी-सहित स्रोत नमूने की रक्षा करने वाली जाँच हर Community इंस्टॉल को ऐसा मानती थी मानो उसने टेलीमेट्री विनिमय स्वीकार कर लिया हो, न कि केवल उन्हें जिन्होंने वास्तव में किया था।
- प्रति लोड दो के बजाय एक चेतावनी — जो फ़ाइल अपनी कवरेज से मेल नहीं खाती वह लगभग हमेशा रन के बाद संपादित भी हुई होती है, और दोनों की अलग-अलग रिपोर्ट होती थी।
- अनइंस्टॉल अब OS उपयोगकर्ता नाम और होम डायरेक्ट्री की रिपोर्ट नहीं करता — उस व्यक्ति के लिए जिसका लाइसेंस इसकी अनुमति नहीं देता।
0.2025.30 · बिल्ड 3 — जो आपका बिल्ड पहले से लिख ही रहा है
2024-10-18
जोड़ा गया
- Go कवरेज प्रोफ़ाइल।
go test -coverprofile ही एकमात्र कवरेज आउटपुट है जो मानक Go टूलचेन बनाती है — Rust, Dart और Elixir की तरह पीछे हटकर भरोसा करने लायक कोई lcov नहीं है — इसलिए किसी Go प्रोजेक्ट के पास ऐसा कुछ नहीं था जिसे यह एक्सटेंशन पढ़ सके। प्रोफ़ाइल पंक्तियाँ नहीं, बल्कि ब्लॉक दर्ज करती है, और ब्लॉक जिन पंक्तियों पर फैला है उन सबको उसकी गिनती मिलती है — बंद होने वाले कोष्ठक सहित, ठीक वैसे ही जैसे go tool cover -html उन्हें उजागर करता है। coverage.out अब डिफ़ॉल्ट खोज नामों में शामिल है, इसलिए बिना किसी कॉन्फ़िगरेशन वाला Go प्रोजेक्ट अपनी प्रोफ़ाइल वैसे ही पा लेता है जैसे C प्रोजेक्ट lcov.info पाता है।
- Clover XML और OpenCover XML। PHP प्रोजेक्ट्स के पास असल में जो होता है वह Clover है:
php-code-coverage Cobertura दे सकता है, पर उसका डिफ़ॉल्ट Clover है और लगभग हर phpunit.xml उसी को कॉन्फ़िगर करता है — यानी PHP की कवरेज यहाँ अपठनीय थी, जबकि पास ही एक Cobertura पार्सर ऐसे आउटपुट का इंतज़ार कर रहा था जिसे लगभग कोई नहीं बनाता। Istanbul का clover रिपोर्टर वही दस्तावेज़ लिखता है, इसलिए वैसे कॉन्फ़िगर किया गया Jest प्रोजेक्ट भी शामिल है। OpenCover .NET की ओर का समकक्ष है: C# और VB.NET पहले से Cobertura के रूप में आते थे, जो किसी निर्णय को condition-coverage="50% (1/2)" जैसी स्ट्रिंग में चपटा कर देता है — यानी कौन-सी शाखा चली, यह पार्सर के देखने से पहले ही खो जाता था। OpenCover हर शाखा के लिए विज़िट गिनती रखता है — यह जानने और यह जानने का अंतर कि शाखा का आधा हिस्सा कवर है बनाम कौन-सा आधा।
- coverage.py का JSON, और gcov/gcovr का JSON। coverage.py के Cobertura और lcov निर्यात को
# pragma: no cover वाली पंक्ति को या तो कवर हुआ या छूटा हुआ कहना ही पड़ता है, क्योंकि उनके पास «जानबूझकर बाहर रखा गया» के लिए कोई शब्द नहीं है — और इस एक्सटेंशन के पास है: वही ध्वज जो इसके LCOV_EXCL मार्कर लगाते हैं। इसलिए किसी Python प्रोजेक्ट के प्रैग्मा यहाँ वही अर्थ रखते हैं जो coverage.py की अपनी रिपोर्ट में रखते हैं। दूसरी ओर GCC की कवरेज केवल lcov या gcovr -x से होकर ही आती थी: उस डेटा को बदलने के लिए दूसरा उपकरण चलाना, जिसे GCC पहले ही बना चुका था। gcov --json-format --stdout और gcovr --json लगभग एक जैसे दस्तावेज़ देते हैं, और अब एक ही पार्सर दोनों को पढ़ता है।
ठीक किया गया
- टिप्पणियाँ उसी भाषा में पढ़ी जाती हैं जिसमें फ़ाइल लिखी है। गैर-कोड पंक्तियों का स्कैनर C के लिए लिखा गया था और हर फ़ाइल पर लागू होता था, जो तब तक सही था जब तक इस एक्सटेंशन द्वारा पढ़ा जाने वाला हर प्रारूप C-परिवार की भाषा का वर्णन करता था। अब नहीं:
# don't से टकराने पर C स्कैनर देखता है कि अपॉस्ट्रॉफ़ ने एक स्ट्रिंग खोल दी, उसे बंद होते कभी नहीं देखता, और टिप्पणी पंक्ति को कोड गिन लेता है — एक संख्या जो चुपचाप थोड़ी ग़लत होती है, और कुछ भी यह नहीं बताता। अब यह Python, Ruby, शेल, Perl, R, Elixir और Julia के लिए # है; PHP के लिए तीनों रूप, जो तीनों स्वीकारता है; और बाक़ी सबके लिए // तथा /* */, जो अज्ञात एक्सटेंशन के लिए डिफ़ॉल्ट बना रहता है — #define कोड है, और उसे बाहर करना उल्टी दिशा में ग़लत होता।
0.2025.29 · बिल्ड 4 — हर सेटिंग, समझाई हुई
2024-10-15
जोड़ा गया
- अब उस पैनल में हर
fuciniCoverage.* सेटिंग की जगह है, सिर्फ़ तेरह अनुपालन सेटिंग्स की नहीं। सभी पचपन उन्हीं अनुभागों में, उसी क्रम में समूहबद्ध हैं जिस क्रम में प्रकाशित सेटिंग्स संदर्भ है — इसलिए जिस पृष्ठ से आप कॉन्फ़िगर करते हैं और जिसे आप पढ़ते हैं, दोनों इस बात पर सहमत हैं कि कोई सेटिंग कहाँ रहती है। एक खोज बॉक्स नाम, कुंजी या विवरण से छानता है; एक जंप सूची अनुभागों के बीच ले जाती है। फ़ॉर्म रनटाइम पर एक्सटेंशन के अपने पैक किए गए मैनिफ़ेस्ट से निकाला जाता है — प्रकार, डिफ़ॉल्ट, सीमाएँ, विकल्प-सूचियाँ और गद्य का हर शब्द — इसलिए किसी सेटिंग के बारे में कुछ भी दो बार नहीं लिखा जाता और पैनल उस एक्सटेंशन से भटक नहीं सकता जिसे वह संपादित करता है।
- विवरण उस भाषा का अनुसरण करते हैं जो आपने तय की है। VS Code एक्सटेंशन लोड होते समय मैनिफ़ेस्ट का स्थानीयकरण एडिटर की डिस्प्ले भाषा से हल करता है और प्रति-एक्सटेंशन उसे बदलने का कोई तरीका नहीं देता — इसलिए अंग्रेज़ी एडिटर में
fuciniCoverage.language को जर्मन करने पर सेटिंग्स को छोड़कर सब कुछ अनूदित होता था। चूँकि पैनल उन फ़ाइलों को स्वयं पढ़ता और हल करता है, वही एकमात्र जगह है जो उस चयन का सम्मान कर सकती है।
- वे नियंत्रण जो कोई JSON स्कीमा माँग नहीं सकती। सेटिंग्स स्कीमा में ऐसा कुछ नहीं है जो किसी स्ट्रिंग को पथ के रूप में चिह्नित करे, इसलिए मूल इंटरफ़ेस उसके लिए चयनकर्ता नहीं दे सकता; निर्देशिका रखने वाली तीन सेटिंग्स को अब ब्राउज़ करें… बटन मिलता है।
coverageFile.paths और pathRemap को कच्चे JSON बॉक्स के बजाय असली सूची संपादक मिलते हैं, और हर colorScale रंग को उसके हेक्स मान के बगल में एक नमूना।
बदला गया
- सहेजना वही लिखता है जो आपने बदला, और कुछ नहीं। तेरह सेटिंग्स के साथ यह मुश्किल से मायने रखता था कि सहेजें सभी तेरह लिख देता है; पचपन के साथ इसका अर्थ होता कि एक संपादन पूरे नेमस्पेस को ऐसे
settings.json में छाप दे जिसमें दो पंक्तियाँ थीं। केवल वही सेटिंग्स लिखी जाती हैं जिनका मान वास्तव में बदला है, और डिफ़ॉल्ट के बराबर मान उस ओवरराइड को हटा देता है, बजाय इसके कि जो एक्सटेंशन पहले से देता है उसे दोहराए।
- आपकी लाइसेंस कुंजी हमेशा आपकी उपयोगकर्ता सेटिंग्स में जाती है, और पंक्ति यह कहती है।
license.key एप्लिकेशन-स्कोप घोषित है, यानी VS Code उसे केवल वहीं से पढ़ता है — उसे वर्कस्पेस में लिखना ऐसा सहेजना है जो काम करता दिखता है और कुछ नहीं बदलता। रीसेट करें अब चुने गए दायरे की सभी पचपन कुंजियाँ साफ़ करता है, तेरह नहीं, इसलिए पहले पूछता है। और पैनल के बाहर किया गया संपादन अब आपकी जगह नहीं छीनता: पृष्ठ फिर से बनाने से पहले तुलना करता है, इसलिए सहेजें दबाने पर पचपन पंक्तियाँ ऊपर वापस नहीं जातीं।
0.2025.28 · बिल्ड 3 — तेरह पंक्तियाँ, एक निर्णय
2024-10-12
जोड़ा गया
- अनुपालन मोड, सात थ्रेशोल्ड गेट और समग्र स्कोर के छह भार — अब इन सबका एक ही संपादक है। सेटिंग्स इंटरफ़ेस में ये तेरह असंबद्ध पंक्तियाँ हैं, पर व्यवहार में एक ही निर्णय: जब तक लागू मोड उसे पढ़ता नहीं, थ्रेशोल्ड निष्क्रिय रहता है; और जब तक निर्णय भारित गेट नहीं ले रहा, भार निष्क्रिय रहता है। Coverage दृश्य की शीर्षक पट्टी में गियर बटन पर मौजूद Fucini Coverage: Configure Coverage Compliance & Thresholds... इन तीनों को एक साथ लाता है, हर मोड को वहीं समझाता है जहाँ मोड चुना जाता है, और गेट को निष्प्रभावी बना देने वाले विन्यास — बिना किसी प्रति-मीट्रिक थ्रेशोल्ड वाला सख्त मोड,
0 थ्रेशोल्ड वाला भारित मोड, सभी 0 भार — को आपकी आँखों के सामने चेतावनी के रूप में नाम देता है।
- यह निर्णय का पूर्वावलोकन दिखाता है और VS Code के ज़रिए लिखता है। बिना सहेजा गया फ़ॉर्म लोड किए गए रन पर जो COMPLIANT / NON-COMPLIANT देता, उसकी गणना नियमों की दूसरी प्रति नहीं, बल्कि एक्सटेंशन का अपना अनुपालन इंजन करता है — क्योंकि ऐसा पूर्वावलोकन जो गेट से असहमत हो सकता है, किसी पूर्वावलोकन न होने से भी बुरा है। परिवर्तन सामान्य कॉन्फ़िगरेशन API से होकर
settings.json में जाते हैं — उपयोगकर्ता या वर्कस्पेस, आपकी पसंद — इसलिए फ़ाइल का प्रारूपण और उसकी टिप्पणियाँ VS Code सँभालता है; हाथ से या किसी दूसरी विंडो में किया गया संपादन खुले फ़ॉर्म में लौट आता है, चाहे कोई रन लोड हो या न हो। लाइसेंस की ज़रूरत नहीं: Community को वही संपादक मिलता है जो Pro को।
ठीक किया गया
- अपडेट सूचना का बटन
Download && Install दिखा रहा था। दोहरा ऐम्परसैंड निमॉनिक एस्केप है और package.json के शीर्षकों तथा मोडल संवादों में सही है — पर सूचना के क्रिया-बटन अपने लेबल को सादे पाठ की तरह लेते हैं, इसलिए दोनों वर्ण ठीक वैसे ही छपते रहे जैसे लिखे थे, सभी 17 भाषाओं में, हर उस व्यक्ति के लिए जिसे अपडेट की पेशकश की गई।
0.2025.27 · बिल्ड 7 — एक अदला-बदली जिसे आप स्वयं चुनते हैं
2024-09-30
बदला गया
- टेलीमेट्री डिफ़ॉल्ट रूप से बंद है। यह डिफ़ॉल्ट रूप से चालू भेजी जाती थी, इस तर्क पर कि मूल्यांकन ट्रायल को उन आँकड़ों की ज़रूरत है। वह तर्क तभी लागू होना बंद हो गया जब Community स्तर ने टेलीमेट्री चालू करने को वह चीज़ बना दिया जो हर Pro सुविधा को नि:शुल्क अनलॉक करती है: अदला-बदली का अर्थ तभी है जब व्यक्ति स्वयं वह करे, और जिस अदला-बदली को किसी ने चुना ही नहीं, वह अदला-बदली नहीं है। जब तक आप इसे चालू नहीं करते, कुछ भी नहीं भेजा जाता, और Community किसी भी हाल में अपनी मानक सुविधाओं के साथ काम करता रहता है।
- टेलीमेट्री सेटिंग बताती है कि वह किसलिए है, और बाकी के लिए लिंक देती है। इसका विवरण पहले हर उस फ़ील्ड को गिनाता था जो एक पिंग ले जाती है, जिसका अर्थ था उस सूची की दो प्रतियाँ — एक सेटिंग में, एक गोपनीयता नीति में — जिन्हें हमेशा एक-सा रहना था और जो नहीं रहीं। अब यह बताती है कि चालू करने से आपको क्या मिलता है और फ़ील्ड सूची के लिए गोपनीयता नीति से जोड़ती है, ताकि दो के बजाय एक ही सूची को सही रखना पड़े।
- इस रिलीज़ को इंस्टॉल करना आपकी मूल्यांकन अवधि को एक बार फिर से खोल देता है। जिनका ट्रायल पहले ही समाप्त हो चुका था, उन्हें नए 14 दिन मिलते हैं, क्योंकि यह रिलीज़ उन शर्तों को बदलती है जिनके तहत उन्होंने मूल्यांकन किया था: टेलीमेट्री के डिफ़ॉल्ट रूप से चालू रहते बीता ट्रायल उस उत्पाद का ट्रायल नहीं था जो अब पेश किया जा रहा है। यह जानबूझकर संस्करण के बजाय एक बार उपयोग होने वाले टोकन से जुड़ा है — हर रिलीज़ पर रीसेट करने का अर्थ होता कि अद्यतन रहने वाले किसी भी व्यक्ति के लिए ट्रायल कभी समाप्त ही न हो, और वह ट्रायल नहीं बल्कि कुछ अतिरिक्त चरणों वाला बिना मूल्य का लाइसेंस है। टोकन पहली सक्रियता पर खर्च हो जाता है और सामान्य नियम लौट आते हैं। सशुल्क लाइसेंस अछूता रहता है, क्योंकि कुंजी सत्यापन ट्रायल पर विचार होने से पहले ही लौट आता है, और Community अप्रभावित है क्योंकि उस संस्करण में फिर से खोलने योग्य कोई ट्रायल है ही नहीं।
- लाइसेंस कुंजी की कीमत अब प्रश्नावली नहीं है। सक्रियण संदेश, लाइसेंस-कुंजी सेटिंग और ट्रायल समाप्ति संवाद — सभी कुंजी को ऐसी चीज़ के रूप में प्रस्तुत करते थे जो प्रश्नों के उत्तर देने के बदले जारी की जाती है। ऐसा नहीं है: कुंजी अनुरोध पर अपने आप जारी होती है, और फ़ीडबैक प्रश्नावली स्वैच्छिक तथा पूरी तरह अलग है।
ठीक किया गया
- तीन जगहें अब भी "2026-12-31 तक" के ट्रायल का वादा कर रही थीं। उत्पाद में ऐसी कोई तिथि कभी रही ही नहीं — ट्रायल 14 दिन का है, जो प्रत्येक इंस्टॉल के लिए पहले उपयोग से गिना जाता है। पिछली दो रिलीज़ों ने इस दावे को सेटिंग विवरणों और README में पकड़ा था; यह इसी पृष्ठ के मूल्यांकन बॉक्स में, उपयोगकर्ता गाइड में और लाइसेंस टूलिंग के README में बचा रह गया। तीनों में सबसे बुरी उपयोगकर्ता गाइड थी: उसमें लिखा था कि यह अवधि "हर इंस्टॉल के लिए, दुनिया भर में, एक साथ (प्रति-इंस्टॉल उलटी गिनती नहीं)" लागू होती है, जो बिल्कुल उल्टा है, और यह भी कि ट्रायल समाप्त होने पर कवरेज प्रस्तुतीकरण रोक दिया जाता है, जबकि वास्तव में एक्सटेंशन मुफ़्त Community स्तर पर आ जाता है।
- टेलीमेट्री सूचना ईमेल गलत डोमेन से भेजे जा रहे थे।
From: हेडर fucini.consulting का मेलबॉक्स था जबकि उन्हें भेजने वाला सर्वर fucini.software है — ठीक वही संरेखण जिसके बारे में स्वयं सेटिंग की टिप्पणी चेतावनी देती है, और मेल को चुपचाप स्पैम में डलवाने या सीधे अस्वीकार करवाने का पक्का तरीका।
0.2025.26 · बिल्ड 2 — धूसर, गायब नहीं
2024-08-27
बदला गया
- रिपोर्ट में नामित पर डिस्क पर मौजूद न रहने वाली फ़ाइल अब वहीं दिखती है जहाँ उसका स्थान है — धूसर रंग में, और कारण बताते हुए। 0.2025.25 ने ऐसी फ़ाइलों के लिए स्थान गढ़ना बंद किया, जो सही था, पर उनके पास एक सापेक्ष पथ छोड़ दिया जो स्थान है ही नहीं — इसलिए पेड़ अब भी उसके पहले खंड से एक परियोजना बना देता था, और किसी सबमॉड्यूल की तीन हटाई गई स्रोत फ़ाइलें उसी सबमॉड्यूल के बगल में एक भुतहा
app में बैठी रहती थीं जहाँ से वे वास्तव में आई थीं। बेमेल दिखता तो था, यही मक़सद भी था, पर वह ग़लत जगह दिखता था और यह नहीं बताता था कि गड़बड़ क्या है।
- अब वह उसी परियोजना में दिखती है जहाँ से मापी गई थी, उसी फ़ोल्डर में जहाँ रिपोर्ट उसे रखती है — थीम के मध्यम धूसर रंग में और सामान्य अग्रभूमि रंग के बजाय तिरछे अक्षरों में। होवर करने पर वह पथ दिखता है जो उसका होता, साथ यह भी कि वहाँ कुछ नहीं है — बहुत संभव है कि रिपोर्ट बनने के बाद नाम बदला गया या हटा दिया गया — और यह कि उसके आँकड़े अब भी गिने जाते हैं। कुछ भी छोड़ा नहीं जाता और कोई कुल नहीं बदलता: वह पंक्ति स्वयं रिपोर्ट का कथन है, और धूसर करना ही उसे ऐसी पंक्ति जैसा दिखने से रोकता है जो खुलती है।
- अनुमान दृश्य के भीतर ही रहता है। फ़ाइल का दर्ज पथ अब भी ठीक वही है जो रिपोर्ट ने कहा, क्योंकि बाक़ी सब कुछ उसी से कुंजीबद्ध है — बाहरी रिपोर्ट का संवर्धन उसी से मिलान करता है, टेलीमेट्री उसे सापेक्ष बनाती है, एनोटेटेड दृश्य उसे खोलता है — और उन्हें अनुमानित स्थान देना ज्ञात को गढ़े हुए से बदलना होता। केवल पेड़ दोनों को जोड़ता है, और वह भी केवल उस पथ के लिए जो अपना कोई स्थान नहीं बताता: जो निरपेक्ष पथ बस मौजूद नहीं है, वह रिपोर्ट का कहा बनाए रखता है और जहाँ है वहीं धूसर हो जाता है।
0.2025.25 · बिल्ड 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 · बिल्ड 3 — आपकी सीट क्यों चली गई
2024-07-27
बदला गया
- गायब होने वाली सीट अब बताती है कि क्यों। हर निरस्तीकरण एक ही पंक्ति दिखाता था — इस प्लान में आपकी सीट अब सक्रिय नहीं है — जो गलत व्यक्ति पर लगाए गए आरोप जैसी पढ़ी जाती है। उपयोग में रही सीटों से नीचे घटाई गई टीम सदस्यता अब रियायत अवधि के बाद अतिरिक्त सीटें जारी कर देती है, और जो सीट खोता है उसने इसके सिवा कुछ नहीं किया कि वही था जिसने सबसे लंबे समय तक उसका उपयोग नहीं किया। जहाँ लाइसेंस सर्वर के पास कहने को कुछ उपयोगी होता है, एक्सटेंशन वह कहता है: घटाई गई सदस्यता में समाने के लिए जारी की गई सीट ठीक यही समझाती है और सदस्यता का प्रबंधन करने वाले की ओर इशारा करती है, और नई की (key) का अनुरोध करें तब भी उपलब्ध रहता है — क्योंकि लौटने का रास्ता असली है: जैसे ही वह व्यक्ति कोई सीट खाली करता है, पूल में जगह बन जाती है।
- समाप्त हो चुकी सदस्यता कोई बटन नहीं देती। समाप्त सदस्यता से नई की जारी नहीं की जा सकती, इसलिए उस सूचना पर उपलब्ध एकमात्र क्रिया केवल विफल ही हो सकती थी — और वह समाप्त सदस्यता के बजाय टूटे हुए एक्सटेंशन जैसी पढ़ी जाती है। अब यह बताती है कि क्या हुआ और वहीं रुक जाती है। इस बिल्ड द्वारा न पहचाना गया कोई भी कारण सामान्य शब्दावली बनाए रखता है: लाइसेंस सर्वर लगातार तैनात होता है और स्थापित एक्सटेंशन नहीं, इसलिए अनजान कारण मिलना असाधारण नहीं बल्कि सामान्य बात है — यह कभी कच्चा पहचानकर्ता नहीं दिखाता और कभी चुप नहीं रहता। दोनों नए संदेश सभी सत्रह भाषाओं में अनूदित हैं।
0.2025.23 · बिल्ड 5 — एक्सटेंशन से बाहर
2024-07-17
जोड़ा गया
- रन अब बाहर निकल सकता है — छह और फ़ॉर्मैट में। अब तक बाहर जाने के दो ही रास्ते थे: Fucini JSON, जिसे एक्सटेंशन के अलावा कुछ नहीं पढ़ता, और HTML रिपोर्ट, जिसे मशीनी रूप से कुछ भी नहीं पढ़ता। Export Coverage Report... एक फ़ॉर्मैट चयनकर्ता खोलता है और सक्रिय रन को इस रूप में लिखता है: प्रति फ़ाइल CSV (लाइनों, ब्रांचों, फ़ंक्शनों, MC/DC, रीजनों और इंस्टैंशिएशनों के लिए कवर/कुल/प्रतिशत, सबसे ख़राब पहले, एक
TOTAL पंक्ति के साथ), प्रति फ़ंक्शन CSV (हिट गिनती, वह चला या नहीं, उसके भीतर अनकवर्ड ब्रांचें, MC/DC जोड़े), पुल रिक्वेस्ट में चिपकाने योग्य Markdown सारांश, LCOV ट्रेसफ़ाइल, Cobertura XML, SARIF, या README के लिए स्वतः पूर्ण SVG बैज। यह कमांड पैलेट में, 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 पर टिप्पणी करता है; बैज को नेटवर्क नहीं चाहिए। अनकवर्ड रेंज
warning नहीं, note स्तर पर बताई जाती हैं: अनकवर्ड कोड टेस्ट सूट के बारे में सूचना है, और कोड स्कैनिंग चेतावनी को रोकने योग्य चीज़ मानती है — रोकने वाला गेट अब भी Check Coverage Thresholds है। बैज shields.io से लाने के बजाय यहीं बनाया जाता है, इसलिए यह एयर-गैप्ड या ऑन-प्रिमाइसेस रिपॉज़िटरी में भी काम करता है, और अपना रंग उसी colorScale से लेता है जिससे गटर और स्टेटस बार लेते हैं। मुफ़्त Community संस्करण में चयनकर्ता खुलता है और दोनों CSV काम करते हैं, Export Fucini JSON की तरह प्रतिदिन 20 एक्सपोर्ट की सीमा के साथ; विनिमय फ़ॉर्मैट सशुल्क स्तर पर हैं, उसी रेखा पर जो यह संस्करण हमेशा खींचता आया है — अपने आँकड़े पढ़ना मुफ़्त है, CI पाइपलाइन को खिलाना नहीं।
0.2025.22 · बिल्ड 3 — मापने को कुछ नहीं
2024-06-24
ठीक किया गया
- जिस फ़ाइल में इंस्ट्रुमेंट करने योग्य कुछ भी नहीं है, उसे अब 100% कवर के रूप में नहीं दिखाया जाता। केवल घोषणाओं वाली हेडर फ़ाइल — प्रोटोटाइप, एक मैक्रो, इन्क्लूड गार्ड — में फ़ंक्शन बॉडी नहीं होती, इसलिए कंपाइलर उसके लिए कोई कवरेज मैपिंग नहीं बनाता, और शून्य को शून्य से भाग देने वाली हर गणना 100% बताती है। वह पेड़ में हरे रंग में, सचमुच परखे गए कोड के बगल में बैठी रहती थी। अब दोनों रीडर टूल के अपने कुल आँकड़ों को ही उस फ़ाइल का अपना बयान मानते हैं — lcov में
LF/FNF/BRF, और llvm-cov JSON में summary ब्लॉक — और जिस फ़ाइल के सभी कुल शून्य हैं, उसे अंक देने के बजाय रन से बाहर रखा जाता है। उन कुल आँकड़ों के नीचे की पंक्तिवार प्रविष्टियाँ जान-बूझकर अनदेखी की जाती हैं: मैक्रो का विस्तार उस पंक्ति को दिया जाता है जो उसे परिभाषित करती है, जबकि गिनती उस पंक्ति की होती है जो उसे किसी दूसरी फ़ाइल में इस्तेमाल करती है — यही उधार ली गई पंक्ति ऐसी हेडर के मापा हुआ दिखने का एकमात्र कारण थी। रन के कुल आँकड़े भी उसे खो देते हैं, इसलिए मुख्य संख्या थोड़ी कम और कहीं अधिक सच्ची होती है। हटाया गया हर पथ आउटपुट चैनल में नाम से दर्ज होता है, और जिस रिपोर्ट में हर फ़ाइल केवल घोषणाओं की हो, उसमें सभी बनी रहती हैं।
बदला गया
- कवरेज फ़ाइल चुनना अब पहले से लोड फ़ाइलों को बदलने के बजाय उनमें जुड़ता है। जो बिल्ड हर मॉड्यूल की अलग रिपोर्ट लिखता है, उसमें पिन करने योग्य कोई एक फ़ाइल नहीं होती, और दूसरे मॉड्यूल की रिपोर्ट चुनने पर पहली चुपचाप हट जाती थी। अब डायलॉग एक साथ कई फ़ाइलें लेता है, हर चयन सेट में जुड़ता है, और चुनी गई सभी फ़ाइलें एक ही रन में मर्ज होती हैं — पैनल में हर प्रोजेक्ट के अपने नाम के नीचे दिखती हैं। निगरानी सभी पर लागू होती है, और कोई एक रिपोर्ट दोबारा बनने पर बाकी स्क्रीन से नहीं हटतीं। 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 · बिल्ड 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 — विंडोज़ पर, जहाँ दोनों रूप अलग होते हैं, उनके साथ फ़ॉरवर्ड-स्लैश वाले रूप भी।
⋯ बटन और उसका मेन्यू पहले जैसा ही है और नए मेन्यू की अंतिम प्रविष्टि है।
बदला गया
- जिस मीट्रिक का डेटा आपकी ट्रेसफ़ाइल में है ही नहीं, उसका मूल्यांकन अब नहीं होता। बिल्ड में MC/DC न होने पर भी MC/DC की थ्रेशोल्ड विफलता गिनी जाती थी — यानी जिस फ़ाइल ने बिल्ड द्वारा वास्तव में मापी गई हर मीट्रिक पर 100% पाया, वह "5 में से 3 पूरे" कहने वाले कार्ड के नीचे बैठी रहती थी, ऐसी सीमा के सामने जिसे उस ट्रेसफ़ाइल का कुछ भी कभी पार नहीं कर सकता था। डेटा-रहित मीट्रिक अब हर उस जगह छोड़ दी जाती हैं जहाँ निर्णय बनता है: प्रति-फ़ाइल स्टेटस बार, पूरे रन का कार्ड, एनोटेटेड स्रोत का बैनर और HTML रिपोर्ट। Check Coverage Thresholds अब भी अनुपस्थित मीट्रिक का नाम स्पष्ट रूप से बताता है — उसकी जगह वही है।
- जिन फ़ाइलों में मापने योग्य कुछ नहीं है, वे Coverage व्यू से बाहर रहती हैं। केवल घोषणाओं वाली हेडर फ़ाइल, केवल री-एक्सपोर्ट वाली फ़ाइल, केवल टाइप वाला मॉड्यूल: आपका लिखा कोई भी टेस्ट उनका आँकड़ा नहीं बदलेगा, और खोलने पर कोई मीट्रिक दिखती ही नहीं। 0.2025.19 में उन्हें एक डैश के साथ दिखाया जाता था; अब वे सूची में हैं ही नहीं, और इससे खाली रह गए फ़ोल्डर भी उनके साथ चले जाते हैं। जिस रन में कुछ भी मापने योग्य न हो, वह अब भी सब कुछ दिखाता है।
ठीक किया गया
- ड्राइव अक्षर अब भी ट्री के शीर्ष पर आ सकता था। जिस कवरेज के पथ खुले वर्कस्पेस के भीतर नहीं होते — किसी दूसरे प्रोजेक्ट से मर्ज की गई ट्रेसफ़ाइल, या बिना किसी फ़ोल्डर के खुली विंडो — वहाँ ट्री
W: से शुरू होता था, और Linux तथा macOS पर बिना किसी नाम वाली पंक्ति से: एक पंक्ति, ठीक एक संतान, जिसे खोलने का कोई अर्थ नहीं। अब पथ चाहे जैसे हों, फ़ाइल-सिस्टम रूट कभी नहीं बनाया जाता, और हर पंक्ति मेन्यू तथा एडिटर के लिए अपना असली पूर्ण पथ रखती है।
0.2025.19 · बिल्ड 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 · बिल्ड 4 — जहाँ छोड़ा, वहीं रहता है
2024-04-30
ठीक किया गया
- Coverage दृश्य में आपके द्वारा समेटे गए फ़ोल्डर हर रीलोड पर फिर से खुल जाते थे। वॉचिंग डिफ़ॉल्ट रूप से चालू है, इसलिए कवरेज दोबारा बनाने वाला बिल्ड पैनल को फिर से रेंडर करता है — और क्योंकि हर फ़ोल्डर खुला हुआ बनाया जाता था, किसी को समेटना केवल अगले बिल्ड तक टिकता था। बड़े ट्री में इसका मतलब था एक ही काम घंटे में कई बार करना। पैनल अब याद रखता है कि आपने कौन-से फ़ोल्डर बंद किए और उन्हें बंद ही रहने देता है। किसी बाद के रन में पहली बार दिखने वाली डायरेक्टरी अब भी किसी दूसरी की तरह खुली दिखती है: याद रखी जाती है किसी फ़ोल्डर को बंद करने की सोची-समझी क्रिया, डिफ़ॉल्ट स्थिति नहीं।
- टेलीमेट्री बंद करने से अनइंस्टॉल पिंग नहीं रुकता था। यह पिंग एक छोटी, स्वतंत्र स्क्रिप्ट भेजती है जिसे VS Code अनइंस्टॉल करते समय चलाता है। उसे VS Code API तक पहुँच नहीं है और वह आपकी सेटिंग्स नहीं पढ़ सकती, इसलिए उसे न भेजने को कहने वाली एकमात्र चीज़ उस फ़ाइल का न होना है जिसे एक्सटेंशन टेलीमेट्री चालू रहते लिखता है — और टेलीमेट्री बंद करने पर वह फ़ाइल कभी हटाई नहीं जाती थी। जिसने भी उसे चालू किया और बाद में बंद किया, वह अनइंस्टॉल करते समय फिर भी अपना OS उपयोगकर्ता नाम, होस्टनाम और होम डायरेक्टरी भेज देता। अब टेलीमेट्री बंद होते ही फ़ाइल हटा दी जाती है।
- Pro नवीनीकरण उस कुंजी के लिए सफलता बता सकता था जिसे आपने अभी-अभी बदला था। साइलेंट नवीनीकरण आपकी कॉन्फ़िगर की गई कुंजी दो बार पढ़ता था: एक बार यह तय करने के लिए कि नवीनीकरण करना है या नहीं, और बाद में फिर यह तय करने के लिए कि कुछ बताना है या नहीं। नवीनीकरण के दौरान नई कुंजी चिपकाने पर दूसरी बार पढ़ने में दूसरी कुंजी दिखती थी, और “आपकी Pro सदस्यता नवीनीकृत हो गई” संदेश उस कुंजी के बारे में होता था जिसे बदला जा चुका था। अब कुंजी केवल एक बार पढ़ी जाती है।
बदला गया
- एक्सटेंशन का हर मॉड्यूल अब अपने स्वयं के टेस्ट से कवर है। जिस टूल का पूरा काम आपको यह बताना है कि आपके टेस्ट वास्तव में कहाँ तक पहुँचते हैं, उसके लिए इसे ठीक से करना सार्थक लगा: 54 में से 53 सोर्स फ़ाइलें स्टेटमेंट, ब्रांच, फ़ंक्शन और लाइनों पर 100% पर हैं, और बची हुई एक — VS Code से जोड़ने वाली परत — अपने फ़ंक्शनों के 95% पर। उन्हें लिखते समय ऊपर बताई गई खामियाँ सामने आईं, साथ ही बीस से अधिक ऐसे गार्ड भी जो कभी चल ही नहीं सकते थे: उन जाँचों के पीछे खड़े फ़ॉलबैक जो उन्हें पहले ही बाहर कर चुकी थीं, जो सुरक्षा जाल जैसे दिखते थे पर कुछ नहीं पकड़ते थे। उन्हें ऐसे टेस्ट से ढकने के बजाय हटा दिया गया है जो कभी विफल न हो सके।
0.2025.17 — सही समय पर पूछा गया
2024-04-27
बदला गया
- वैकल्पिक फ़ीडबैक सर्वे अब तब तक प्रतीक्षा करता है जब तक आपने एक्सटेंशन का सचमुच उपयोग न कर लिया हो, और बेहतर क्षण पर पूछता है। पहले यह इंस्टॉल के बाद के कैलेंडर दिन गिनता था, यानी यह मापता था कि आपने इसे कितने समय पहले इंस्टॉल किया, न कि आपने इसे कभी काम करते देखा या नहीं — एक महीने तक अछूते पड़े इंस्टॉल से ऐसे उत्पाद को आँकने को कहा जाता था जिसने उसे कभी कुछ दिखाया ही नहीं। अब बीते समय के साथ वास्तविक कवरेज लोड भी आवश्यक हैं, और यह एडिटर के शुरू होते समय दिखाई नहीं देता: यह किसी सफल लोड की प्रतीक्षा करता है। एक वर्ष बाद तीसरा और अंतिम निमंत्रण आता है, क्योंकि एक ही तिमाही में दो निमंत्रण उस समय व्यस्त रहे हर व्यक्ति को हमेशा के लिए बाहर कर देते थे।
- डच अनुवाद अब औपचारिक नहीं है। यह हर जगह «u» से संबोधित करता था, जो डेवलपर टूल के लिए कठोर लगता है और उत्पाद की बाकी भाषा से मेल नहीं खाता था। सभी डच पाठ अब «je» का उपयोग करते हैं — वाक्य दर वाक्य फिर से लिखे गए, क्योंकि यह परिवर्तन क्रिया-रूपों को भी साथ बदलता है।
0.2025.16 — कोड, कंपनी नहीं
2024-04-23
बदला गया
- सक्रियण फ़ॉर्म अकेले काम करने वाले डेवलपर से "company code" माँगता था। Pro या Pro Plus अकेले खरीदने पर कोड आपकी अपनी सदस्यता से आता है — उसके पीछे कोई कंपनी नहीं होती, और कंपनी का कोड माँगे जाने पर लगता है कि आप गलत फ़ॉर्म पर हैं। यह फ़ील्ड अब Pro और Pro Plus के लिए Subscription code कहलाता है, और Business तथा Enterprise के लिए Company code ही रहता है, जहाँ टीम सचमुच एक साझा करती है। नीचे दिए संकेत पहले से हर योजना के अनुसार लिखे थे; केवल लेबल सामान्य रह गया था।
0.2025.15 · बिल्ड 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 चलाने पर उत्तर मिलता "पहले लोड की गई कवरेज वाली फ़ाइल खोलें", उस व्यक्ति को जो ठीक उसी फ़ाइल का एनोटेटेड दृश्य देख रहा था जिसमें कवरेज स्पष्ट रूप से है। अब यह आपके सामने खुले पैनल के पीछे की फ़ाइल पर वापस चला जाता है। वही अवरोध चुपचाप उस पुनर्जाँच को भी छोड़ देता था जिसके लिए दूसरी बार चलाना मौजूद है: जब llvm-cov HTML रिपोर्ट कॉन्फ़िगर हो, तो कमांड दोबारा चलाना ही पैनल को उस रिपोर्ट के अपने पृष्ठ पर ले जाता है — यानी अगर आपका कवरेज बिल्ड पैनल खोलने के बाद पूरा हुआ, तो पैनल से ही उस तक पहुँचना असंभव था।
0.2025.12 · बिल्ड 2 — जो सच है वही कहना
2024-02-15
जोड़ा गया
- सशुल्क Pro सदस्यता अब स्वयं नवीनीकृत होती है। हर सक्रियण कुंजी ठीक उतनी ही अवधि तक चलती है जितनी का भुगतान हुआ है। टीम प्लान अगली बार संपर्क करने पर नवीनीकृत अवधि ले लेते हैं, लेकिन व्यक्तिगत Pro कभी संपर्क नहीं करता — वह पूरी तरह ऑफ़लाइन काम करता है — इसलिए उस तक नवीनीकरण पहुँचाने वाला कुछ नहीं था, और मासिक ग्राहक की कुंजी चाहे वह कितनी भी नियमित रूप से भुगतान करे, लगभग हर महीने समाप्त हो जाती। अब एक्सटेंशन चुपचाप नई कुंजी माँगता है — केवल अपनी समाप्ति के आसपास के दिनों में, और केवल तब जब उसके पास वह कोड हो जो सिद्ध करता है कि किसी सदस्यता ने उसका भुगतान किया है। उस दौरान ऑफ़लाइन रहने की कोई कीमत नहीं: कुंजी वास्तव में समाप्त होने तक काम करती रहती है, और उसके बाद का अगला प्रयास उसे बहाल कर देता है।
- खरीद ईमेल से सक्रियण एक क्लिक में। लिंक आपका प्लान और कोड सीधे एक्सटेंशन को सौंप देता है — VS Code खोलने, कमांड ढूँढने और कोड हाथ से चिपकाने की ज़रूरत नहीं। सीट उपयोग करने से पहले हमेशा पुष्टि माँगी जाती है। कोड स्वयं दर्ज करना पहले की तरह ही काम करता है — लिंक एक शॉर्टकट है, कभी एकमात्र रास्ता नहीं — और यह Community बिल्ड में भी काम करता है।
ठीक किया गया
- एक सेटिंग के विवरण में दावा था कि एक्सटेंशन "2026-12-31 तक मुफ़्त चलता है"। ऐसी कोई तारीख उत्पाद में कहीं नहीं है। वास्तव में पहले उपयोग से गिनकर 14 दिन का ट्रायल है, जिसके बाद एक्सटेंशन मुफ़्त Community स्तर पर आ जाता है। अब विवरण यही कहता है, हर भाषा में।
- थ्रेशोल्ड सेटिंग्स अब उस रिलीज़ का उल्लेख नहीं करतीं जिसमें उनके डिफ़ॉल्ट बदले थे — वाक्य के बीच में लिखा संस्करण नंबर ऐसे प्रश्न का उत्तर देता है जो सेटिंग का विवरण पढ़ते समय कोई नहीं पूछता।
- कई अनूदित विवरणों में ऐसे कमांड का नाम था जो किसी भी अनूदित VS Code में नहीं दिखता। वे सक्रियण कमांड को उसके अंग्रेज़ी नाम से बताते थे, जिससे अंग्रेज़ी में काम न करने वाला हर व्यक्ति कमांड पैलेट में ऐसा टेक्स्ट ढूँढ़ता रह जाता जो वहाँ है ही नहीं।
0.2025.11 · बिल्ड 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 · बिल्ड 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 — उसी स्रोत से बनाई गई एक अलग, समर्पित लिस्टिंग, जिसमें सशुल्क टियर का ट्रायल/सक्रियण/टीम-प्लान कोड केवल छिपाया नहीं गया बल्कि वास्तव में अनुपस्थित है। डाउनलोड पेज देखें।
बदला गया
- Community बेसलाइन में Full HTML Report का निर्माण और स्थायी Annotated Source व्यू (सामान्य और साथ-साथ) अब सशुल्क टियर की सुविधाएँ हैं — केवल यथास्थान टॉगल व्यू बचा है, जिस पर पहले की तरह मासिक सीमा लागू है। अनलॉक करने पर यह सब अब भी मिलता है।
- Community टियर पर उपयोग-सीमा की चेतावनी अब एक ही संकेत में आगे बढ़ने के दोनों रास्ते देती है: सशुल्क प्लान देखें, या टेलीमेट्री के ज़रिए अनलॉक करें।
ठीक किया गया
- विस्तृत, संभावित रूप से पहचान कराने वाली टेलीमेट्री (OS उपयोगकर्ता नाम, होम डायरेक्टरी, CPU/RAM विनिर्देश, नेटवर्क इंटरफ़ेस, और पूरी रिपोर्ट/स्रोत सामग्री) अब केवल Community या टेलीमेट्री-आधारित निःशुल्क अनुदान द्वारा ही भेजी जा सकती है — स्थानीय टेलीमेट्री सेटिंग्स चाहे जो भी हों, किसी सशुल्क Pro/Pro Plus/Business/Enterprise लाइसेंस द्वारा कभी नहीं।
- पहले से किसी पुराने बिल्ड पर चल रहे इंस्टॉल को केवल अपग्रेड करने भर से अब नई ट्रायल अवधि नहीं मिलती — यदि उसका पुराना ट्रायल पहले ही समाप्त हो चुका था तो वह अब सही ढंग से Community टियर पर आ जाता है।
- अपडेट सूचना, डाउनलोड प्रगति, और त्रुटि संदेश अब आंतरिक बिल्ड नंबर उजागर करने के बजाय सामान्य
Major.Year.Minor संस्करण दिखाते हैं (वही जो VS Code के एक्सटेंशन व्यू में दिखता है), उदाहरण के लिए 0.2024.6.2 के बजाय 0.2024.6।
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 · बिल्ड 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 कवरेज जो उद्योग-मानक ट्रेसफ़ाइलों को ग्रहण करता है, उन्हें एक कैननिकल मॉडल में सामान्यीकृत करता है, रन को नियतात्मक रूप से मर्ज करता है, और VS Code के बिल्ट-इन Test Coverage API के माध्यम से रिपोर्ट करता है।
जोड़ा गया
- मल्टी-फ़ॉर्मैट ग्रहण — LCOV, llvm-cov JSON, Cobertura XML, JaCoCo XML, Istanbul/nyc और SimpleCov JSON, स्वतः पहचाने गए।
- नियतात्मक मर्ज — दर्ज उद्गम के साथ कई ट्रेसफ़ाइलों को एक रन में संयोजित किया गया, जो लोड क्रम की परवाह किए बिना स्थिर रहता है।
- नेटिव कवरेज UI — लाइन/ब्रांच/फ़ंक्शन गटर, ओवरव्यू रूलर, और बिल्ट-इन Test Coverage पैनल।
- MC/DC कवरेज — होवर पर प्रति-निर्णय विवरण और एक वैकल्पिक रंगीन मार्जिन गटर।
- समग्र स्कोर — लाइनों, ब्रांचों, फ़ंक्शनों, क्षेत्रों, MC/DC और C++ इंस्टैंशिएशन पर SIL-भारित हार्मोनिक माध्य।
- अनुपालन निर्णय —
strict, whm, both और either मोड के साथ COMPLIANT / NON-COMPLIANT गेटिंग।
- पाथ रीमैपिंग, डिफ कवरेज, Explorer बैज, और एक प्रोजेक्ट-व्यापी स्टेटस बार।
- एडिटर में विश्लेषण — फ़ंक्शन CodeLens, ब्रांच होवर, डेड-कोड चेतावनियाँ, पुराने कवरेज की चेतावनियाँ, और Next/Previous Uncovered।
- कवर की गई फ़ाइलें व्यू, HTML रिपोर्ट, इतिहास और रुझान, watch मोड, और Fucini JSON निर्यात।