यदि आपके Mac पर VS Code में किसी जनरेटेड फ़ाइल को सेव करने पर उसकी सामग्री बदलती रहती है, तो पहले पहचानें कि कौन सा फ़ॉर्मेटर चल रहा है। VS Code की editor.formatOnSave सेटिंग फ़ाइल सेव होने पर फ़ॉर्मेटिंग लागू करती है, लेकिन VS Code ऐसा कोई बिल्ट-इन पाथ पैटर्न प्रदान नहीं करता है जो चयनित फ़ाइलों को उस सेटिंग से छूट देता हो। Prettier जैसे फ़ॉर्मेटर के लिए, उसकी अपनी इग्नोर फ़ाइल का उपयोग करें; अन्यथा, उन फ़ाइलों के अनुकूल स्कोप पर फ़ॉर्मेट-ऑन-सेव को बंद करें जिन्हें आप सुरक्षित रखना चाहते हैं।

पहचानें कि फ़ाइल में क्या बदलाव कर रहा है

VS Code, editor.formatOnSave के माध्यम से सेव करने पर फ़ॉर्मेट कर सकता है, और लैंग्वेज एक्सटेंशन फ़ॉर्मेटर प्रदान कर सकते हैं। सेव-टाइम कोड एक्शन (Code Action), जैसे कि इंपोर्ट्स को व्यवस्थित करना (organizing imports), एक अलग सेटिंग है और यह फ़ाइल की सामग्री को भी बदल सकता है। VS Code का एडिटिंग दस्तावेज़ फ़ॉर्मेट-ऑन-सेव का वर्णन करता है; इसकी Code Actions on Save गाइड सेव-टाइम क्रियाओं को कवर करती है।

कारण को ठीक से समझने के लिए, जनरेटेड फ़ाइल खोलें, स्टेटस बार में इसका लैंग्वेज मोड जांचें, और सेटिंग्स में formatOnSave तथा codeActionsOnSave खोजें। सेटिंग्स में @modified फ़िल्टर कॉन्फ़िगर किए गए मानों को देखने में मदद कर सकता है। यदि फ़ॉर्मेटिंग बंद होने के बावजूद फ़ाइल बदलती है, तो इंस्टॉल किए गए एक्सटेंशन और प्रोजेक्ट स्क्रिप्ट का निरीक्षण करें: इसके लिए कोई जनरेटर या अन्य सेव एक्शन ज़िम्मेदार हो सकता है। फ़ॉर्मेटिंग को अक्षम करने से कोई स्वतंत्र टूल फ़ाइल को फिर से लिखने से नहीं रुकेगा।

Prettier का उपयोग करते समय जनरेटेड पाथ को बाहर रखें (Exclude करें)

यदि Prettier फ़ॉर्मेटर है, तो प्रोजेक्ट रूट पर .prettierignore में जनरेटेड पाथ जोड़ें। उदाहरण के लिए, src/generated के अंतर्गत जनरेटेड फ़ाइलों को छोड़ने के लिए, इस एंट्री का उपयोग करें:

src/generated/

Prettier .prettierignore को अपने फ़ाइल बहिष्करण तंत्र (exclusion mechanism) के रूप में प्रलेखित करता है और बताता है कि एडिटर इंटीग्रेशन इसका उपयोग कर सकते हैं। इसके पैटर्न Git-ignore सिंटैक्स का उपयोग करते हैं। जब आप चाहते हैं कि Prettier द्वारा हैंडल की जाने वाली अन्य फ़ाइलों के लिए फ़ॉर्मेट-ऑन-सेव जारी रहे, तो यह सबसे लक्षित विकल्प है। जांचें कि क्या इस फ़ाइल के लिए चुना गया फ़ॉर्मेटर वास्तव में Prettier ही है; कोई अन्य फ़ॉर्मेटर अलग-अलग नियमों या इग्नोर नियंत्रणों का उपयोग कर सकता है। Prettier: Ignoring Code

उपयुक्त VS Code स्कोप पर फ़ॉर्मेटिंग अक्षम करें

