अनुरोध:पुनर्विक्रेता प्लगइन में गतिशील रूप से एएसटी को फिर से लिखना कैसे?
मैं एक विश्लेषक लिखने में सक्षम होना चाहता हूं जो एक निश्चित अभिव्यक्ति के लिए प्रॉक्सी मान प्रदान कर सकता है और दस्तावेज़ की पुन: विश्लेषण को ट्रिगर कर सकता है।
प्रेरणा:
हमारे कोड ABTests है कि या तो एक नियंत्रण और संस्करण समूह के साथ एक तैनात या सक्रिय स्थिति में हो सकता है से अटे पड़े है। एक परीक्षण की स्थिति निर्धारित करना डेटाबेस लुकअप के माध्यम से किया जाता है। मैं कम से यह पक्का हो जानेवाला द्वारा समय विकसित से निपटने के लिए इस आसान बनाने के लिए टूलींग प्रदान करने के लिए कोशिश कर रहा हूँ
if(ExperimentService.IsInVariant(ABTest.Test1))
{
}
: परीक्षण है कि नियंत्रण समूह के साथ तैनात किया गया है के लिए, निम्न प्रपत्र के किसी भी बयान को गलत पर मूल्यांकन करेंगे इस परिदृश्य में बाहर। जैसा कि यह है, यह काफी सीमित है और मजबूत नहीं है क्योंकि मुझे मूल रूप से खुद को पार्सर खेलना है।
क्या होगा अगर वास्तविक कोड
if(!ExperimentService.IsInVariant(ABTest.Test1))
या
if(ExperimentService.IsInVariant(ABTest.Test1) || true)
या
var val = ..... && (ExperimentService.IsInVariant(ABTest.Test1);
if(val){
// val is always going to be false if we deployed control.
}
एक संभावित दृष्टिकोण मैं प्रदान की देख सकता है विश्लेषक कि निकाल दिया जाता है लिखने के लिए अनुमति देकर है एक बार वास्तविक आईडीई पार्सिंग होने से पहले पेड़ को फिर से लिखना (या, ठीक है, बस इसे दूसरी बार पार्स करें)। इन्हें केवल एक बार आग लगनी चाहिए और हमें एक निश्चित अभिव्यक्ति को दूसरे के साथ बदलने की अनुमति दें। इससे मुझे इन सभी प्रयोगों को सही और झूठे अक्षर के लिए स्वैप करने की अनुमति मिल जाएगी।
नतीजतन, इन वर्गों में इस तरह के कोड
पहुँच योग्य नहीं कोड के लिए पक्का हो जानेवाला लेकिन यह भी एक चर की तरह अधिक जटिल वाले कभी नहीं होगा कि एक अलग मूल्य के रूप में अन्य सभी आईडीई सुविधाओं से फायदा हो सकता है जाहिर है यह सिर्फ एक उदाहरण है और मुझे यकीन नहीं है कि यह कितना व्यवहार्य है। उचित सुविधा या कुछ जो पहले से मौजूद है, के लिए कोई भी सुझाव स्वागत से अधिक है।
मैंने सुना है, मेरा आखिरी विचार यह होगा (यदि आप गलत लगता है जो कुछ भी खोज सकते हैं?)। क्या होगा यदि मैं अपनी सी # भाषा सेवा तैयार करता हूं जो रिशेर्पर के सीएसआरआरएस सेवा कार्यान्वयन को ओवरराइड करता है? मैं मौजूदा रिशेर्पर सेवा को अपने आप से सजाने के लिए तैयार करूंगा, और मैं अपने स्वयं के पार्सर के साथ सीएसएचआरपीएसर को लपेट सकता हूं, और संभावित रूप से एएसटी की अंतिम पार्सिंग का ख्याल रख सकता हूं? –
मैं सबसे अच्छी किस्मत कहूंगा :) मुझे नहीं पता कि वास्तव में क्या होगा, लेकिन अगर यह काम करता है तो मुझे आश्चर्य होगा। ReSharper एएसटी और दस्तावेज़ के पाठ को सिंक में रखता है - यदि आप एक बदलते हैं, तो अन्य परिवर्तन। यदि आप एक तरफ अलग करते हैं, तो मुझे संदेह है कि यह अच्छी तरह समाप्त होगा। मुझे एक विश्लेषक लिखने पर संदेह है जो नियंत्रण प्रवाह ग्राफ का उपयोग करना आसान होगा (लेकिन फिर भी गैर-तुच्छ) और काम करने की अधिक संभावना है। लेकिन हे, आधा मजा कोशिश कर रहा है :) – citizenmatt