जावा कोड के कुछ वर्गों के लिए ग्रहण कोड फ़ॉर्मेटर को कैसे बंद करें?


488

मुझे जावा स्ट्रिंग्स के रूप में लिखे गए एसक्यूएल स्टेटमेंट के साथ कुछ जावा कोड मिला है (कृपया कोई OR / M फ्लैमेवार नहीं है, एम्बेडेड SQL यही है - यह मेरा निर्णय नहीं है)।

मैंने एसक्यूएल स्टेटमेंट को रखरखाव की आसानी के लिए कोड के कई लाइनों पर कई संक्षिप्त स्ट्रिंग्स में शब्दार्थ से तोड़ दिया है। तो इसके बजाय कुछ की तरह:

String query = "SELECT FOO, BAR, BAZ FROM ABC WHERE BAR > 4";

मेरे पास कुछ है:

String query =
    "SELECT FOO, BAR, BAZ" +
    "  FROM ABC          " +
    " WHERE BAR > 4      ";

यह शैली विशेष रूप से बड़े प्रश्नों के लिए SQL (IMHO) को पढ़ने और बनाए रखने में बहुत आसान बनाती है। उदाहरण के लिए, मैं अपने संपादक को "ओवरराइट" मोड में रख सकता हूं और पाठ को काफी आसानी से संशोधित कर सकता हूं।

ध्यान दें कि यह समस्या SQL के विशेष उदाहरण से परे सामान्यीकृत करती है। कोई भी कोड जो किसी भी ऊर्ध्वाधर स्वरूपण, विशेष रूप से सारणीबद्ध निर्माणों के साथ लिखा जाता है, एक सुंदर प्रिंटर द्वारा विनाश के लिए अतिसंवेदनशील होता है।

अब, कुछ परियोजना सदस्य ग्रहण संपादक का उपयोग करते हैं और शब्दार्थ स्वरूपण अक्सर तब नष्ट हो जाता है जब वे संपूर्ण स्रोत फ़ाइल को प्रारूपित करते हैं।

क्या फॉर्मेटिंग के संबंध में स्रोत की कुछ पंक्तियों को अनदेखा करने के लिए ग्रहण को निर्देश देने का एक तरीका है?

मैं एक विशेष टिप्पणी की तरह कुछ ढूंढ रहा हूं जो ग्रहण फॉर्मेटर को जन्म देती है। आदर्श रूप में, इस तरह की टिप्पणी को हम जो भी चुनते हैं, उसके लिए कॉन्फ़िगर किया जा सकता है, और अन्य फ़ॉर्मेटर्स को इस तरह से सम्मान करने के लिए प्रोग्राम किया जा सकता है:

// STOP-ECLIPSE-FORMATTING
String query =
    "SELECT FOO, BAR, BAZ" +
    "  FROM ABC          " +
    " WHERE BAR > 4      ";
// START-ECLIPSE-FORMATTING

जाहिर है, एक "समाधान" हमारी टीम के सदस्यों की तरह कुछ बाहरी फ़ॉर्मेटर को मानकीकृत है पुरानी गड़ी या JIndent , लेकिन है कि क्या इस सवाल (भी इस परियोजना पर अपना निर्णय नहीं) के बारे में है नहीं है: मैं विशेष रूप से के लिए एक रास्ता तलाश कर रहा हूँ एड-हॉक आधार पर ग्रहण फॉर्मेटर से बचें।

आदर्श रूप से, एक समाधान मुझे ग्रहण करने वाले टीम के सदस्यों की आवश्यकता के बिना एक्लिप्स फॉर्मेटर के लिए निर्देश सम्मिलित करने की अनुमति देगा, ताकि किसी भी आईडीई पुनर्निधारण के लिए एक्लिप्स का उपयोग किया जा सके (संभवतः एक फॉर्मेट एग्नोस्टिक कमांड कमेंट चुनने के अलावा: STOP-ECLIPSE-FORMATTINGSTOP-FORMATTING)।


