QtCreator के लिए डुप्लिकेट कोड खोज प्लगइन

छवि

डुप्लिकेट कोड परिवर्तनों की शुरूआत, स्रोत ग्रंथों की समझ और उनके आगे रखरखाव को जटिल करता है। डुप्लिकेट से बचने के लिए, साथ ही कोड की गुणवत्ता और इसके रीफैक्टरिंग का मूल्यांकन करने के लिए, कुछ आईडीई में डुप्लिकेट कोड के टुकड़े खोजने के लिए अंतर्निहित उपकरण हैं। प्लगइन्स अन्य आईडीई के लिए लिखे गए हैं। हालाँकि, QtCreator विकास के वातावरण के लिए, अब तक कोई अंतर्निहित टूल या खोज प्लगइन्स पुनर्प्राप्त नहीं किया गया है।
लेख इस IDE में स्वचालित डुप्लिकेट खोज समस्या के दो समाधानों का वर्णन करता है: एक तृतीय-पक्ष उपयोगिता एकीकरण उपकरण का उपयोग करना और एक विकसित प्लग-इन का उपयोग करके मुझे आशा है कि QtCreator का उपयोग करके C ++ प्रोग्रामर के लिए उपयोगी होगा।

1 एक तृतीय-पक्ष डुप्लिकेट कोड खोज उपयोगिता का एकीकरण


तृतीय-पक्ष उपयोगिताओं का एकीकरण तंत्र QtCreator की कार्यक्षमता का विस्तार करने का एक शक्तिशाली साधन है। सेटअप प्रक्रिया को मैनुअल में विस्तार से वर्णित किया गया हैसिमियन कंसोल उपयोगिता - समानता विश्लेषक , जिसका उपयोग प्लगइन में भी किया जाएगा, को एक डुप्लिकेट खोज उपकरण के रूप में चुना गया था। इसे QtCreator में एकीकृत करने के लिए, आपको निम्नलिखित चरणों को पूरा करना होगा:
1. एप्लिकेशन इंस्टॉल करें।
विंडोज:
विंडोज सिस्टम के लिए हम एक exe एप्लिकेशन ( लेखक की साइट से डाउनलोड पृष्ठ) का उपयोग करेंगे। आपके द्वारा आवश्यक निर्देशिका में एप्लिकेशन के साथ संग्रह को अनपैक करें (उदाहरण के लिए, D: / Development / Simian)।
यूनिक्स आधारित:
यूनिक्स सिस्टम पर चलने के लिए (JREs का समर्थन करते हुए) सिमियन को जावा एप्लिकेशन के रूप में भी लागू किया जाता है। कुछ यूनिक्स प्रणालियों के लिए, सिमियन को पैकेज सिस्टम (उदाहरण के लिए, आर्क लिनक्स के लिए ) से स्थापित किया जा सकता है। यदि इस एप्लिकेशन के सिस्टम में पैकेज नहीं हैं, तो आपको लिंक से एप्लिकेशन के साथ संग्रह डाउनलोड करना होगा, इसे आवश्यक निर्देशिका में अनपैक करें (उदाहरण के लिए / usr / share / java / simian /), फिर PATH निर्देशिका में फ़ाइल "simian बनाएं (उदाहरण के लिए / usr / bin) "एप्लिकेशन स्टार्टअप स्क्रिप्ट युक्त:

#!/bin/bash java -jar /usr/share/java/simian/simian.jar $@ 

अंत में, यह फ़ाइल निष्पादित करने के लिए सेट की जानी चाहिए।
2. QtCreator के लिए एक बाहरी उपकरण जोड़ना
पर्यावरण सेटिंग्स अनुभाग के बाहरी उपकरण टैब पर, एक नई श्रेणी और उपयोगिता ( श्रेणी जोड़ें, उपकरण जोड़ें ) जोड़ें , एक उदाहरण नीचे स्क्रीनशॉट में दिखाया गया है।


निष्पादन योग्य फ़ील्ड में, प्रोग्राम की निष्पादन योग्य फ़ाइल के लिए पथ निर्दिष्ट करें (या यूनिक्स-आधारित सिस्टम के मामले में, "simian" दर्ज करें), तर्क फ़ील्ड में, स्टार्टअप तर्क निर्दिष्ट करें:
-failOnDuplication- -includes = ** / *। cpp -includes = ** / *। h -includes = *। cpp -includes = *। h।

