কম্পিউটার

RuboCop সহ রুবি কোড লিন্টিং এবং স্বয়ংক্রিয় ফর্ম্যাটিং

লিন্টিং হল প্রোগ্রামেটিক এবং স্টাইলিস্টিক ত্রুটির জন্য সোর্স কোডের স্বয়ংক্রিয় পরীক্ষা। এই চেকিং একটি স্ট্যাটিক কোড বিশ্লেষণ টুল দ্বারা সঞ্চালিত হয় যাকে লিন্টার বলা হয়। একটি কোড ফরম্যাটার, যাইহোক, সোর্স কোড ফর্ম্যাট করার সাথে সম্পর্কিত একটি টুল যাতে এটি পূর্ব-কনফিগার করা নিয়মগুলির কঠোরভাবে মেনে চলে। একটি লিন্টার সাধারণত লঙ্ঘনের রিপোর্ট করবে, তবে এটি সাধারণত প্রোগ্রামারের উপর নির্ভর করে সমস্যাটি সমাধান করা, যখন একটি কোড ফর্ম্যাটার তার নিয়মগুলি সরাসরি সোর্স কোডে প্রয়োগ করে, এইভাবে ফর্ম্যাটিং ভুলগুলি স্বয়ংক্রিয়ভাবে সংশোধন করে৷

একটি প্রজেক্টে একটি আরও সামঞ্জস্যপূর্ণ কোড শৈলী তৈরি করার কাজটি সাধারণত একটি পৃথক লিন্টিং এবং ফর্ম্যাটিং সরঞ্জামগুলির প্রবর্তনের প্রয়োজন হয়, তবে কিছু ক্ষেত্রে, একটি একক সরঞ্জাম উভয় উদ্বেগের সমাধান করতে সক্ষম হবে। পরেরটির একটি ভাল উদাহরণ হল রুবোকপ, যা এই প্রবন্ধে আমরা ব্যাপকভাবে বিবেচনা করব। আপনি আপনার রুবি প্রকল্পে এটি কীভাবে সেট আপ করবেন এবং এর কনফিগারেশন বিকল্পগুলি সামঞ্জস্য করবেন তা শিখবেন যাতে এর আউটপুট আপনার প্রত্যাশার সাথে মেলে। এটিকে আপনার স্থানীয় উন্নয়ন প্রক্রিয়ার সাথে একীভূত করার পাশাপাশি, আপনি কীভাবে এটিকে আপনার ক্রমাগত একীকরণ কর্মপ্রবাহের একটি অংশ করতে হয় তাও শিখবেন৷

রুবোকপ ইনস্টল করা হচ্ছে

RuboCop ইনস্টল করা RubyGems এর মাধ্যমে সহজবোধ্য:

$ gem install rubocop

ইনস্টল করা সংস্করণটি পরীক্ষা করুন:

$ rubocop --version
1.18.3

আপনি যদি বান্ডলার ব্যবহার করতে চান তবে নিচের স্নিপেটটি আপনার Gemfile-এ রাখুন এবং তারপর bundle install চালান . require: false অংশ Bundler.require বলে আপনার কোডে সেই নির্দিষ্ট রত্নটির প্রয়োজন হবে না কারণ এটি শুধুমাত্র কমান্ড লাইন থেকে ব্যবহার করা হবে।

gem 'rubocop', require: false

ইনস্টল করা সংস্করণটি পরীক্ষা করুন:

$ bundle exec rubocop --version
1.18.3

রুবোকপ চালানো

আপনি rubocop টাইপ করে আপনার প্রকল্পে এটির ডিফল্ট সেটিংস ব্যবহার করে RuboCop চালাতে পারেন (বা bundle exec rubocop যদি বান্ডলারের সাথে ইনস্টল করা হয়)। আপনি যদি কমান্ডে কোনো আর্গুমেন্ট না দেন, তাহলে এটি বর্তমান ডিরেক্টরির সমস্ত রুবি সোর্স ফাইলের পাশাপাশি সমস্ত সাব ডিরেক্টরি পরীক্ষা করবে। বিকল্পভাবে, আপনি ফাইল এবং ডিরেক্টরিগুলির একটি তালিকা পাস করতে পারেন যা বিশ্লেষণ করা উচিত।

$ bundle exec rubocop
$ bundle exec rubocop src/lib

কোনো কনফিগারেশন ছাড়াই, RuboCop সম্প্রদায়-চালিত রুবি স্টাইল গাইডে বর্ণিত অনেক নির্দেশিকা প্রয়োগ করে। কমান্ড চালানোর পরে, আপনি বিভিন্ন ত্রুটি (অপরাধ) পেতে পারেন। প্রতিটি রিপোর্ট করা অপরাধ এটি সমাধান করার জন্য প্রয়োজনীয় সমস্ত তথ্য দিয়ে সজ্জিত করা হয়, যেমন অপরাধের বিবরণ, এবং ফাইল এবং লাইন নম্বর যেখানে এটি ঘটেছে৷

