2012-02-02 21 views
22

हाल ही में मैंने खुद को आर कोड के साथ काम किया है जो कोडिंग शैली के मामले में नक्शे पर है - एकाधिक लेखकों और व्यक्तिगत लेखकों जो एक ही संरचना में चिपके रहने के बारे में कठोर नहीं हैं। कुछ ऐसे कार्य हैं जिन्हें मैं वर्तमान में बेहतर से स्वचालित करना चाहता हूं।आर भाषा जागरूक कोड सुधार/रीफैक्टरिंग उपकरण?

मैं एक उपकरण (या उपकरण) की तलाश में हूं जो निम्नलिखित कार्यों का प्रबंधन करता है - इच्छा के बढ़ते क्रम में सूचीबद्ध है लेकिन कुछ हद तक अस्तित्व के संदेह के क्रम में भी बढ़ रहा है।

  • मूल स्वरूपण। "अगर (foo)" से "if (foo)" को परिवर्तित करने और ब्रेस स्थान और उस तरह की चीज़ के संदर्भ में समानता प्राप्त करने जैसी चीजें।

  • सूची एक्सेस के लिए "foo $ blah" को "foo [[" blah "]] में परिवर्तित करना। आदर्श रूप से यह कम से कम अनुमान लगाने में सक्षम होगा यदि कोई ऑब्जेक्ट वास्तव में एक सूची थी, न कि डेटा.फ्रेम और केवल सूचियों को परिवर्तित करें।

  • '=' से '< -' कनवर्ट करना। हां, यह एक साधारण खोज है और प्रतिस्थापित है - लेकिन वास्तव में नहीं। उपकरण (या regexp) को भाषा जागरूक होने की आवश्यकता है जैसे कि यह "x = 5" को परिवर्तित करना जानता है लेकिन "foo (x = 5)" नहीं। यह वास्तव में प्रतीक को प्रतिस्थापित करने के लिए वास्तव में अच्छा नहीं होगा बल्कि असाइनमेंट ऑपरेटर के दोनों किनारों पर एक सिंगल व्हाइटस्पेस सुनिश्चित करने के लिए भी अच्छा होगा।

  • परिवर्तनीय नामकरण, खासकर कार्यों में & फ़ाइलें। उदाहरण के लिए, मान लें कि किसी सूची में एक तत्व "foo" है, मैं इसे "foobar" में बदलने में सक्षम होना चाहता हूं और पूरे कोड प्रवाह में उस सूची के हर उपयोग को ट्रैक नहीं करना चाहता। मुझे लगता है कि इस उपकरण को अलग-अलग फ़ंक्शन में किसी अन्य नाम के रूप में मौजूद सूची जैसी चीज़ों की पहचान करने के लिए उपकरण के नियंत्रण के पूरे प्रवाह को सक्षम करने की आवश्यकता होगी।

  • नामकरण सम्मेलन। मुझे कुछ मानक नामकरण सम्मेलन को परिभाषित करने में सक्षम होना पसंद है (उदा। Google's या जो भी हो) और यह सभी कार्यों, चर, आदि की पहचान करें और उन्हें परिवर्तित करें। ध्यान दें कि यह सूची तत्वों जैसी चीजों के लिए पिछली प्रविष्टि के साथ जुड़ता है।

बुनियादी यूनिक्स संसाधन आदेशों को सूचीबद्ध करने के लिए स्वतंत्र महसूस (जैसे एसईडी) जब तक यह वास्तव में बहुत चालाक कम से कम आम तौर पर चीजों को पेंच नहीं करने के लिए हो जाएगा (जैसे परिवर्तित "foo (एक्स = 5)" को " foo (x < -5) ")।

मुझे लगता है कि यदि ऐसा उपकरण पहले से ही एक पूर्ण स्थिति में मौजूद है, जिसे मैंने अभी तक सुना होगा, और मैं यह भी महसूस कर रहा हूं कि आर जैसी भाषा के साथ इस तरह के कुछ करना मुश्किल है स्वचालित रूप से परिवर्तनों का, लेकिन कोई सपना देख सकता है, है ना? क्या किसी के पास इनमें से कुछ/सभी पर पॉइंटर्स हैं?

+2

Reformatting यहाँ पर चर्चा की गई: http://stackoverflow.com/questions/5117359/any-r-style-guide-checker –

+4

IIRC 'formatR' एक पैकेज है कि को साफ है आर कोड और आपकी सूची में कुछ बिंदुओं को शामिल करता है। – baptiste

+1

दूसरा लक्ष्य एक टैड गन्दा हो सकता है: data.frame 'is.list()' के लिए सत्य लौटाता है। आप 'is.list (myObject) और (! Is.data.frame (myObject)) जैसी कुछ कोशिश कर सकते हैं। – Iterator

उत्तर

2

आईएमएचओ, अपना खुद का लिखें। एक सुंदर प्रिंटर लिखना वास्तव में काफी मुश्किल है। इसे टोकनिंग, पार्सिंग, एएसटी या अन्य आईआर बनाने, समझने के लिए प्रतीक टेबल और स्कॉप्स, टेम्पलेटिंग इत्यादि को समझना आवश्यक है।

लेकिन यदि आप इसे कर सकते हैं, तो आप वास्तव में प्रोग्रामिंग भाषाओं के बारे में बहुत कुछ सीखेंगे। आप अपने सहकर्मियों के लिए भी बहुत प्रभावशाली दिखेंगे और फिर से शुरू करना आश्चर्यजनक होगा। यह भी बहुत मजेदार है।

मैं टेरेंस पार द्वारा "Language Implementation Patterns: Create Your Own Domain-Specific and General Programming Languages" की अनुशंसा करता हूं। यह पढ़ने के लिए थोड़ा मोटा है, लेकिन सामग्री बहुत अच्छी है। यह पार्सर्स के लिए एक प्रारंभिक स्तर पर लिखा गया है और यह बहुत छोटा है, लेकिन इसमें यह सभी भाग शामिल हैं जिन्हें आपको स्वयं को इस टूल को लिखने की आवश्यकता होगी।

यदि आप इसे बनाते हैं, तो इसे खोलें, यहां वापस आएं और हमें इसके बारे में बताएं, और कुछ विज्ञापनों के साथ साइट को कुछ रुपये बनाने के लिए रखें। इस तरह हर कोई आपकी भयानक सृजन का उपयोग कर सकता है और आपको प्रक्रिया में कुछ डॉलर मिलेंगे। भाग्य का

बेस्ट ...

+0

मैं दर्जनों भाषाओं के लिए भाषा-सटीक सुंदर प्रिंटर बनाता हूं जो आप कहते हैं (ठीक है, मैं इसके बजाय डीएमएस का उपयोग करता हूं ANTLR)। मैं आपको कड़वी अनुभव से बता सकता हूं कि जब तक आपके फॉर्मेटर में प्रत्येक प्रारूपण विकल्प को कल्पना नहीं किया जाता है, तो यह मुफ़्त है और मैक/लिनक्स/विंडोज पर चलता है, कि लोग इसे उन सभी कारणों से स्लैम करेंगे। वास्तव में शुभकामनाएँ। –

+0

इसके बारे में सुनने के लिए खेद है। लोग कभी-कभी लंगड़ा हो सकते हैं। क्या आप सहमत होंगे कि यह सीखने के लिए एक उपयोगी प्रोग्रामिंग अभ्यास है? वैसे, ईरा पार्सर्स और भाषा अनुवादों के गॉडफादरों में से एक है। उनकी राय इस विषय पर गेट्स या टोरवाल्ड्स से अधिक वजन लेती है। ईमानदारी से। – Homer6

+0

ईरा, क्या आपके पास कोई अन्य पुस्तक सिफारिशें हैं? – Homer6

संबंधित मुद्दे