कार्य निर्देशिका क्षेत्र में, वर्तमान परियोजना की निर्देशिका के लिए खाका निर्दिष्ट करें:
% {वर्तमानप्रकार: पथ}

इन सेटिंग्स के साथ, उपयोगिता एक्सटेंशन के साथ सभी फ़ाइलों में डुप्लिकेट की खोज करेगी। प्रोजेक्ट डायरेक्टरी और सभी उपनिर्देशिकाओं में .hpp और .h को।
अब बाहरी टूल मेनू में एक नया टैब दिखाई दिया है।


जब आप चेक मेनू आइटम चुनते हैं, तो सिमीयन उपयोगिता शुरू होती है और इसका आउटपुट संदेश पैनल पर पुनर्निर्देशित होता है, और डुप्लिकेट (संख्या, फ़ाइलें, लाइनें) के बारे में जानकारी प्रदर्शित होती है। यदि आप स्टार्टअप तर्क में विकल्प का उपयोग करते हैं
-reportDuplicateText +
, फिर डुप्लिकेट कोड भी प्रदर्शित किया जाएगा। सिमियन लॉन्च विकल्पों की एक पूरी सूची उपलब्ध है
लेकिन यह समाधान केवल उपयोगिता के प्रक्षेपण को स्वचालित करता है। पुनरावृत्तियों के साथ फाइलें खोलने और आवश्यक लाइनों की खोज करने के लिए यह "मैन्युअल रूप से" आवश्यक था। और मैं चाहता था कि यह अन्य प्लगइन्स और आईडीई की तरह हो: एक प्रविष्टि पर डबल-क्लिक करने से स्रोत फ़ाइल खुलती है, यह वांछित लाइन पर कूदता है और रिपीट टेक्स्ट हाइलाइट होता है। तब एक प्लगइन लिखने का फैसला किया गया था।

QtCreator के लिए 2 डुप्लिकेट कोड खोज प्लगइन


मुझे प्लग-इन डेवलपमेंट के साथ कोई अनुभव नहीं था, और QtCreator के लिए TODO प्लगिन लेख और क्यूटी क्रिएटर एक्सटेंशन सिस्टम ने अपरिहार्य सहायता प्रदान की। मुझे संपादक में फ़ाइल खोलने और ToDo प्लगइन के स्रोत कोड में वांछित लाइन पर जाने के लिए कोड मिला। सामान्य तौर पर, QtCreator के लिए प्लगइन्स लिखने के लिए प्रलेखन के साथ, चीजें काफी खराब हैं। मुझे रिप्ले के पाठ को उजागर करने की समस्या के समाधान के लिए अपेक्षाकृत लंबी खोज थी। कोड कवरेज परीक्षणों द्वारा कवरेज की डिग्री का आकलन करने के लिए प्लग-इन के स्रोत कोड में उत्तर मिला। मेरी राय में, QtCreator के लिए एक प्लग-इन लिखने में, स्रोत का अध्ययन करने में मुख्य मदद है। Qt प्रोजेक्ट वेबसाइट पर प्लगइन गैलरी में अधिकांश तृतीय-पक्ष प्लगइन्स के लिंक शामिल हैं। इनकंपरेन्सेबल प्रश्न सर्किल चैनल # qt-creator पर freenode.net पर भी पूछे जा सकते हैं। यदि आपके पास एक प्लगइन के लिए एक विचार है, तो इसे लागू करने का प्रयास करना सुनिश्चित करें। प्लगइन्स लिखना एक रोमांचक अनुभव है।

2.1 विधानसभा और प्लगइन की स्थापना

2.1.1 स्रोत और भवन QtCreator प्राप्त करना