RuboCop সহ রুবি কোড লিন্টিং এবং স্বয়ংক্রিয় ফর্ম্যাটিং

প্রতিবেদনের নীচে, আপনি পরিদর্শন করা ফাইলের সংখ্যা, মোট অপরাধের সংখ্যা এবং কতগুলি অপরাধ স্বয়ংক্রিয়ভাবে সংশোধন করা যেতে পারে তা বর্ণনা করে একটি লাইন দেখতে পাবেন৷ আপনি যদি -a যোগ করেন অথবা --auto-correct যুক্তি, RuboCop আপনার সোর্স ফাইলগুলিতে পাওয়া সমস্যাগুলি স্বয়ংক্রিয়ভাবে সংশোধন করার চেষ্টা করবে (যেগুলির উপসর্গ [Correctable] )।

$ bundle exec rubocop -a

RuboCop সহ রুবি কোড লিন্টিং এবং স্বয়ংক্রিয় ফর্ম্যাটিং

লক্ষ্য করুন কিভাবে প্রতিটি সংশোধিত অপরাধের সাথে এখন [Corrected] উপসর্গ রয়েছে . সংশোধিত অপরাধের সংখ্যার একটি সারসংক্ষেপও প্রতিবেদনের নীচে উপস্থাপন করা হয়েছে। উপরের উদাহরণে, আরও একটি সংশোধনযোগ্য অপরাধ রয়েছে যা স্বয়ংক্রিয়ভাবে সংশোধন করা হয়নি, এমনকি -a যুক্ত করার পরেও পতাকা এর কারণ হল কিছু স্বয়ংক্রিয় সংশোধন কোডের শব্দার্থকে সামান্য পরিবর্তন করতে পারে, তাই রুবোকপ এটিকে অনিরাপদ বলে মনে করে। আপনি যদি এই অপরাধগুলিকেও স্বয়ংক্রিয়ভাবে সংশোধন করতে চান তবে -A ব্যবহার করুন অথবা --auto-correct-all পতাকা।

$ bundle exec rubocop -A

RuboCop সহ রুবি কোড লিন্টিং এবং স্বয়ংক্রিয় ফর্ম্যাটিং

আপনার কোডের আচরণ যাতে অপ্রত্যাশিতভাবে পরিবর্তিত না হয় তা নিশ্চিত করার জন্য স্বতঃসংশোধন কার্যকারিতা ব্যবহার করার পরে আপনার পরীক্ষা স্যুট চালানোর জন্য একটি ভাল নিয়ম অনুসরণ করা হয়।

রুবোকপ কনফিগার করা হচ্ছে

RuboCop একটি .rubocop.yml এর মাধ্যমে কনফিগার করা যেতে পারে আপনার প্রকল্পের মূলে স্থাপন করা ফাইল। আপনি যদি সমস্ত প্রকল্পের জন্য একই চেক ব্যবহার করতে চান তবে আপনি আপনার হোম ডিরেক্টরিতে একটি গ্লোবাল কনফিগারেশন ফাইল রাখতে পারেন (~/.rubocop.yml ) বা XDG কনফিগারেশন ডিরেক্টরি (~/.config/rubocop/config.yml ) এই গ্লোবাল কনফিগারেশন ফাইলটি ব্যবহার করা হবে যদি একটি স্থানীয়ভাবে স্কোপড প্রজেক্ট কনফিগারেশন ফাইল বর্তমান ডিরেক্টরি বা ধারাবাহিক প্যারেন্ট ডিরেক্টরিতে না পাওয়া যায়।

রুবোকপের ডিফল্ট কনফিগারেশনটি এর কনফিগারেশন হোম ডিরেক্টরিতে (~/.config/rubocop/default.yml ), এবং অন্যান্য সমস্ত কনফিগার ফাইল এটি থেকে উত্তরাধিকারসূত্রে প্রাপ্ত। এর মানে হল যে আপনার প্রোজেক্ট কনফিগারেশন সেট আপ করার সময়, আপনাকে শুধুমাত্র ডিফল্ট থেকে ভিন্ন পরিবর্তন করতে হবে। এর অর্থ হতে পারে নির্দিষ্ট চেকগুলিকে সক্ষম বা অক্ষম করা বা তাদের আচরণ পরিবর্তন করা যদি তারা কোনও প্যারামিটার গ্রহণ করে।