Mac पर, वैश्विक बदलाव के लिए ⇧⌘P दबाएं और Preferences: Open User Settings (JSON) चलाएं, या केवल वर्तमान प्रोजेक्ट को प्रभावित करने के लिए Preferences: Open Workspace Settings (JSON) चलाएं। वर्कस्पेस फ़ाइल प्रोजेक्ट के .vscode फ़ोल्डर में संग्रहीत होती है। VS Code User and workspace settings में दोनों सेटिंग्स स्कोप और उनके Mac कमांड्स का दस्तावेजीकरण करता है।

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

{
  "editor.formatOnSave": false
}

पूरी भाषा के लिए अपवाद (language-wide exception) बनाने हेतु, सेटिंग को उस भाषा के स्कोप में रखें। typescript को फ़ाइल के वास्तविक VS Code भाषा पहचानकर्ता (identifier) से बदलें, जिसे आप स्टेटस बार से देख सकते हैं:

{
  "[typescript]": {
    "editor.formatOnSave": false
  }
}

यह चुने गए स्कोप पर उस भाषा की प्रत्येक फ़ाइल के लिए फ़ॉर्मेट-ऑन-सेव को अक्षम करता है, न कि केवल जनरेटेड पाथ के लिए। सेटिंग्स को अधिक विशिष्ट स्कोप्स द्वारा ओवरराइड भी किया जा सकता है, इसलिए यदि फ़ाइल अभी भी बदलती है, तो @modified खोजें और यूज़र और वर्कस्पेस सेटिंग्स के साथ-साथ किसी भी भाषा-विशिष्ट ब्लॉक का निरीक्षण करें। VS Code का सेटिंग्स संदर्भ भाषा-विशिष्ट सेटिंग्स और प्राथमिकता (precedence) का दस्तावेजीकरण करता है।

सेव-टाइम क्रियाओं (Save-time actions) की अलग से जाँच करें

यदि फ़ॉर्मेटिंग पहले से ही बंद है, लेकिन सेव करने पर भी इंपोर्ट्स पुनर्व्यवस्थित होते हैं या सुधार लागू होते हैं, तो editor.codeActionsOnSave की जाँच करें। यह इंपोर्ट्स व्यवस्थित करने और फ़िक्स-ऑल जैसी क्रियाओं को नियंत्रित करता है। केवल पुनर्लेखन (rewriting) का कारण बनने वाली क्रिया को हटाएं या बदलें; इस सेटिंग को पूरी तरह से अक्षम करने से उपयोगी सेव-टाइम व्यवहार भी हट सकता है। VS Code का Code Actions on Save दस्तावेज़ समर्थित नियंत्रणों की व्याख्या करता है।

फ़ॉर्मेटिंग सुरक्षा उपाय के रूप में files.exclude का उपयोग न करें: VS Code इसे एक एक्सप्लोरर दृश्यता सेटिंग के रूप में प्रलेखित करता है, न कि इस नियंत्रण के रूप में कि कोई फ़ॉर्मेटर किसी फ़ाइल को संपादित करता है या नहीं। यदि फ़ॉर्मेटर में कोई पाथ-आधारित इग्नोर सुविधा नहीं है और केवल कुछ जनरेटेड फ़ाइलें प्रभावित होती हैं, तो व्यावहारिक VS Code विकल्प उनकी भाषा या वर्कस्पेस के लिए फ़ॉर्मेट-ऑन-सेव को अक्षम करना है, फिर आवश्यकता पड़ने पर Format Document (⇧⌥F) के साथ सामान्य फ़ाइलों को मैन्युअल रूप से फ़ॉर्मेट करना है। VS Code उस कमांड को Basic editing में प्रलेखित करता है।

उन जनरेटेड फ़ाइलों के लिए जिन्हें बाइट-दर-बाइट स्थिर रहना चाहिए, उपलब्ध होने पर फ़ॉर्मेटर के स्वयं के प्रलेखित इग्नोर तंत्र को प्राथमिकता दें। अन्यथा सबसे संकीर्ण उपलब्ध VS Code सेटिंग स्कोप का उपयोग करें, फिर एक प्रतिनिधि जनरेटेड फ़ाइल को सेव करें और यह पुष्टि करने के लिए diff का निरीक्षण करें कि कौन सा व्यवहार इसके लिए ज़िम्मेदार है।

स्रोत