हमें QECreator के लिए सोर्स कोड की आवश्यकता होगी, जो आईडीई और उसके लिए प्लगइन्स दोनों का निर्माण करे। यह भी माना जाता है कि आपके पास पहले से ही Qt, QtCreator स्थापित है और सभी आवश्यक सिस्टम चर कॉन्फ़िगर किए गए हैं। स्रोतों और विधानसभाओं को प्राप्त करने की प्रक्रिया को लेख बिल्डिंग क्यूटी क्रिएटर में गिट से विस्तार से वर्णित किया गया है। इस चरण को सफलतापूर्वक पूरा करने के बाद, हमारे पास 2 निर्देशिकाएं होंगी: क्यूटी-निर्माता, जिसमें स्रोत स्थित हैं, और क्यूटी-निर्माता-निर्माण, जहां इकट्ठे क्यूट्रीटर स्थित है।
एक छोटा विषयांतर:
इस प्रकार, अब हमारे पास दो QtCreator'a होंगे - स्थापित Qt वितरण की संरचना में से एक (हम इसे "स्थापित" कहेंगे) और एक - स्रोतों से इकट्ठा किया गया है (चलो इसे "इकट्ठे" कहते हैं)। मैं तुरंत एक आरक्षण कर दूंगा कि भविष्य में हम विशेष रूप से "इकट्ठे" निर्माता के लिए प्लगइन का निर्माण करेंगे। तथ्य यह है कि यदि आप QtCreator के नए संस्करण (स्रोत से प्राप्त) के लिए संकलित किए गए प्लगइन की बाइनरी फ़ाइलों का उपयोग करने का प्रयास करते हैं, तो एक निर्भरता रिज़ॉल्यूशन त्रुटि होगी।


इस स्थिति में, Core और ProjectExplorer प्लगइन्स का QtCreator के समान संस्करण होना चाहिए। यह इस तथ्य पर भी ध्यान देने योग्य है कि वितरण से QtCreator को Microsoft Visual Studio C ++ कंपाइलर कंपाइलर का उपयोग करके इकट्ठा किया गया है। इस प्रकार, Qt के साथ स्थापित QtCreator के लिए प्लग-इन बनाने के लिए, आपको QtCreator ( FromRevision लाइन के बारे में विंडो में विशिष्ट संशोधन) के लिए स्रोत कोड प्राप्त करने की आवश्यकता है, आपको MSVC के लिए QQ संस्करण भी चाहिए। मैं आगे QtCreator के लिए असेंबली का वर्णन नहीं करूंगा, जिसे MSVC कंपाइलर द्वारा संकलित किया गया है, और मुझे लगता है कि आप स्रोत से QtCreator के नवीनतम संस्करण को इकट्ठा करेंगे (और भविष्य में उपयोग करेंगे)। यदि आप एक प्लगइन विकसित कर रहे हैं, तो आपको दो QtCreator असेंबली की भी आवश्यकता होगी (जरूरी नहीं कि ऊपर के रूप में अलग-अलग हो, आपके पास उनमें से दो समान हो सकते हैं)। एक में, एक प्लगइन विकसित और इकट्ठा किया जाता है, और दूसरे में इसे कॉपी और परीक्षण किया जाता है। संकेत: प्लगइन को विकसित करते समय, जब यह दिखाई देने वाली खिड़की में इकट्ठा होता है, तो QtCreatora exe फ़ाइल का चयन करें जिसमें प्लगइन का परीक्षण किया जाता है, फिर प्लगइन के साथ QtCreator स्वचालित रूप से शुरू हो जाएगा।


हालाँकि, चलो प्लगइन पर वापस आते हैं।

2.1.2 स्रोत प्राप्त करना और सिमीयन प्लगइन का निर्माण करना

विकसित प्लगइन के स्रोत Sourceforge.net पर उपलब्ध हैं: QtCreator समानता विश्लेषण प्लगइन । आप स्रोतों के साथ संग्रह को डाउनलोड कर सकते हैं या उन्हें गिट रिपॉजिटरी से डाउनलोड कर सकते हैं। उसके बाद, "स्थापित" QtCreator में प्रोजेक्ट (simian.pro) खोलें। Simian.pro प्रोजेक्ट फ़ाइल में, आपको अपने कंप्यूटर पर स्रोत निर्देशिका और QtCreator असेंबली के पथ को दर्शाने वाली दो पंक्तियों को बदलना होगा:
 ## set the QTC_SOURCE environment variable to override the setting here QTCREATOR_SOURCES = $$(QTC_SOURCE) isEmpty(QTCREATOR_SOURCES):QTCREATOR_SOURCES=D:/Sources/QtCreator/qt-creator ## set the QTC_BUILD environment variable to override the setting here IDE_BUILD_TREE = $$(QTC_BUILD) isEmpty(IDE_BUILD_TREE):IDE_BUILD_TREE=D:/Sources/QtCreator/qt-creator-build 

वैकल्पिक तरीका: सिस्टम चर QTC_SOURCE और QTC_BUILD सेट करें।

हम प्लगइन के रिलीज संस्करण (Ctrl + R) को इकट्ठा करते हैं, जो एक सफल विधानसभा चरण के बाद कॉपी किया जाता है
D: \ Sources \ QtCreator \ qt-creator-build \ lib \ qtcreator \ plugins \ SnaSoftware