রুবোকপ প্রতিটি পৃথক চেককে পুলিশ হিসাবে উল্লেখ করে এবং প্রত্যেকে একটি নির্দিষ্ট অপরাধ সনাক্ত করার জন্য দায়ী। উপলব্ধ পুলিশগুলিকেও নিম্নলিখিত বিভাগে বিভক্ত করা হয়েছে:

  • স্টাইল পুলিশগুলি বেশিরভাগই উপরে উল্লিখিত রুবি স্টাইল গাইডের উপর ভিত্তি করে, এবং তারা আপনার কোডের সামঞ্জস্যতা পরীক্ষা করে।
  • লেআউট পুলিশ ফরম্যাটিং সম্পর্কিত সমস্যাগুলি ধরতে পারে, যেমন সাদা স্থানের ব্যবহার৷
  • লিন্ট পুলিশ আপনার কোডে সম্ভাব্য ত্রুটি সনাক্ত করে, যেমন ruby -w , কিন্তু অতিরিক্ত চেকের হোস্ট সহ।
  • মেট্রিক পুলিশ সোর্স কোড পরিমাপের সাথে সম্পর্কিত বিষয় যেমন ক্লাসের দৈর্ঘ্য এবং পদ্ধতির দৈর্ঘ্য নিয়ে কাজ করে।
  • নামকরণ পুলিশগুলি নামকরণের প্রথার সাথে সংশ্লিষ্ট৷
  • নিরাপত্তা পুলিশগুলি সম্ভাব্য নিরাপত্তা সমস্যাগুলি ধরতে সাহায্য করে৷
  • বান্ডলার পুলিশ বান্ডলার ফাইলগুলিতে খারাপ অনুশীলনগুলি পরীক্ষা করে (যেমন Gemfile )।
  • Gemspec পুলিশগুলি .gemspec-এ খারাপ অনুশীলনগুলি পরীক্ষা করে ফাইল।

অতিরিক্ত লিন্টার এবং ফর্ম্যাটারগুলির মাধ্যমে রুবোকপ প্রসারিত করাও সম্ভব। আপনি আপনার নিজস্ব এক্সটেনশন তৈরি করতে পারেন বা বিদ্যমানগুলির সুবিধা নিতে পারেন যদি সেগুলি আপনার প্রকল্পের সাথে প্রাসঙ্গিক হয়। উদাহরণস্বরূপ, রেলের সর্বোত্তম অনুশীলন এবং কোডিং কনভেনশনগুলি প্রয়োগ করার উদ্দেশ্যে একটি রেল এক্সটেনশন উপলব্ধ৷

RuboCop সহ রুবি কোড লিন্টিং এবং স্বয়ংক্রিয় ফর্ম্যাটিং

আপনি যখন প্রথমবার আপনার কনফিগারেশন ফাইল তৈরি করবেন, তখন আপনি নতুন পুলিশদের উপস্থিতি সম্পর্কে সতর্ক করে এমন অনেক বার্তা পাবেন যেগুলি যোগ করা হয়েছে কিন্তু কনফিগার করা হয়নি৷ এর কারণ হল রুবোকপ প্রতিটি রিলিজে নতুন পুলিশ যোগ করে এবং ব্যবহারকারী কনফিগারেশনে স্পষ্টভাবে সক্ষম বা নিষ্ক্রিয় না হওয়া পর্যন্ত এগুলি একটি বিশেষ মুলতুবি অবস্থায় সেট করা হয়। আপনি বার্তায় তালিকাভুক্ত প্রতিটি পুলিশকে পৃথকভাবে সক্ষম বা নিষ্ক্রিয় করতে পারেন বা সমস্ত নতুন পুলিশকে সক্ষম করতে নীচের স্নিপেটটি ব্যবহার করতে পারেন (প্রস্তাবিত)৷ পরে, বার্তাগুলিকে দমন করা হবে৷

# .rubocop.yml
AllCops:
  NewCops: enable

আপনি যদি কনফিগারেশন ফাইল এবং রুবোকপ দ্বারা প্রদত্ত বিকল্পগুলির সম্পদের সাথে বাজি ধরতে না চান তবে স্ট্যান্ডার্ড প্রকল্পটি একবার দেখে নিন। এটি মূলত RuboCop-এর একটি পূর্ব-কনফিগার করা সংস্করণ যা এর কোনো নিয়ম কাস্টমাইজ করার অনুমতি না দিয়ে আপনার রুবি প্রকল্পে একটি সামঞ্জস্যপূর্ণ শৈলী প্রয়োগ করার লক্ষ্য রাখে। লাইটনিং টক যেখানে এটি প্রথম ঘোষণা করা হয়েছিল তার উত্স এবং প্রেরণা সম্পর্কে আরও বিশদ বিবরণ দেয়৷

