QtCreator 2.5.0 के लिए TODO प्लगइन का संशोधन

बस दूसरे दिन, QtCreator 2.5.0 जारी किया गया था, और इसमें TODO प्लगइन दिखाई दिया। लेकिन यह प्लगइन फ़ॉर्म की टिप्पणियों का समर्थन करता है: <KEYWORD>: <कुछ पाठ>, और हर जगह मैं doxygen टिप्पणियों का उपयोग करता हूं: @ <KEYWORD> <SOME_TEXT>। इसलिए, मैंने प्लगइन को संशोधित करने का निर्णय लिया ताकि यह दोनों प्रकार की टिप्पणियों का समर्थन कर सके।

ट्रेनिंग


इसलिए, सबसे पहले, मैंने आधिकारिक प्रोजेक्ट रिपॉजिटरी को क्लोन किया , पर्यावरण की स्थापना की (QtCreator-2.5.0 को Qt को कम से कम 4.7.4 संस्करण बनाने की आवश्यकता है, इसलिए मुझे भी Qt का निर्माण करना पड़ा, मैंने संस्करण 4.8.1 चुना)।

कार्यान्वयन


नई कार्यक्षमता जोड़ना

दरअसल, प्लगइन का कोड ही बहुत सरल और सीधा है। कीवर्ड के बारे में जानकारी रखने वाला मुख्य वर्ग कीवर्ड है। कीवर्ड के प्रकार को निर्धारित करने के लिए, हम एक नई इकाई शुरू करते हैं:
 enum KeywordStyle { DefaultKeywordStyle, DoxygenKeywordStyle }; 

और हम Keyword क्लास में एक नया style फील्ड और एक नया QString searchingText() const; विधि जोड़ते हैं QString searchingText() const; । यह विधि वह स्ट्रिंग लौटाती है जिसके द्वारा कीवर्ड खोजा जाता है, यहाँ इसका कार्यान्वयन है:
 QString Keyword::searchingText() const { if (style == DefaultKeywordStyle) return name + QLatin1Char(':'); else { Q_ASSERT(style == DoxygenKeywordStyle && "keywordStyle is not properly configured"); return QLatin1Char('@') + name.toLower(); } } 

हम समतुल्य विधि की तुलना में संबंधित style क्षेत्र भी जोड़ते हैं।

एक नए क्षेत्र का उपयोग करना

अब, हमें name फ़ील्ड के उपयोग को नए searchingText विधि के साथ बदलने की आवश्यकता है। यह तीन तरीकों में LineParser वर्ग में किया जाना चाहिए:


कॉन्फ़िगरेशन समर्थन

अब प्लगइन पहले से ही जानता है कि कीवर्ड जानकारी के आधार पर TODO सूची को कैसे खोजना और उत्पन्न करना है। अब हमें कीवर्ड बनाने, सहेजने और संपादित करने के लिए तंत्र को परिष्कृत करने की आवश्यकता है।

ऐसा करने के लिए, पहले, हम Settings वर्ग के कार्यान्वयन को ठीक करेंगे। इस वर्ग में, हम setDefault loadsave setDefault को loadsave करेंगे।

load विधि कॉन्फ़िगरेशन से कीवर्ड जानकारी को पुनर्स्थापित करता है। चूंकि कॉन्फ़िगरेशन पुराने प्रारूप में हो सकता है, डिफ़ॉल्ट रूप से हमें कीवर्ड प्रकार को DefaultKeywordStyle सेट करना चाहिए। वास्तव में, इस पद्धति का परिशोधन अपने आप में काफी तुच्छ है, केवल दो पंक्तियों को जोड़ा गया था:
 const QString styleKey = QLatin1String("style"); //... keyword.style = static_cast<KeywordStyle>(settings->value(styleKey, DefaultKeywordStyle).toInt()); 


इसी प्रकार, save विधि अपडेट की गई है:
 const QString styleKey = QLatin1String("style"); //... settings->setValue(styleKey, keyword.style); 