Simian.pro प्रोजेक्ट फ़ाइल में अगली पंक्ति प्लगइन को SnaSoftware फ़ोल्डर में कॉपी करने के लिए जिम्मेदार है।
प्रोवाइडर = SnaSoftware

इस स्थिति में, "प्रदाता" का अर्थ है "प्लगइन प्रदाता"। यदि आप इस लाइन पर टिप्पणी करते हैं, तो प्लगइन्स को "QtProject" डायरेक्टरी में कॉपी कर लिया जाएगा, जो मेरी राय में पूरी तरह से सही नहीं है (QtCreator के जो प्लगइन्स इस निर्देशिका में स्थित हैं)। इसलिए, एक मूल्य प्रदाता के रूप में , हैबे पर मेरे उपनाम का उपयोग किया गया था।
अब आप व्यवसाय में प्लगइन की कोशिश कर सकते हैं।

2.2 प्लगइन का उपयोग करना

2.2.1 प्रारंभिक सेटअप और स्टार्टअप

इससे पहले कि आप सेटिंग्स में अपनी परियोजनाओं के साथ फ़ोल्डर्स पर प्लगइन सेट करें, आपको सिमियन उपयोगिता निष्पादन योग्य फ़ाइल का पथ निर्दिष्ट करना होगा।
विंडोज में, इसके लिए, सिमीयन सेक्शन में सेटिंग्स डायलॉग बॉक्स ( टूल्स-> ऑप्शंस ) में जो दिखाई देता है, फाइल सिलेक्शन डायलॉग ( ब्राउज ... बटन इन सिमीयन एक्सेसेबल पाथ एरिया) का उपयोग कर यूटिलिटी एक्सई फाइल को सिलेक्ट करें। आप प्रोग्राम डाइरेक्टरी में भी पथ डाल सकते हैं। PATH सिस्टम वैरिएबल में simian , फिर एक्सैसिबल फील्ड में आप एक्सटे फाइल का नाम बिना एक्सटेंशन के बता सकते हैं (उदाहरण के लिए, कंसोल में शुरू करने की सुविधा के लिए, मैंने simian.exe का नाम बदलकर simian.exe रखा है , PATH वैरिएबल में प्रोग्राम का पथ शामिल किया है और पाठ क्षेत्र simian पाठ का उपयोग करते हुए)।
यूनिक्स-आधारित प्रणालियों के लिए, यदि आपने पहले से ही सेक्शन 1 से सिमियन उपयोगिता को स्थापित करने के लिए कदम पूरा कर लिया है, तो आपको निष्पादन योग्य स्क्रिप्ट "सिमियन" का नाम भी दर्ज करना होगा (मुझे याद दिलाता है कि यह पीएटीएच निर्देशिका में होना चाहिए)।
सेटिंग्स ( ओके या अप्लाई बटन) को सेव करने के बाद, प्लगइन का उपयोग किया जा सकता है। ऐसा करने के लिए, एक मौजूदा खोलें या एक नया प्रोजेक्ट बनाएं और पुनरावृत्ति की खोज शुरू करें। खोज या तो मेनू आइटम टूल का चयन करके लॉन्च की जाती है-> समानताओं को ढूंढें जो प्लगइन को स्थापित करने के बाद दिखाई देते हैं या सिमोन पैनल टैब पर बटन पर क्लिक करके। यदि आप एप्लिकेशन सेटिंग्स में बदलाव नहीं करते हैं, तो यह डिफ़ॉल्ट सेटिंग्स से शुरू होता है।
प्लग-इन का परीक्षण करने के लिए, हम एक नई Qt-प्रोजेक्ट GUI बनाएंगे, जिसके हेडर फ़ाइल में हम 2 फ़ंक्शन घोषित करेंगे और उनके कार्यान्वयन में हम एक ही कोड लिखेंगे जिसमें 6 शामिल हैं (चूंकि थ्रेशोल्ड सेटिंग का डिफ़ॉल्ट मान 6 समान कोड की 6 पंक्तियों में है, उदाहरण के लिए:
  int one; int two; int three; int four; int five; int six; 

अब एक्शन टूल चुनें-> QtCreator मेनू में समानताएं ढूंढें (इस मामले में, बनाई गई परियोजना सक्रिय होनी चाहिए)। स्रोतों का विश्लेषण करने के बाद, प्लग-इन (आउटपुट पैनल) के परिणामों को आउटपुट करने के लिए एक पैनल दिखाई देगा, जिसमें उन फ़ाइलों के लिंक होंगे जिनमें डुप्लिकेट पाए जाते हैं, जिस पर क्लिक करने पर ये फाइलें संपादक में खुल जाएंगी, और दोहराव के टुकड़े रंग में हाइलाइट किए गए हैं:


प्लगइन आपको न केवल टुकड़ों के सटीक मिलान के लिए खोज करने की अनुमति देता है, बल्कि टुकड़ों में विभिन्न प्रकार के टुकड़ों को पहचानने के लिए भी। ऐसा करने के लिए, आपको अतिरिक्त रूप से डुप्लिकेट कोड खोज मापदंडों को कॉन्फ़िगर करना होगा।

2.2.2 उन्नत सेटअप

सिमियन व्यवहार समूह में डुप्लिकेट कोड खोज सेटिंग्स हैं:

जब विकल्प संवाद बॉक्स में सेटिंग्स बदलते हैं और फिर उन्हें वर्तमान परियोजना की निर्देशिका में सहेजते हैं, तो एक simian.ini सेटिंग्स पाठ फ़ाइल बनाई जाती है । यदि वर्तमान प्रोजेक्ट के लिए डिफ़ॉल्ट सेटिंग्स का उपयोग किया जाता है, तो यह फ़ाइल नहीं बनाई गई है। यद्यपि यह दृष्टिकोण प्रोजेक्ट डायरेक्टरी में एक अतिरिक्त फ़ाइल जोड़ता है, वे सरल प्रतिलिपि द्वारा सेटिंग्स की पोर्टेबिलिटी की समस्या को हल करते हैं (अगली बार सेटिंग्स विंडो खुलने पर, इस फ़ाइल की उपस्थिति के लिए प्लगइन जांच करता है और सेटिंग्स को लोड करता है, या यह डिफ़ॉल्ट रूप से लोड होता है अगर ऐसी कोई फ़ाइल नहीं है)।
प्लगइन आपको खोज की गंभीरता को समायोजित करने की अनुमति देता है। बहुत कम ही, कॉपी किए गए पाठ भविष्य में अपरिवर्तित रहते हैं: स्ट्रिंग्स, डिजिटल स्थिरांक और चर नामों के मूल्यों को संशोधित किया जाता है। हालाँकि, कोड संरचना आमतौर पर अपरिवर्तित रहती है। किसी विशेष परियोजना के लिए इष्टतम सेटिंग्स या आवश्यकताओं को बदलने के लिए कोड की गुणवत्ता (अनुमेय पुनरावृत्ति) के लिए विकल्पों को बदलना संभव है, एक ही समय में न्यूनतम थ्रेसहोल्ड मान (2 लाइनें) के साथ सेटिंग्स और सभी सक्षम विकल्प एक ध्रुव पर स्थित होते हैं (जो पुनरावृत्तियों की खोज करते समय निरंतर मूल्यों को विविध बनाने की अनुमति देता है) पहचानकर्ता और आदि), और दूसरे पर - सबसे स्वीकार्य थ्रेशोल्ड मान और अक्षम सेटिंग्स विकल्पों के साथ (जो कोड के सटीक वाक्यविन्यास संयोग से मेल खाता है ताकि इसे एक दोहराव माना जाए)। उपयोग किए गए विकल्प और उनके विवरण तालिका में प्रस्तुत किए गए हैं:
विकल्पविवरण
द्वारएक रिपीट (2 से 99) के रूप में एक टुकड़े को गिनने के लिए कितनी लाइनों से मेल खाना चाहिए।
चरित्र मामले पर ध्यान न देंकेस-असंवेदनशील चरित्र स्थिरांक की तुलना करें ('ए' 'ए' के ​​बराबर है)
पात्रों को अनदेखा करेंपूरी तरह से चरित्र की कमी को अनदेखा करें ('ए' 'जेड' के बराबर है)
स्ट्रिंग मामले पर ध्यान न देंकेस असंवेदनशील तार की तुलना करें ("फू" "फू" के बराबर है)
तार को नजरअंदाज करेंलाइनों की सामग्री पर ध्यान न दें ("फू" "बार" के बराबर है)
संख्याओं पर ध्यान न देंसंख्यात्मक स्थिरांक के मान को अनदेखा करें (1 बराबर 2.5)
पहचानकर्ता मामले पर ध्यान न देंकेस-असंवेदनशील पहचानकर्ता नामों की तुलना करें (int foo; int FOO के बराबर;)
पहचानकर्ता मामले पर ध्यान न देंपहचानकर्ता नामों को अनदेखा करें (int foo; int bar के बराबर;)
मॉडिफायर्स को इग्नोर करेंसंशोधक को अनदेखा करें (सार्वजनिक, निजी, स्थिर, आदि)
घुंघराले ब्रेसिज़ को अनदेखा करेंब्रेसिज़ पर ध्यान न दें
ओवरलैपिंग ब्लॉकों को अनदेखा करेंओवरलैपिंग ब्लॉकों को अनदेखा करें
शेष वर्ग कोष्ठकलाइनों को लपेटते समय चौकोर कोष्ठक शामिल करें
शेष कोष्ठककोष्ठक को लाइन ब्रेक में ले जाएं