আপনি আপনার Gemfile-এ নিম্নলিখিত লাইন যোগ করে এটি ইনস্টল করতে পারেন এবং তারপর bundle install চালান .

# Gemfile
gem "standard", group: [:development, :test]

তারপরে, আপনি নিম্নরূপ কমান্ড লাইন থেকে স্ট্যান্ডার্ড কার্যকর করতে পারেন:

$ bundle exec standardrb

একটি বিদ্যমান প্রকল্পে রুবোকপ যোগ করা

বেশিরভাগ রুবিস্টদের গ্রিনফিল্ড প্রকল্পে কাজ করার বিলাসিতা নেই। আমাদের বিকাশের বেশিরভাগ সময় উত্তরাধিকার কোডবেসে ব্যয় করা হয় যা প্রচুর পরিমাণে লিন্টিং অপরাধ তৈরি করতে পারে যা অবিলম্বে মোকাবেলা করা যায় না। সৌভাগ্যবশত, RuboCop-এর একটি দরকারী বৈশিষ্ট্য রয়েছে যা বিদ্যমান অপরাধগুলির একটি অনুমোদিত তালিকা তৈরি করে, যা সময়ের সাথে ধীরে ধীরে সমাধান করা যেতে পারে। সুবিধা হল যে এটি আপনাকে আপনার বিদ্যমান প্রজেক্টে লিন্টিং চালু করার অনুমতি দেয় এবং সামনের দিকে যেকোনও নতুন লঙ্ঘন ফ্ল্যাগ করার সময় অব্যবস্থাপনাযোগ্য লিন্টিং ত্রুটির পাহাড়ে বোমাবাজি না করে।

$ bundle exec rubocop

523 files inspected, 1018 offenses detected

অনুমতি তালিকা কনফিগার ফাইল তৈরি করা নিচের কমান্ডের মাধ্যমে করা যেতে পারে:

$ bundle exec rubocop --auto-gen-config
Added inheritance from `.rubocop_todo.yml` in `.rubocop.yml`.
Created .rubocop_todo.yml.

--auto-gen-config বিকল্পটি সমস্ত অপরাধ এবং তাদের গণনা সংগ্রহ করে এবং একটি .rubocop_todo.yml তৈরি করে বর্তমান ডিরেক্টরিতে ফাইল করুন যেখানে সমস্ত বর্তমান অপরাধ উপেক্ষা করা হয়। অবশেষে, এটি .rubocop.yml ঘটায় .rubocop_todo.yml থেকে উত্তরাধিকারী হতে ফাইল করুন যাতে আবার কোডবেসে রুবোকপ চালানোর ফলে কোনো অপরাধ হবে না।

$ bundle exec rubocop
523 files inspected, no offenses detected

অনুমোদিত তালিকা তৈরি করার সময়, লঙ্ঘনের সংখ্যা একটি নির্দিষ্ট থ্রেশহোল্ড (ডিফল্টরূপে 15) অতিক্রম করলে RuboCop একজন পুলিশকে সম্পূর্ণভাবে বন্ধ করে দেবে। এটি সাধারণত আপনি যা চান তা নয় কারণ এটি বিদ্যমান লঙ্ঘনের সংখ্যার কারণে সেই পুলিশের বিরুদ্ধে নতুন কোড পরীক্ষা করা থেকে বাধা দেয়। সৌভাগ্যবশত, থ্রেশহোল্ড বাড়ানো সম্ভব যাতে লঙ্ঘনের সংখ্যা বেশি হলেও পুলিশ অক্ষম না হয়।

$ bundle exec rubocop --auto-gen-config --auto-gen-only-exclude --exclude-limit 10000

--auto-gen-only-exclude বিকল্পটি নিশ্চিত করে যে অনুমোদিত তালিকার প্রতিটি পুলিশ একটি Exclude আছে ব্লক যা Max এর পরিবর্তে লঙ্ঘন ঘটেছে এমন সমস্ত ফাইলের তালিকা করে , যা একজন পুলিশের জন্য বাদ দেওয়া ফাইলের সর্বোচ্চ সংখ্যা সেট করে। --exclude-limit সেট করা হচ্ছে এছাড়াও Exclude-এ যোগ করা যেতে পারে এমন সর্বোচ্চ সংখ্যক ফাইল পরিবর্তন করে প্রতিটি পুলিশের জন্য ব্লক। পরীক্ষা করা ফাইলের মোট সংখ্যার চেয়ে বড় একটি নির্বিচারে সংখ্যা নির্দিষ্ট করা নিশ্চিত করে যে কোনও পুলিশ সরাসরি অক্ষম করা হবে না এবং বিদ্যমান বা নতুন ফাইলগুলিতে যোগ করা কোনও নতুন কোড সেই অনুযায়ী চেক করা হবে৷