डिफ़ॉल्ट मानों को पुनर्स्थापित करने के लिए setDefault विधि का उपयोग किया जाता है:
 void Settings::setDefault() { scanningScope = ScanningScopeCurrentFile; keywords.clear(); setDefaultKeywordStyle(); setDoxygenKeywordStyle(); } void Settings::setDefaultKeywordStyle() { Keyword keyword; keyword.name = QLatin1String("TODO"); keyword.iconResource = QLatin1String(Constants::ICON_WARNING); keyword.color = QColor(QLatin1String(Constants::COLOR_TODO_BG)); keyword.style = DefaultKeywordStyle; keywords.append(keyword); //...     } void Settings::setDoxygenKeywordStyle() { Keyword keyword; keyword.name = QLatin1String("todo"); keyword.iconResource = QLatin1String(Constants::ICON_WARNING); keyword.color = QColor(QLatin1String(Constants::COLOR_TODO_BG)); keyword.style = DoxygenKeywordStyle; keywords.append(keyword); //...     } 


यूआई समर्थन

और अंत में, यह जीयूआई में नए क्षेत्र के लिए समर्थन को लागू करने के लिए बना हुआ है। ऐसा करने के लिए, मैंने ui में एक चेक बॉक्स फ़ाइल जोड़ी, ताकि मैं कीवर्ड के प्रकार को निर्धारित कर सकूं


अब यह KeywordDialog कार्यान्वयन को एक नई style फ़ील्ड और एक नया चेक बॉक्स के साथ लागू करने के लिए बना हुआ है। क्लास कंस्ट्रक्टर में, चेकबॉक्स को सक्षम / अक्षम करने के लिए कोड जोड़ें:
  if (keyword.style == DoxygenKeywordStyle) ui->doxygenStyleCheckBox->setCheckState(Qt::Checked); else ui->doxygenStyleCheckBox->setCheckState(Qt::Unchecked); 

ui से Keyword जनरेशन विधि में ui संबंधित कोड भी जोड़ते हैं:
  result.style = (ui->doxygenStyleCheckBox->checkState() == Qt::Checked) ? DoxygenKeywordStyle : DefaultKeywordStyle; 


इसके अलावा, OptionsDialog क्लास को सही करना आवश्यक है, क्योंकि Keyword क्लास की ऑब्जेक्ट्स OptionsDialog क्लास की ऑब्जेक्ट्स में बदल जाती हैं। इसके लिए, मैंने ऐसे परिवर्तनों को अलग-अलग तरीकों से अलग किया:
 void OptionsDialog::itemFromKeyword(const Keyword &keyword, QListWidgetItem *item) { item->setIcon(QIcon(keyword.iconResource)); item->setText(keyword.name); item->setData(Constants::IconResourceRole, keyword.iconResource); item->setData(Constants::KeywordStyleRole, keyword.style); item->setBackgroundColor(keyword.color); } Keyword OptionsDialog::keywordFromItem(const QListWidgetItem *item) { Keyword keyword; keyword.name = item->text(); keyword.iconResource = item->data(Constants::IconResourceRole).toString(); keyword.color = item->backgroundColor(); keyword.style = static_cast<KeywordStyle>(item->data(Constants::KeywordStyleRole).toInt()); return keyword; } 
और मैंने इन विधियों को कॉल के साथ कोड में सभी परिवर्तनों को बदल दिया।

परिणाम


यहाँ यह मेरे लिए कैसा दिखता है:

मैंने एक एप्लिकेशन भी बनाया, एक पैच संलग्न किया जो वर्णित कार्यक्षमता को लागू करता है।

असल में, आप DoxygenKeywordStyle में बैकस्लैश सपोर्ट भी जोड़ सकते हैं, क्योंकि Doxygen प्रलेखन:
प्रलेखन में सभी कमांड एक बैकस्लैश (\) या एक एट-साइन (@) से शुरू होते हैं

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


All Articles