2009-06-17 7 views
6

के दौरान सी ++ फ़ंक्शन दिखाने के लिए svn diff प्राप्त करना जब भी मैं svn में एक प्रतिबद्ध चक्र करता हूं, तो मैं अपनी टिप्पणियां लिखते समय भिन्नता की जांच करता हूं। मैंने सोचा कि वास्तविक कार्य को दिखाने के लिए वास्तव में अच्छा होगा कि मैंने diff दिखाते समय संशोधन किए।प्रतिबद्धता

मैंने this page की जांच की, जिसमें उल्लेख किया गया है कि -पी विकल्प सी फ़ंक्शन दिखाएगा जिसमें परिवर्तन होता है। जब मैंने कुछ सी ++ कोड के साथ -p विकल्प का उपयोग करने का प्रयास किया, हालांकि, यह आमतौर पर एक्सेस विनिर्देशक (निजी , सार्वजनिक, संरक्षित, आदि), जो बहुत आसान नहीं है।

मैंने देखा कि diff के लिए एक -F विकल्प है जो -p के समान होता है, लेकिन उपयोगकर्ता द्वारा निर्दिष्ट रेगेक्स लेता है। मैं सोच रहा था: क्या सी ++ फ़ंक्शन से मेल खाने के लिए कोई साधारण रेगेक्स है? ऐसा लगता है कि यह काम करने के लिए आवश्यक है।

मैं इसे स्वयं देखकर कुछ समय बिताता हूं, लेकिन काम क्रंच मोड में है और ऐसा लगता है कि बहुत से लोग उपयोगी पाएंगे, इसलिए मुझे लगा कि मैं इसे यहां पोस्ट करूंगा।

संपादित करें: मैं कुछ एक स्लैम-डंक कैच-ऑल regex है कि है, लेकिन कुछ है कि बस क्षेत्र diff ऊपर निकटतम समारोह परिभाषा प्रदर्शित होगा मिलेगा के लिए नहीं देख रहा हूँ। तथ्य यह है कि यह कहीं भी सही नहीं होगा, और कुछ हद तक छोटी गाड़ी मेरे साथ ठीक है। जब तक यह सही काम करता है, तब तक 60% समय की तरह महत्वपूर्ण उत्पादकता सुधार आईएमएचओ होगा।

उत्तर

3

वहाँ एक सरल regex एक सी ++ समारोह मिलान करने के लिए है? सं

वहाँ एक (जटिल) regex एक सी ++ मिलान करने के लिए है। शायद एक लिखना संभव हो सकता है।

लेकिन मैं नियमित अभिव्यक्ति कहूंगा और न ही इस तरह के कार्य तक आसानी से हूं (आपको किसी प्रकार का एक्वाट मैच चाहिए) और न ही वे इस तरह के कार्य के लिए सही उपकरण हैं।

बस इस तरह के case के बारे में सोचें। आप इस सामान को कैसे संभालेंगे।

void (*function(int, void (*)(int)))(int); 

func1(int), func2(double); double func3(int); 

एकमात्र वास्तविक समाधान yacc/lex का उपयोग कर एक पार्सर का उपयोग करना है। जो आपके उपयोग के मामले के लिए कुछ भी नहीं करता है।

तो या तो एक साथ कुछ अधूरा regex जो अपने कोड में अधिकांश कार्यों को हस्ताक्षर फिट बैठता है हैक

+0

हम्म ... मुझे लगता है कि इसका समाधान मेरे विचार से कहीं अधिक जटिल है। –

1

TortoiseSVN सी ++ फ़ाइलों के लिए अपने संवाद के लिए प्रतिबद्ध में स्वतः पूर्ण समर्थन के लिए निम्नलिखित regexes उपयोग करता है:

.h, .hpp, .hxx = ^\s*(?:class|struct)\s+([\w_]+)|\W([\w_]+)\(
.cpp, .c, .cxx = \W(([\w_]+)::([\w_]+))|\W([\w_]+)\(

मैं कैसे सही वे कर रहे हैं, हालांकि पता नहीं है।

+0

वे ** ** हैं: उदा। 'शून्य हेलो() {' फ़ंक्शन हस्ताक्षर – jitter

+0

के रूप में पहचाना नहीं गया है ऐसा लगता है कि उन्हें नामस्थान घोषणा की आवश्यकता है, जिसमें :: :: वहां देखा गया है। – Joey

+0

लेकिन मैं नामस्थान std का उपयोग कर कोई भी प्रदान नहीं करता :) – jitter

1

मैं SVN में एक विकल्प है कि यह कर देगा के बारे में पता नहीं है, और एक regex आधारित समाधान होने की संभावना एक या निम्न में अधिक हो जाएगा:

  • एक कोड के लिए बुरा सपना करने और बनाए रखने, बहुत से के विशेष मामलों
  • गलत है, और याद आ रही कई वैध सी ++ कार्यों

आप इस के लिए पार्सर के कुछ प्रकार की जरूरत है। यह सभी संभावित रेगेक्स मामलों की गणना करना तकनीकी रूप से संभव है, लेकिन एक पार्सर लिखना इसे हल करने का सही तरीका है। आप अपने खुद के समाधान मैं ANTLR की जाँच होगी रोल करने के लिए समय है, वे कई C/C++ व्याकरण इस पेज पर उपलब्ध है:

ANTLR Grammar Lists

2

आप यह केवल करने के लिए अपने करता मैं एक करने के लिए टिप्पणी के लिए प्रतिबद्ध जोड़ने की आदत बनाने की सिफारिश करेंगे लागू करने के लिए जा रहे हैं समारोह, जैसे:

void something() 
{ 
    ... 
    some thing = 1; 
    ... 
} 

void something() 
// last change by me: a better value for thing 
{ 
    ... 
    some thing = 2; 
    ... 
} 

करने के लिए आप कार्यात्मक के लिए प्रदर्शित करेगा n और संपादन के साथ आपकी टिप्पणी। बोनस के रूप में, अन्य लोग यह समझने में सक्षम होंगे कि आप क्या कर रहे हैं।

+0

+1, बॉक्स के बाहर अच्छा जवाब; शायद यह कुछ है जो मुझे वैसे भी करना चाहिए। –

+0

हां, मुझे लगता है कि आम तौर पर वैश्विक प्रतिबद्ध टिप्पणियों के महत्व को अधिक महत्व देते हैं और इनलाइन टिप्पणियों के महत्व को कम से कम समझते हैं। –

+0

मैं थोड़ी देर की तलाश में था, और अभी भी एक साधारण रेगेक्स की तलाश कर रहा हूं जो फॉर्म की फ़ंक्शन कॉल को पकड़ लेगा: :: ()। क्या आप उस चीज़ से आ सकते हैं जो उससे मेल खाएगा? –