বিদ্যমান লঙ্ঘন ঠিক করা

.rubocop_todo.yml তৈরি করার পরে ফাইল, বিদ্যমান লঙ্ঘনগুলি ভুলে যাওয়া গুরুত্বপূর্ণ নয়, তবে ধীরে ধীরে একের পর এক সেগুলির সমাধান করা গুরুত্বপূর্ণ৷ আপনি Exclude থেকে একটি ফাইল সরিয়ে এটি করতে পারেন একজন পুলিশকে ব্লক করুন, তারপরে রিপোর্ট করা লঙ্ঘনগুলি ঠিক করুন, বাগ প্রবর্তন এড়াতে আপনার পরীক্ষা স্যুট চালান এবং প্রতিশ্রুতি দিন। একবার আপনি একজন পুলিশ থেকে সমস্ত ফাইল মুছে ফেললে, আপনি ফাইল থেকে কপটিকে ম্যানুয়ালি মুছে ফেলতে পারেন, বা অনুমতি তালিকার ফাইলটি আবার তৈরি করতে পারেন। --auto-correct ব্যবহার করতে ভুলবেন না বিকল্পটি যেখানে সম্ভব প্রক্রিয়াটিকে আরও দ্রুত করার জন্য।

একটি স্টাইল গাইড গ্রহণ করা

RuboCop খুব কনফিগারযোগ্য, যা এটিকে যেকোনো ধরনের প্রকল্পের জন্য কার্যকর করে তোলে। যাইহোক, আপনার প্রয়োজনীয়তা অনুযায়ী নিয়মগুলি কনফিগার করতে অনেক সময় লাগতে পারে, বিশেষ করে যদি আপনি অনেক ডিফল্ট নিয়মের সাথে একমত না হন। এই ধরনের পরিস্থিতিতে, একটি বিদ্যমান শৈলী নির্দেশিকা গ্রহণ করা উপকারী হতে পারে। বেশ কিছু কোম্পানি ইতিমধ্যেই জনসাধারণের ব্যবহারের জন্য তাদের রুবি স্টাইল গাইড প্রকাশ করেছে, যেমন Shopify এবং Airbnb। RuboCop-এ আপনার পছন্দের স্টাইল গাইড ব্যবহার করা আপনার Gemfile-এ প্রাসঙ্গিক রত্ন যোগ করে অর্জন করা যেতে পারে। :

# Gemfile
gem "rubocop-shopify", require: false

তারপর, আপনার প্রকল্প কনফিগারেশনে এটি প্রয়োজন:

# .rubocop.yml
inherit_gem:
  rubocop-shopify: rubocop.yml

লিন্টিং ত্রুটিগুলি দমন করা

যদিও রুবোকপ একটি দুর্দান্ত সরঞ্জাম, এটি সময়ে সময়ে মিথ্যা ইতিবাচক ফল দিতে পারে বা কোডটি এমনভাবে ঠিক করার পরামর্শ দিতে পারে যা প্রোগ্রামারের উদ্দেশ্যের জন্য ক্ষতিকর। যখন এই ধরনের পরিস্থিতি দেখা দেয়, আপনি সোর্স কোডে একটি মন্তব্য দিয়ে লঙ্ঘন উপেক্ষা করতে পারেন। আপনি অক্ষম করার জন্য পৃথক পুলিশ বা বিভাগগুলি উল্লেখ করতে পারেন, যেমন নীচে দেখানো হয়েছে:

# rubocop:disable Layout/LineLength, Style
[..]
# rubocop:enable Layout/LineLength, Style

অথবা আপনি কোডের একটি অংশের জন্য সমস্ত পুলিশকে অক্ষম করতে পারেন এক ধাক্কায়:

# rubocop:disable all
[..]
# rubocop:enable all

আপনি যদি লাইনের শেষ মন্তব্য ব্যবহার করেন, তবে নির্দিষ্ট পুলিশ শুধুমাত্র সেই লাইনেই নিষ্ক্রিয় হয়ে যাবে।

for x in (0..10) # rubocop:disable Style/For

এডিটর ইন্টিগ্রেশন

