আপনার ম্যাক-এ 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 ব্যবহার করার সময় জেনারেট করা পাথগুলো বাদ দিন
যদি Prettier ফরম্যাটার হয়, তবে প্রজেক্ট রুটে থাকা .prettierignore-এ জেনারেট করা পাথটি যুক্ত করুন। উদাহরণস্বরূপ, src/generated-এর অধীনে জেনারেট করা ফাইলগুলো এড়িয়ে যেতে এই এন্ট্রিটি ব্যবহার করুন:
src/generated/
Prettier তার ফাইল বাদ দেওয়ার প্রক্রিয়া হিসেবে .prettierignore-এর উল্লেখ করে এবং বলে যে এডিটর ইন্টিগ্রেশনগুলো এটি ব্যবহার করতে পারে। এর প্যাটার্নগুলো Git-ignore সিনট্যাক্স ব্যবহার করে। Prettier দ্বারা নিয়ন্ত্রিত অন্যান্য ফাইলের জন্য ফরম্যাট-অন-সেভ চালু রেখে নির্দিষ্ট ফাইলের ক্ষেত্রে এটি বন্ধ করার সবচেয়ে সুনির্দিষ্ট উপায় এটি। এই ফাইলের জন্য নির্বাচিত ফরম্যাটারটি আসলেই Prettier কি না তা পরীক্ষা করুন; অন্য কোনো ফরম্যাটার ভিন্ন নিয়ম বা ইগনোর কন্ট্রোল ব্যবহার করতে পারে। Prettier: Ignoring Code
উপযুক্ত VS Code স্কোপে ফরম্যাটিং নিষ্ক্রিয় করুন
ম্যাক-এ, গ্লোবাল পরিবর্তনের জন্য ⇧⌘P চাপুন এবং Preferences: Open User Settings (JSON) চালান, অথবা শুধুমাত্র বর্তমান প্রজেক্টকে প্রভাবিত করতে Preferences: Open Workspace Settings (JSON) চালান। ওয়ার্কস্পেস ফাইলটি প্রজেক্টের .vscode ফোল্ডারে সংরক্ষিত থাকে। VS Code User and workspace settings-এ উভয় সেটিংস স্কোপ এবং সেগুলোর ম্যাক কমান্ডের বিবরণ দিয়েছে।
শুধুমাত্র এই ওয়ার্কস্পেসে সেভ করার সময় ফরম্যাটিং বন্ধ করতে, এর বিদ্যমান JSON অবজেক্টে নিচের সেটিংটি যোগ করুন। ইতিমধ্যে থাকা অন্যান্য সেটিংস অপরিবর্তিত রাখুন এবং যেখানে প্রয়োজন সেখানে কমা যোগ করুন:
{
"editor.formatOnSave": false
}
নির্দিষ্ট কোনো ভাষার ক্ষেত্রে ছাড় দিতে, সেটিংটির স্কোপ সেই ভাষার মধ্যে সীমাবদ্ধ করুন। typescript-এর পরিবর্তে ফাইলের প্রকৃত VS Code ল্যাঙ্গুয়েজ আইডেন্টিফায়ারটি বসান, যা আপনি স্ট্যাটাস বার থেকে দেখে নিতে পারেন:
{
"[typescript]": {
"editor.formatOnSave": false
}
}
এটি কেবল জেনারেট করা পাথ নয়, নির্বাচিত স্কোপে সেই ভাষার প্রতিটি ফাইলের জন্য ফরম্যাট-অন-সেভ নিষ্ক্রিয় করে। আরও সুনির্দিষ্ট স্কোপ দ্বারা সেটিংস ওভাররাইডও হতে পারে, তাই ফাইলটি যদি এখনও পরিবর্তিত হয়, তবে @modified লিখে খুঁজুন এবং ইউজার ও ওয়ার্কস্পেস সেটিংসের পাশাপাশি ভাষা-নির্দিষ্ট ব্লকগুলোও পরীক্ষা করুন। VS Code-এর সেটিংস রেফারেন্সে ভাষা-নির্দিষ্ট সেটিংস এবং সেগুলোর অগ্রাধিকারের ক্রমানুসারের বিবরণ রয়েছে।
সেভ করার সময়ের অ্যাকশনগুলো আলাদাভাবে পরীক্ষা করুন
ফরম্যাটিং ইতিমধ্যে বন্ধ থাকা সত্ত্বেও যদি সেভ করার সময় ইমপোর্টগুলো পুনরায় সাজানো হয় বা ফিক্স প্রয়োগ করা হয়, তবে editor.codeActionsOnSave খুঁজে দেখুন। এটি ইমপোর্ট বিন্যস্ত করা এবং ফিক্স-অল (fix-all)-এর মতো অ্যাকশনগুলো নিয়ন্ত্রণ করে। শুধুমাত্র যে অ্যাকশনটি ফাইলটি পুনরায় লেখার জন্য দায়ী, সেটি সরিয়ে ফেলুন বা পরিবর্তন করুন; এই সেটিংটি পুরোপুরি নিষ্ক্রিয় করলে দরকারী সেভ-টাইম আচরণগুলোও বন্ধ হয়ে যেতে পারে। VS Code-এর Code Actions on Save সংক্রান্ত ডকুমেন্টেশন-এ সমর্থিত নিয়ন্ত্রণগুলো ব্যাখ্যা করা হয়েছে।
ফরম্যাটিং সুরক্ষার জন্য files.exclude ব্যবহার করবেন না: VS Code এটিকে এক্সপ্লোরার ভিজিবিলিটি সেটিং হিসেবে উল্লেখ করেছে, কোনো ফরম্যাটার ফাইল এডিট করবে কি না তা নিয়ন্ত্রণের জন্য নয়। ফরম্যাটারের যদি পাথ-ভিত্তিক ইগনোর করার সুবিধা না থাকে এবং কেবল কয়েকটি জেনারেট করা ফাইল প্রভাবিত হয়, তবে VS Code-এর ব্যবহারিক সমাধান হলো সেগুলোর ভাষা বা ওয়ার্কস্পেসের জন্য ফরম্যাট-অন-সেভ নিষ্ক্রিয় করা, তারপর প্রয়োজন অনুযায়ী সাধারণ ফাইলগুলো Format Document (⇧⌥F) দিয়ে ম্যানুয়ালি ফরম্যাট করা। VS Code Basic editing-এ সেই কমান্ডের বিবরণ দিয়েছে।
যেসব জেনারেট করা ফাইল বাইট-টু-বাইট অপরিবর্তিত রাখা আবশ্যক, সেগুলোর ক্ষেত্রে ফরম্যাটারের নিজস্ব ডকুমেন্টেড ইগনোর প্রক্রিয়া থাকলে সেটি ব্যবহার করা শ্রেয়। অন্যথায় সবচেয়ে সংকীর্ণ উপলব্ধ VS Code সেটিংস স্কোপ ব্যবহার করুন, তারপর একটি প্রতিনিধি জেনারেট করা ফাইল সেভ করুন এবং কোন আচরণটি দায়ী তা নিশ্চিত করতে ডিফারেন্স (diff) পরীক্ষা করুন।
তথ্যসূত্র
Basic editing — Visual Studio Code
Code Actions on Save — Visual Studio Code
User and workspace settings — Visual Studio Code
Ignoring Code — Prettier