2013-06-08 9 views
12

का उपयोग कर ग्रे आउट लॉगिंग कोड क्या ReSharper का उपयोग करके उपयोगी लेकिन ब्लॉटी कोड ग्रे करने के लिए रीशेर्पर का उपयोग करना संभव है? उदाहरण के लिए, जब मैं वर्बोज़ लॉगिंग जोड़ना चाहता हूं तो लॉगिंग कोड के आसपास कार्यात्मक कोड खड़ा होना अच्छा होगा।ReSharper

मैंने अपने कोड में पैटर्न से मेल खाने के लिए रीशेर्पर की पैटर्न कैटलॉग खोज का उपयोग करने की कोशिश की है और उन्हें भूरे रंग में हाइलाइट किया है, लेकिन यह केवल संकेत, सुझाव, चेतावनियां और त्रुटियों का समर्थन करता है।

मैं रिलीज मोड में Debug.WriteLine प्रदर्शित करने के समान कुछ ढूंढ रहा हूं, हालांकि मैं संकलित करने के लिए कोड नहीं चाहता हूं।

+3

यह एक दिलचस्प विचार है। आप इसे अपने मुद्दे ट्रैकर पर सुझाव दे सकते हैं: http://youtrack.jetbrains.com/issues/RSRP –

+0

यह यहां सुझाया गया है: https://youtrack.jetbrains.com/issue/RSRP-437773 –

उत्तर

-3

बस इसे मत करें।

असंगठित कोड से निपटने का यह एक बुरा तरीका है, और यह केवल थोड़ा सहायक होगा, और केवल आपके लिए। यदि आप इसे सुझाते हैं (यदि संभव हो), अन्य डेवलपर्स को रीशेपर स्थापित करना होगा और यदि आप व्यवसाय तर्क को खड़े करना चाहते हैं तो इसे आपके जैसा कॉन्फ़िगर करना होगा।

यह आपने नहीं पूछा है, लेकिन मुझे लगता है कि वर्बोज़ लॉगिंग को अलग-अलग तरीकों/कक्षाओं में स्थानांतरित करने का बेहतर तरीका है। फिर लॉगिंग-संबंधित कोड केवल आपके वर्तमान तरीकों में एक विधि विधि होगा।

+1

आप स्थानांतरित नहीं कर सकते विधियों को अलग करने के लिए सभी प्रचलित कोड (जैसे लॉगिंग या चेकिंग), यह आम तौर पर तर्क के साथ अंतःस्थापित होता है। –

9

आप इसे प्राप्त करने के क्रमबद्ध कर सकते हैं, लेकिन यह एक हैक की तरह है। आप क्या कर सकते हैं, रीसर्पर के External Annotations का उपयोग करके ConditionalAttribute के साथ अपने लॉगिंग विधियों को सजाने के लिए है।

एनोटेशन लगभग हर जगह ReSharper में उपयोग किया जाता है, यह है कि यह कैसे रिलीज में Debug.WriteLine लाइन बाहर ग्रे, उदाहरण के लिए जानता है के बाद से Debug.Write... लाइनों [Conditional("DEBUG")] विशेषता के साथ सजाया जाता है,।

क्या आप है ReSharper बनाकर धोखा कर सकता है कि इस तरह के एक सशर्त विधि अपने लकड़हारा के तरीकों पर मौजूद है लगता है। आप इसे एक्सएमएल के माध्यम से बाहरी रूप से इस विशेषता को लागू करके कर सकते हैं।

मैं my blog में कुछ इस तरह कर रही है के बारे में लिखा है, यहाँ तुम ऐसा कैसे कर सकता है है:

  1. एक फ़ाइल YourLogger.ExternalAnnotations.xml बनाएं जिसका नाम है, उदा NLog.ExternalAnnotations.xml और इसे अपने लॉगर असेंबली के बगल में रखें।
  2. निम्नलिखित जोड़ें:
<assembly name="NLog"> 
    <member name="M:NLog.Logger.Info(System.String)"> 
    <attribute ctor="M:System.Diagnostics.ConditionalAttribute.#ctor(System.String)"> 
     <argument>LOG</argument> 
    </attribute> 
    </member> 
    <member name="M:NLog.Logger.Debug(System.String)"> 
    <attribute ctor="M:System.Diagnostics.ConditionalAttribute.#ctor(System.String)"> 
     <argument>LOG</argument> 
    </attribute> 
    </member> 
</assembly> 

प्रत्येक विधि आप "बाहर ग्रे" करना चाहते हैं के लिए, आप विधि की एक्सएमएल-दस्तावेज आईडी नाम के साथ एक <member> ब्लॉक जोड़ने की आवश्यकता होगी। ReSharper 8 EAP में एक विकल्प है रीस्पर के के तहत स्थित क्लिपबोर्ड पर एक्सएमएल-डॉक आईडी कॉपी करें मेनू संपादित करें।

यह अनिवार्य रूप से ReSharper के इंजन को लगता है कि [Conditional("LOG")] लॉगर के प्रकार मेटाडेटा में परिभाषित किया गया है।

सभी वांछित विधियों को जोड़ने के बाद, बस समाधान को पुनः लोड करें। आपको जो चाहिए वह मिलना चाहिए (तरह ...जैसे मैंने कहा, यह एक हैक है :))

ReSharper hackery

+0

मैं इसे करने की अत्यधिक अनुशंसा नहीं करता हूं, क्योंकि '[सशर्त] 'विशेषता द्वारा छोड़ा गया चालान सी # कंपाइलर नियंत्रण प्रवाह ग्राफ और निश्चित असाइनमेंट विश्लेषण, साथ ही आर # के कोड विश्लेषण को प्रभावित करता है। ReSharper '[सशर्त]' आमंत्रण के हिस्से के रूप में मूल्यांकन किए जाने वाले अभिव्यक्तियों के बारे में किसी भी उपयोगी जानकारी को अनदेखा कर देगा, जो कि कोड पर सिर्फ भूरे रंग के लिए "बहुत अधिक" है। एक प्लगइन बेहतर बेहतर :) – ControlFlow

+1

@ControlFlow मुझे शायद "घर पर यह कोशिश न करें" अस्वीकरण करना चाहिए :) –