প্রতিবার কমান্ড লাইনের মাধ্যমে চেক চালানোর পরিবর্তে আপনি সম্পাদকে কোড টাইপ করার সাথে সাথে রুবোকপ দ্বারা উত্পাদিত সতর্কতা এবং ত্রুটিগুলি দেখতে সুবিধাজনক। সৌভাগ্যক্রমে, রুবোকপ ইন্টিগ্রেশন বেশিরভাগ জনপ্রিয় কোড এডিটর এবং আইডিইতে পাওয়া যায়, বেশিরভাগই তৃতীয় পক্ষের প্লাগইনগুলির মাধ্যমে। ভিজ্যুয়াল স্টুডিও কোডে, আপনাকে যা করতে হবে তা হল এই রুবি এক্সটেনশনটি ইনস্টল করুন এবং আপনার ব্যবহারকারী settings.json-এ নিম্নলিখিতগুলি রাখুন ফাইল:

{
  "ruby.lint": {
    "rubocop": true
  }
}

আপনি যদি Vim বা Neovim ব্যবহার করেন, তাহলে আপনি coc.nvim-এর মাধ্যমে RuboCop-এর ডায়াগনস্টিকস প্রদর্শন করতে পারেন। আপনাকে সোলারগ্রাফ ভাষা সার্ভার ইনস্টল করতে হবে (gem install solargraph ), তারপরে coc-সোলারগ্রাফ এক্সটেনশন (:CocInstall coc-solargraph ) তারপরে, আপনার coc-settings.json কনফিগার করুন নীচে দেখানো হিসাবে ফাইল:

{
  "coc.preferences.formatOnSaveFiletypes": ["ruby"],
  "solargraph.autoformat": true,
  "solargraph.diagnostics": true,
  "solargraph.formatting": true
}

RuboCop সহ রুবি কোড লিন্টিং এবং স্বয়ংক্রিয় ফর্ম্যাটিং

প্রি-কমিট হুক সেট আপ করা

সোর্স কন্ট্রোলে চেক করার আগে একটি প্রোজেক্টের সমস্ত রুবি কোড লিন্টেড এবং সঠিকভাবে ফর্ম্যাট করা হয়েছে তা নিশ্চিত করার একটি দুর্দান্ত উপায় হল একটি গিট প্রি-কমিট হুক সেট আপ করা যা প্রতিটি স্টেজ করা ফাইলে রুবোকপ চালায়। এই নিবন্ধটি আপনাকে দেখাবে কিভাবে ওভারকমিটের সাথে এটি সেট আপ করতে হয়, গিট প্রি-কমিট হুকগুলি পরিচালনা এবং কনফিগার করার জন্য একটি সরঞ্জাম, তবে আপনি যদি ইতিমধ্যেই একটি বিদ্যমান প্রি-কমিট ওয়ার্কফ্লো থাকে তবে আপনি অন্যান্য সরঞ্জামগুলির সাথে রুবোকপকে সংহত করতে পারেন৷

প্রথমে, RubyGems এর মাধ্যমে Overcommit ইন্সটল করুন এবং তারপর আপনার প্রোজেক্টে ইন্সটল করুন:

$ gem install overcommit
$ overcommit --install # at the root of your project

উপরের দ্বিতীয় কমান্ডটি একটি রেপো-নির্দিষ্ট সেটিংস ফাইল তৈরি করবে (.overcommit.yml ) বর্তমান ডিরেক্টরিতে এবং যেকোনো বিদ্যমান হুক ব্যাক আপ করুন। এই ফাইলটি ডিফল্ট কনফিগারেশনকে প্রসারিত করে, তাই আপনাকে শুধুমাত্র ডিফল্টের ক্ষেত্রে আপনার কনফিগারেশন নির্দিষ্ট করতে হবে। উদাহরণস্বরূপ, আপনি নিম্নলিখিত স্নিপেটের মাধ্যমে রুবোকপ প্রি-কমিট হুক সক্ষম করতে পারেন:

# .overcommit.yml
PreCommit:
  RuboCop:
    enabled: true
    on_warn: fail
    problem_on_unmodified_line: ignore
    command: ['bundle', 'exec', 'rubocop']

on_warn: fail সেটিং ওভারকমিটের কারণে সতর্কতাকে ব্যর্থতা হিসেবে বিবেচনা করে, যখন problem_on_unmodified_line: ignore উপেক্ষা করার জন্য মঞ্চস্থ করা হয়নি এমন লাইনগুলিতে সতর্কতা এবং ত্রুটি সৃষ্টি করে। আপনি প্রোজেক্টের গিটহাব পৃষ্ঠায় সমস্ত উপলব্ধ হুক বিকল্প এবং তাদের গ্রহণযোগ্য মানগুলির পরিসীমা ব্রাউজ করতে পারেন। আপনাকে overcommit --sign চালানোর প্রয়োজন হতে পারে পরিবর্তনগুলি কার্যকর হওয়ার জন্য আপনার কনফিগারেশন ফাইল পরিবর্তন করার পরে৷