1
हमें यह समस्या थी। ग्रहण के पास एक स्ट्रिंग निर्माता में हमेशा एक पंक्ति को तोड़ने का विकल्प होना चाहिए जहां एक + होता है, चाहे वह अगले बिट स्ट्रिंग लाइन पर फिट हो। लेकिन यह नहीं है। :-(
JeeBee

जाहिरा तौर पर इस फीचर को ग्रहण 3.6M6: Bugs.eclipse.org/bugs/show_bug.cgi?id=27079
Guillaume

नोट: यदि आप केवल अपनी टिप्पणियों को ग्रहण करने से रोकना चाहते हैं, तो आप प्रत्येक पंक्ति के सामने // का उपयोग कर सकते हैं। किसी ब्लॉक पर टिप्पणी करने के लिए, Ctrl + / पर हाइलाइट करें और दबाएं।
जॉन हेनकेल

ध्यान दें कि अब 10 साल बाद, जावा 14 संभवत: मल्टी-लाइन स्ट्रिंग्स लाएगा, जो इसे अतीत की बात बना देगा।
थोर्बोजर्न रेव एंडरसन

जवाबों:


865

ग्रहण 3.6 आपको एक विशेष टिप्पणी, जैसे, स्वरूपण बंद करने की अनुमति देता है

// @formatter:off
...
// @formatter:on

चालू / बंद सुविधाओं को ग्रहण की प्राथमिकताओं में "चालू" करना होगा Java > Code Style > Formatter:। पर क्लिक करें Edit, Off/On Tags, सक्षम Enable Off/On tags

वरीयताओं में जादू के तार को बदलना भी संभव है - यहां 3.6 डॉक्स को देखें

अधिक जानकारी

Java > Code Style > Formatter > Edit > Off/On Tags

यह प्राथमिकता आपको फ़ॉर्मैटर को सक्षम करने के लिए एक टैग को अक्षम करने और एक टैग को परिभाषित करने की अनुमति देती है (अपने फ़ॉर्म प्रोफ़ाइल में ऑफ़ / ऑन टैग टैब देखें):

यहाँ छवि विवरण दर्ज करें

आपको झंडे को सक्षम करने की भी आवश्यकता है Java Formatting


7
"नेवर जॉइन लाइन्स" विकल्प जो इस पृष्ठ में अन्यत्र उल्लिखित है, भी बहुत उपयोगी है।
xpmatteo

89
चालू / बंद सुविधाओं को "चालू" करना होगा। ग्रहण की वरीयताओं में: जावा> कोड शैली> प्रारूप। "संपादित करें" बटन, "ऑफ / ऑन टैग" पर क्लिक करें, "सक्षम बंद / टैग पर" चेक करें।
डोमिनिक डी।

2
यह जावास्क्रिप्ट कोड शैली वरीयताओं में उपलब्ध नहीं है , जहां मुझे स्वरूपण के साथ सटीक विपरीत समस्या है । :(
रेड्संड्रो

11
टीमें को अपने विकी को एक्लिप्स प्रीफ़्स (फ़ाइल) की एक प्रति निर्यात करनी चाहिए और सभी को एक ही उपयोग करने की आवश्यकता होती है। हमारे लिए अच्छा काम करता है। ;)
जोसेफ लस्ट

FYI करें मुझे यह काम करने के लिए // और @ चिह्न के बीच का स्थान हटाना पड़ा।
रॉय Truelove

61

एएफएआईके को ग्रहण 3.5 एम 4 से फॉर्मेटर पर एक विकल्प "नेवर जॉइन लाइन्स" है जो उपयोगकर्ता लाइनों को तोड़ता है। शायद वही करता है जो आप चाहते हैं।

इसके अलावा यह बदसूरत हैक है

String query = //
    "SELECT FOO, BAR, BAZ" + //
    "  FROM ABC"           + //
    " WHERE BAR > 4";

1
तो "नेवर जॉइन लाइन्स" विकल्प सेट करने के अलावा मुझे इन "फैंटम" टिप्पणियों को भी लिखना होगा? अपने आप से "नेवर जॉइन लाइन्स" भाग का काम नहीं करना चाहिए?
ग्रेग मैट्स

2
हां, निश्चित रूप से यह होना चाहिए। प्रेत टिप्पणियां एक वैकल्पिक दृष्टिकोण है (यदि यह मौजूद नहीं है, या आप पहले के संस्करण आदि के साथ फंस गए हैं)।
क्रिस

मैंने TOAD में एक कस्टम फॉर्मेटिंग टेम्प्लेट के साथ मिलकर इस दृष्टिकोण का उपयोग किया है, जिससे मुझे JAVA कोड से पुरानी SQL को स्ट्रिप करने के लिए, इसमें सुधार करने और सभी विलुप्त टिप्पणियों को प्राप्त करने और फिर इसे JAVA में वापस फेंकने की अनुमति मिली। यह एक दर्द है, लेकिन अब यह हमारे जावा कोड को बचाने के लिए हमें ऑटो-प्रारूप की अनुमति देता है। सलाह के लिये धन्यवाद!
jnt30

मैक्रो ऑन "ऑफ लाइन्स जॉइन लाइंस" की जांच किए बिना मेरे लिए काम नहीं करता है - धन्यवाद!
क्रिस्टोफर सोप

28

इस उत्तर को एसओ पर देखें ।

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

/*-
 * Here is a block comment with some very special
 * formatting that I want indent(1) to ignore.
 *
 *    one
 *        two
 *            three
 */

स्रोत: ओरेकल पर प्रलेखन


2
यह सबसे अच्छा जवाब है क्योंकि यह उपयोगकर्ता के आईडीई के कॉन्फ़िगरेशन पर निर्भर नहीं करता है। धन्यवाद।
अजीम

26

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

गुण → जावा कोड शैली → फ़ॉर्मैटर → प्रोजेक्ट विशिष्ट सेटिंग्स सक्षम करें या कार्यक्षेत्र सेटिंग्स कॉन्फ़िगर करें → संपादित करें → लाइन रैपिंग (टैब) → चेक "कभी भी पहले से लिपटी लाइनों में शामिल न हों" चेक करें

बचाओ, लागू करो।

यहाँ छवि विवरण दर्ज करें


1
मुझे लगता है कि यह एसक्यूएल उदाहरण जैसी चीजों के लिए मदद करेगा, लेकिन मुझे यकीन नहीं है कि यह आईडीई फॉर्मेटर को पूरी तरह से अक्षम करने के सामान्य मामले के लिए पर्याप्त होगा।
ग्रेग मैट्स

2
बिल्डर पैटर्न का उपयोग करते समय यह समाधान उत्कृष्ट है और जावा 8. में लैम्ब्डा की शुरूआत के साथ इसकी प्रासंगिकता निश्चित रूप से बढ़ जाती है
जोनास क्नग्लसंड

16

आपको फ़ॉर्मैटर टैग जोड़ने की क्षमता चालू करनी होगी। मेनूबार में जाएं:

Windows Preferences Java Code Style Formatter

प्रेस Editबटन। अंतिम टैब चुनें। ऑन / ऑफ बॉक्स पर ध्यान दें और उन्हें एक चेकबॉक्स के साथ सक्षम करें।


14

यदि आप लाइन की शुरुआत में प्लस चिन्ह लगाते हैं, तो यह अलग तरह से प्रारूपित होता है:

String query = 
    "SELECT FOO, BAR, BAZ" 
    +    "  FROM ABC"           
    +    " WHERE BAR > 4";

1
यह एक दिलचस्प समझौता हो सकता है। सामान्य तौर पर, मैं एक उपकरण के कुछ अवांछनीय व्यवहार के कारण कोड के स्वरूपण को बदलने से बचना चाहूंगा। इस स्थिति में, स्ट्रिंग कंक्रीटिंग ऑपरेटर एसक्यूएल के साथ क्या हो रहा है, इसके बजाय एक दुर्घटना के अधिक हैं। इसलिए मैं उन्हें प्रत्येक पंक्ति के अंत में लिखना पसंद करता हूं। मुझे लगता है कि लाइन की शुरुआत के रूप में एसक्यूएल पर जोर दिया जाना चाहिए। लेकिन समाधान की अनुपस्थिति में जाने का यह एक अच्छा तरीका हो सकता है जो मुझे अपनी वांछित प्रारूपण को संरक्षित करने देता है। धन्यवाद!
ग्रेग मैट्स

8
आपका स्वागत है। दरअसल, मैं दशकों से लाइनों के सामने अपने + संकेत लगा रहा हूं, न कि फॉर्मेटर को बेवकूफ बनाने के लिए। मैं उन्हें सबसे आगे पसंद करता हूं, क्योंकि यह मेरे लिए स्पष्ट हो रहा है: एक पंक्ति के अंत में जो कभी-कभी खो जाता है। जब हम वुडबर्निंग कंपाइलर का उपयोग करते थे, तो यह प्रोजेक्ट स्टैण्डर्ड का कोई न कोई रास्ता होता था और यह मेरे साथ ही अटका रहता था।
CPerkins

5

मैं अपने एसक्यूएल स्ट्रिंग इंडेंटेशन में फॉर्मैटर गड़बड़ करने से बचने के लिए निश्चित चौड़ाई वाले स्ट्रिंग-पार्ट्स (व्हाट्सएप से गद्देदार) का उपयोग कर रहा हूं। यह आपको मिश्रित परिणाम देता है, और यह काम नहीं करेगा जहां व्हाट्सएप को नजरअंदाज नहीं किया जाता है क्योंकि यह एसक्यूएल में है, लेकिन सहायक हो सकता है।

    final String sql = "SELECT v.value FROM properties p               "
            + "JOIN property_values v ON p.property_id = v.property_id "
            + "WHERE p.product_id = ?                                  "
            + "AND v.value        IS NOT NULL                          ";

5

प्रत्येक पंक्ति को एक डबल स्लैश "//" के साथ समाप्त करें। यह उन सभी को एक ही पंक्ति में ले जाने से ग्रहण रखेगा।


4

वैकल्पिक विधि: "लाइन रैपिंग" के तहत ग्रहण 3.6 में, फिर "सामान्य सेटिंग्स" में "कभी-कभी पहले से लिपटी लाइनों को जोड़ने" का विकल्प होता है। इसका मतलब है कि फॉर्मेटर लंबी लाइनों को लपेट देगा लेकिन आपके पास पहले से मौजूद किसी भी रैपिंग को पूर्ववत नहीं करेगा।


4

@xpmatteo में कोड के भागों को अक्षम करने का उत्तर है, लेकिन इसके अलावा, डिफ़ॉल्ट ग्रहण सेटिंग्स को पूरी फ़ाइल के बजाय कोड की संपादित लाइनों को केवल स्वरूपित करना चाहिए।

Preferences->Java->Editor->Save Actions->Format Source Code->Format Edited Lines

यह इसे पहले स्थान पर होने से रोकता था क्योंकि आपके सहकर्मी सुधार कोड को बदल रहे थे जो वे वास्तव में नहीं बदलते थे। यह एक अच्छा अभ्यास है कि दुर्घटना को रोकने के लिए जो आपके स्रोत नियंत्रण पर अलग-थलग है (जब एक पूरी फ़ाइल को मामूली अंतर सेटिंग के कारण पुन: स्वरूपित किया जाता है)।

यदि चालू / बंद टैग विकल्प बंद कर दिया गया था, तो यह पुन: स्वरूपण को भी रोक देगा।


2

//नई टिप्पणियां चाहते हैं , जहां जोड़कर, प्रेत टिप्पणी महान हैं!

  1. @Formatter: बंद कोड से संपादक में एक संदर्भ जोड़ता है। कोड, मेरी राय में, इस तरह के संदर्भ कभी नहीं होना चाहिए।

  2. फ़ैंटम टिप्पणियां (//) उपयोग किए गए फ़ॉर्मेटिंग टूल की परवाह किए बिना काम करेगी। भले ही ग्रहण या InteliJ या जो भी संपादक आप का उपयोग करें। यह भी बहुत अच्छा गूगल जावा प्रारूप के साथ काम करता है

  3. प्रेत टिप्पणियां (//) आपके आवेदन पर काम करेंगी। यदि आपके पास जावास्क्रिप्ट भी है और शायद JSBeautifier जैसी किसी चीज़ का उपयोग करें । आप जावास्क्रिप्ट में समान कोड शैली भी रख सकते हैं।

  4. वास्तव में, आप शायद सही स्वरूपण करना चाहते हैं ? आप मिश्रित टैब / स्थान और अनुगामी रिक्त स्थान को निकालना चाहते हैं। आप कोड मानक के अनुसार लाइनों को इंडेंट करना चाहते हैं। आप जो चाहते हैं वह लंबी लाइन नहीं है। वह, और केवल वही, जो प्रेत टिप्पणी आपको देता है!


-3

यह हैक काम करता है:

String x = "s" + //Formatter Hack
    "a" + //
    "c" + //
    "d";

मेरा सुझाव है कि फ़ॉर्मेटर का उपयोग न करें। बुरा कोड खराब दिखना चाहिए कृत्रिम रूप से अच्छा नहीं है। अच्छा कोड समय लगता है। आप गुणवत्ता पर धोखा नहीं दे सकते। स्वरूपण स्रोत कोड गुणवत्ता का हिस्सा है।


8
फ़ॉर्मेटर का उपयोग नहीं करना केवल एक बुरा विचार है; फ़ॉर्मेटर त्रुटियों को पकड़ने में मदद करता है और कोड को सुसंगत स्थिति में रखता है।
फ्रांसिस अप्टन IV

एक दिलचस्प सुझाव है, लेकिन मैं यह नहीं देखता कि प्रारूपण हमें यह बताता है कि कोड अच्छा है या नहीं।
क्रिस

2
मुझे लगता है कि वह जो कह रहा है वह यह है कि उसे लगता है कि खराब लिखा हुआ, खराब स्वरूपित कोड को "सुधारने" की उम्मीद में इसे प्रारूपित करने के बजाय रखा जाना चाहिए। खराब रूप से लिखा गया है, खराब रूप से प्रारूपित कोड को किसी भी तरह "स्टिक आउट" करना चाहिए ताकि इसे आसानी से पहचाना जा सके। बिल्कुल यकीन नहीं है कि मैं पूरी तरह से सहमत हूं, लेकिन मुझे लगता है कि यह विचार है।
ग्रेग मैट्स

1
@ फ्रैंसिस - बग्स: ऑटो-फॉर्मेट कोड को बग कैसे पता कर सकते हैं? संगति: संगति एक अच्छा तर्क है लेकिन समग्र कोड गुणवत्ता अधिक महत्वपूर्ण है। आप हैमबर्गर फ़्लिपिंग के लिए एक अच्छी सुसंगत प्रक्रिया को परिभाषित कर सकते हैं लेकिन यह हाउते भोजन के लिए कभी काम नहीं करेगा। यदि आप पर्याप्त तथ्यों को नजरअंदाज करते हैं, तो खाना बनाना एक काफी जटिल गतिविधि या तुच्छ हो सकता है। अगर आपको लगता है कि सॉफ़्टवेयर डेवलपमेंट हैमबर्गर फ़्लिपिंग टूल्स की तरह है, जिसमें निरंतरता लागू होती है। यह गाइड लाइन को प्रारूपित करने के खिलाफ एक तर्क नहीं है, लेकिन अगर डेवलपर्स इन दिशानिर्देशों की परवाह नहीं करते हैं, तो अन्य आवश्यक चीजों के बारे में परवाह नहीं करेंगे।
थॉमस जंग 6

4
यहां मेरा तर्क: मैं अच्छा कोड लिखता हूं और मैं फॉर्मेटिंग गाइड लाइनों से चिपक जाता हूं। लेकिन मैं LAZY हूं। मुझे रिक्त स्थान की सही मात्रा क्यों डालनी चाहिए और जब मैं अपनी पांच लाइनें मैला कोड लिख सकता हूं, तो प्रारूप-बटन दबाएं और खुश रहें? बाद में मैंने कोड को स्वरूपित किया है, अपने उपकरण का उपयोग करके जो यह सुनिश्चित करता है कि परिणाम हमेशा सही हो, मैं किसी भी स्वरूपण के बारे में नाज़ी हूं। गाइड लाइनों से चिपके रहने के खिलाफ कोई तर्क नहीं है (अन्य कि वे विशेष रूप से खराब हो सकते हैं) यदि स्वरूपण सिर्फ एक किमी दूर है। सभी प्रोजेक्ट सदस्य समान कोड स्वरूपण सेटिंग्स साझा करते हैं।
प्रति विकलैंडर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.