प्रस्तुत सेटिंग्स में से, यह मेरे लिए पूरी तरह से स्पष्ट नहीं है: ओवरलैपिंग ब्लॉक , बैलेंस स्क्वायर ब्रैकेट और बैलेंस कोष्ठक को अनदेखा करें , इसलिए मैं पाठक द्वारा होमवर्क के रूप में अपनी समझ छोड़ने की अनुमति देता हूं।

निष्कर्ष


प्रोग्रामिंग में, हालांकि, किसी भी पेशेवर गतिविधि के रूप में, हमेशा विकसित करना आवश्यक है। इसी समय, मेरी राय में, यह न केवल नई प्रौद्योगिकियों, डिजाइन पैटर्न या प्रोग्रामिंग तकनीकों का अध्ययन करने के लायक है, बल्कि आपके वाद्य यंत्रों में भी सुधार कर रहा है। कभी-कभी अपनी पसंदीदा आईडीई पर एक नज़र डालना और इसकी तुलना दूसरे के साथ करना (भले ही यह एक अलग प्रोग्रामिंग भाषा के लिए करना हो) करने के लिए पर्याप्त है। अपने लिए एक नई और दिलचस्प कार्यक्षमता पर ध्यान देने के बाद, यह मौजूदा प्लगइन्स के बीच देखने लायक हो सकता है, और आप स्वयं कुछ लागू करना चाह सकते हैं। मुझे उम्मीद है कि समय के साथ QtCreator प्लगइन सिस्टम पर अच्छे प्रलेखन होंगे और फिर हमारे पास हमारे निपटान के लिए और भी अधिक सुविधाजनक और उपयोगी उपकरण होंगे। अगले लेख में मैं मौजूदा प्लग-इन (जिन्हें मैं ऊपर वर्णित प्लग-इन लिखने की प्रक्रिया में मिला था) के सबसे दिलचस्प और उपयोगी का अवलोकन देने की कोशिश करूँगा।
प्लगइन के विकास के लिए योजनाएं:
1. यूनिक्स-आधारित सिस्टम के तहत प्लगइन का निर्माण और परीक्षण करें। लेख केवल यूनिक्स-सिस्टम के लिए प्रक्रिया का वर्णन करता है, जो "सिद्धांत रूप में" काम करना चाहिए, लेकिन व्यवहार में परीक्षण नहीं किया गया है।
2. इंटरफ़ेस कार्यक्षमता का विस्तार ("सूची का पतन-विस्तार करें" बटन, पुनरावृत्ति की फ़ाइलों / लाइनों की संख्या का आदेश, सेटिंग्स में पाठ को उजागर करने के लिए रंग सेट करना, आदि)।
3. निरीक्षण परिणामों पर रिपोर्ट के साथ HTML फ़ाइल पीढ़ी जोड़ना।
4. अन्य डुप्लिकेट कोड सर्च यूटिलिटीज को जोड़ना, जिसमें से किसी एक का उपयोग करना हो।

कृपया टिकट सिस्टम में या फ़ीचर रिक्वेस्ट / बग रिपोर्ट फ़ोरम अनुभाग में सभी इच्छाओं, टिप्पणियों और त्रुटि संदेशों को लिखें।
UPD: लेख के पाठ के अनुसार परीक्षण के मामले का स्क्रीनशॉट और पाठ लाया (टिप्पणियों में चर्चा देखें)

Source: https://habr.com/ru/post/In213785/


All Articles