RuboCop সহ রুবি কোড লিন্টিং এবং স্বয়ংক্রিয় ফর্ম্যাটিং

মাঝে মাঝে, আপনি যদি এমন একটি ফাইল কমিট করতে চান যা সমস্ত চেক পাস করে না (যেমন একটি কাজ চলছে), আপনি কেস-বাই-কেস ভিত্তিতে পৃথক চেকগুলি এড়িয়ে যেতে পারেন:

$ SKIP=RuboCop git commit -m "WIP: Unfinished work"

আপনার CI ওয়ার্কফ্লোতে রুবোকপ যোগ করা হচ্ছে

প্রতিটি পুল অনুরোধে RuboCop চেক চালানো হল খারাপভাবে ফর্ম্যাট করা কোডকে আপনার প্রোজেক্টে একত্রিত হওয়া থেকে আটকানোর আরেকটি উপায়। যদিও আপনি যেকোনো CI টুল দিয়ে এটি সেট আপ করতে পারেন, এই নিবন্ধটি শুধুমাত্র GitHub অ্যাকশনের মাধ্যমে কিভাবে RuboCop চালাতে হয় তা নিয়ে আলোচনা করবে।

প্রথম ধাপ হল একটি .github/workflows তৈরি করা আপনার প্রকল্পের মূলে ডিরেক্টরি এবং একটি rubocop.yml নতুন ডিরেক্টরির মধ্যে ফাইল। আপনার সম্পাদকে ফাইলটি খুলুন এবং এটিকে নিম্নরূপ আপডেট করুন:

# .github/workflows/rubocop.yml
name: Lint code with RuboCop

on: [push, pull_request]

jobs:
  build:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [macos-latest, ubuntu-latest, windows-latest]

    steps:
    - uses: actions/checkout@v2

    - name: Setup Ruby
      uses: ruby/setup-ruby@v1
      with:
        ruby-version: '3.0'
        bundler-cache: true

    - name: Run RuboCop
      run: bundle exec rubocop

উপরের ওয়ার্কফ্লো ফাইলটি একটি একক কাজের বর্ণনা করে যা GitHub-এ কোড পুশ করা হলে বা কোনো শাখার বিরুদ্ধে পুল অনুরোধ করা হলে তা কার্যকর করা হবে। একটি job ধাপের একটি ক্রম যা ক্রমানুসারে চলে। এই নির্দিষ্ট কাজটি GitHub অ্যাকশন দ্বারা প্রদত্ত সর্বশেষ উবুন্টু, ম্যাকওএস এবং উইন্ডোজ সংস্করণে একবার চলবে (যেমন runs-on দ্বারা সংজ্ঞায়িত করা হয়েছে। এবং strategy.matrix ) প্রথম ধাপটি রিপোজিটরিতে কোডটি পরীক্ষা করে, যখন পরেরটি রুবি টুল চেইন এবং নির্ভরতা সেট আপ করে এবং শেষটি রুবোকপ চালায়।

একবার আপনি ফাইলটি সম্পাদনা করার পরে, এটি সংরক্ষণ করুন, প্রতিশ্রুতিবদ্ধ করুন এবং GitHub-এ পুশ করুন। এরপরে, আপনি পরবর্তী চেক-ইন এবং পুল অনুরোধে রিপোর্ট করা যেকোনো সমস্যার একটি ইনলাইন ডিসপ্লে পাবেন।

RuboCop সহ রুবি কোড লিন্টিং এবং স্বয়ংক্রিয় ফর্ম্যাটিং

বিকল্প অটো-ফরম্যাটার

যদিও RuboCop বিস্তৃত স্বয়ংক্রিয়-ফরম্যাটিং ক্ষমতা প্রদান করে, তবে এটি আপনার প্রয়োজনীয়তা পর্যাপ্তভাবে পূরণ না করলে বিকল্প সরঞ্জাম সম্পর্কে সচেতন হওয়াও গুরুত্বপূর্ণ৷

সুন্দর

Prettier জাভাস্ক্রিপ্টের জন্য একটি মতামতযুক্ত কোড ফর্ম্যাটার হিসাবে শুরু হয়েছিল, কিন্তু এটি এখন রুবি সহ অন্যান্য অনেক ভাষা সমর্থন করে। এর রুবি প্লাগইন ইনস্টল করা সোজা সামনে:prettier যোগ করুন আপনার Gemfile-এ রত্ন এবং তারপর bundle চালান .

# Gemfile
gem 'prettier'

এই মুহুর্তে, আপনি নিম্নলিখিত কমান্ডের মাধ্যমে আপনার রুবি কোডটি Prettier-এর সাথে ফর্ম্যাট করতে পারেন:

$ bundle exec rbprettier --write '**/*.rb'

Prettier-এর কিছু নিয়ম RuboCop-এর সাথে সাংঘর্ষিক, তাই পরেরটির ফর্ম্যাটিং চেকগুলি অক্ষম করা প্রয়োজন যাতে এটি Prettier-এর সাথে হস্তক্ষেপ না করে। সৌভাগ্যবশত, রুবোকপ চেকগুলি বন্ধ করা সহজ যা প্রেটিয়ারের সাথে বিরোধপূর্ণ বা অপ্রয়োজনীয়। আপনাকে যা করতে হবে তা হল আপনার প্রজেক্টের .rubocop.yml-এর শীর্ষে Prettier-এর RuboCop কনফিগারেশনের উত্তরাধিকার। ফাইল:

# .rubocop.yml
inherit_gem:
  prettier: rubocop.yml

আপনি যখন RuboCop চালান (bundle exec rubocop সহ ) এখন থেকে, এটি কোনো লেআউট সম্পর্কিত অপরাধের প্রতিবেদন করবে না, যা Prettier এর নিজস্ব নিয়ম অনুযায়ী সেগুলি সংশোধন করার পথ তৈরি করবে। আপনি প্রেটিয়ারের আউটপুট কনফিগারেশন ফাইলের মাধ্যমে কনফিগার করতে পারেন, যা একই প্রকল্পে জাভাস্ক্রিপ্ট এবং রুবি কোডের মধ্যে ভাগ করা যেতে পারে।

RubyFmt

RubyFmt হল একটি একেবারে নতুন কোড ফরম্যাটার যা রাস্টে লেখা এবং বর্তমানে সক্রিয় বিকাশের অধীনে রয়েছে। Prettier এর মত, এটি একটি ফর্ম্যাটার এবং একটি কোড বিশ্লেষণ টুল নয় উদ্দেশ্যে করা হয়. এটি এখনও একটি স্থিতিশীল রিলিজ দেখেনি, তাই আপনার সম্ভবত এখনই এটি গ্রহণ করা বন্ধ করা উচিত, তবে এটি অবশ্যই নজরে রাখার জন্য একটি।

উপসংহার

লিন্টিং এবং অটো-ফরম্যাটিং কোড একটি কোড বেসে অনেক সুবিধা নিয়ে আসে, বিশেষ করে ডেভেলপারদের একটি দলের প্রসঙ্গে। এমনকি যদি আপনি আপনার কোডকে কীভাবে ফর্ম্যাট করতে হয় তা বলা পছন্দ না করেন তবে আপনাকে মনে রাখতে হবে যে লিন্টিং শুধুমাত্র আপনার জন্য নয়। এটি অন্য লোকেদের জন্যও যাদের সাথে আপনি সহযোগিতা করেন যাতে প্রত্যেকে একই প্রজেক্টে একাধিক কোডিং শৈলীর সাথে ডিল করার ত্রুটিগুলি দূর করে একই নিয়মে লেগে থাকতে পারে৷

লিন্টারের আউটপুটকে গসপেল হিসাবে বিবেচনা না করাও গুরুত্বপূর্ণ, তাই এটিকে এমনভাবে কনফিগার করার চেষ্টা করুন যা আপনার মূল উদ্দেশ্যগুলি থেকে বিভ্রান্ত না হয়ে আপনাকে সর্বাধিক সুবিধা প্রদান করে। RuboCop এর বিস্তৃত কনফিগারেশন সেটিংসের সাথে, এটি একটি সমস্যা হওয়া উচিত নয়। যাইহোক, যদি আপনি দেখেন যে রুবোকপ কনফিগার করা আপনার সময়ের অনেক বেশি সময় নিচ্ছে, আপনি পূর্বনির্ধারিত শৈলী নির্দেশিকা ব্যবহার করতে পারেন, যেমনটি আগে আলোচনা করা হয়েছে, অথবা একটি নো-কনফিগার বিকল্পের জন্য স্ট্যান্ডার্ড গ্রহণ করতে পারেন যা সামান্য বিশদ সম্পর্কে চিন্তা না করে সবাই ব্যবহার করতে পারে। .

পড়ার জন্য ধন্যবাদ, এবং খুশি কোডিং!


  1. রুবির সাথে মার্জ সাজানোর অন্বেষণ

  2. মৌলিক ওওপি নীতিগুলির সাথে আপনার রুবি কোডকে কীভাবে নাটকীয়ভাবে উন্নত করবেন

  3. রুবি মধ্যে স্ট্যাটিক বিশ্লেষণ

  4. কিভাবে আপনার আইপ্যাড এবং আইফোন দিয়ে একটি QR কোড স্ক্যান করবেন?