configlet-এর প্রধান কাজ হলো লিন্টিং: কোনো ট্র্যাকের কনফিগারেশন ফাইল সঠিকভাবে গঠিত কি না তা যাচাই করা, সিনট্যাক্স ও সিম্যান্টিক্স উভয় দিক থেকেই। ভুলভাবে কনফিগার করা ট্র্যাক ঠিকভাবে সিঙ্ক নাও হতে পারে, ওয়েবসাইটে ভুল দেখাতে পারে, বা ইউজার এক্সপেরিয়েন্সকে দুর্বল করে তুলতে পারে। তাই Exercism-এর অখণ্ডতা রক্ষায় configlet-এর গার্ডগুলো গুরুত্বপূর্ণ ভূমিকা পালন করে।
lint কমান্ডটি দিয়ে একটি ট্র্যাক লিন্ট করা যায়।
configlet [global-options] lint [command-options]
Global options:
-h, --help Show this help message and exit
--version Show this tool's version information and exit
-t, --track-dir <dir> Specify a track directory to use instead of the current directory
-v, --verbosity <verbosity> The verbosity of output. Allowed values: q[uiet], n[ormal], d[etailed]
নিচে যেসব লিন্টিং নিয়ম যাচাই করা হয় সেগুলো দেওয়া হলো।
লিন্টারের যাচাই করা উচিত সব আবশ্যক ফাইল উপস্থিত আছে কি না। অনুশীলনী-নির্দিষ্ট নয়, এমন যে ফাইলগুলো অবশ্যই থাকতে হবে সেগুলো হলো:
config.jsondocs/ABOUT.mddocs/INSTALLATION.mddocs/LEARNING.mddocs/RESOURCES.mddocs/SNIPPET.txtdocs/TESTS.mdexercises/shared/.docs/help.mdexercises/shared/.docs/tests.mdকনসেপ্ট অনুশীলনী-নির্দিষ্ট যে ফাইলগুলো অবশ্যই থাকতে হবে সেগুলো হলো:
exercises/concept/<slug>/.docs/hints.mdexercises/concept/<slug>/.docs/instructions.mdexercises/concept/<slug>/.docs/introduction.mdexercises/concept/<slug>/.meta/config.jsonপ্র্যাকটিস অনুশীলনীর জন্যও অনুরূপ একটি তালিকা থাকবে, তবে তার স্পেক আমরা এখনো ঠিক করিনি।
config.json-এ তালিকাভুক্ত প্রতিটি কনসেপ্টের নিচের ফাইলগুলো থাকা উচিত:
concepts/<slug>/about.mdconcepts/<slug>/introduction.mdconcepts/<slug>/links.jsonconfig.json ফাইলের জন্য নিচের যাচাইগুলো থাকা উচিত:
"language" কী (key) আবশ্যক"language"-এর মান অবশ্যই একটি নন-ব্ল্যাংক স্ট্রিং¹ হতে হবে, যার দৈর্ঘ্য <= 255"slug" কী (key) আবশ্যক"slug"-এর মান অবশ্যই একটি কেবাব-কেস স্ট্রিং² হতে হবে, যার দৈর্ঘ্য <= 255"active" কী (key) আবশ্যক"active"-এর মান অবশ্যই একটি বুলিয়ান হতে হবে"blurb" কী (key) আবশ্যক"blurb"-এর মান অবশ্যই একটি নন-ব্ল্যাংক স্ট্রিং¹ হতে হবে, যার দৈর্ঘ্য <= 400"version" কী (key) আবশ্যক"version"-এর মান অবশ্যই ইন্টিজার 3 হতে হবে"status.concept_exercises" কী (key) আবশ্যক"status.concept_exercises"-এর মান অবশ্যই একটি বুলিয়ান হতে হবে"status.test_runner" কী (key) আবশ্যক"status.test_runner"-এর মান অবশ্যই একটি বুলিয়ান হতে হবে"status.representer" কী (key) আবশ্যক"status.representer"-এর মান অবশ্যই একটি বুলিয়ান হতে হবে"status.analyzer" কী (key) আবশ্যক"status.analyzer"-এর মান অবশ্যই একটি বুলিয়ান হতে হবে"online_editor.indent_style" কী (key) আবশ্যক"online_editor.indent_style"-এর মান অবশ্যই space বা tab স্ট্রিং হতে হবে"online_editor.indent_size" কী (key) আবশ্যক"online_editor.indent_size"-এর মান অবশ্যই একটি ইন্টিজার হতে হবে, যা >= 0 এবং <= 8"online_editor.highlightjs_language" কী (key) ঐচ্ছিক"online_editor.highlightjs_language"-এর মান অবশ্যই একটি নন-ব্ল্যাংক স্ট্রিং¹ হতে হবে"files" কী (key) ঐচ্ছিক"files"-এর মান অবশ্যই একটি অবজেক্ট হতে হবে"files.solution" কী (key) ঐচ্ছিক"files.solution"-এর মান অবশ্যই একটি অ্যারে হতে হবে"files.solution"-এর মানগুলো অবশ্যই বৈধ প্যাটার্ন⁵ হতে হবে"files.solution"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না"files.test" কী (key) ঐচ্ছিক"files.test"-এর মান অবশ্যই একটি অ্যারে হতে হবে"files.test"-এর মানগুলো অবশ্যই বৈধ প্যাটার্ন⁵ হতে হবে"files.test"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না"files.example" কী (key) ঐচ্ছিক"files.example"-এর মান অবশ্যই একটি অ্যারে হতে হবে"files.example"-এর মানগুলো অবশ্যই বৈধ প্যাটার্ন⁵ হতে হবে"files.example"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না"files.exemplar" কী (key) ঐচ্ছিক"files.exemplar"-এর মান অবশ্যই একটি অ্যারে হতে হবে"files.exemplar"-এর মানগুলো অবশ্যই বৈধ প্যাটার্ন⁵ হতে হবে"files.exemplar"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না"files.editor" কী (key) ঐচ্ছিক"files.editor"-এর মান অবশ্যই একটি অ্যারে হতে হবে"files.editor"-এর মানগুলো অবশ্যই বৈধ প্যাটার্ন⁵ হতে হবে"files.editor"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না"files.invalidator" কী (key) ঐচ্ছিক"files.invalidator"-এর মান অবশ্যই একটি অ্যারে হতে হবে"files.invalidator"-এর মানগুলো অবশ্যই বৈধ প্যাটার্ন⁵ হতে হবে"files.invalidator"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না"files.solution", "files.test", "files.example", "files.exemplar", "files.editor" বা "files.invalidator" অ্যারের একটিতে তালিকাভুক্ত করা যাবে (কোনো ওভারল্যাপ থাকা যাবে না)
d বা plsql হলে, "files.solution" ও "files.test" ফাইল ওভারল্যাপ করতে পারবে
"files.example ও "files.exemplar" ফাইল ওভারল্যাপ করতে পারবে
"test_runner.average_run_time" কী (key) আবশ্যক, যদি "status.test_runner"-এর মান true-এর সমান হয়"test_runner.average_run_time"-এর মান অবশ্যই একটি ইন্টিজার হতে হবে, যা > 0"approaches.snippet_extension" কী (key) আবশ্যক, যদি ট্র্যাকে এক বা একাধিক অ্যাপ্রোচ থাকে"approaches.snippet_extension"-এর মান অবশ্যই একটি নন-ব্ল্যাংক স্ট্রিং¹ হতে হবে"exercises" কী (key) আবশ্যক"exercises.concept" কী (key) আবশ্যক"exercises.concept"-এর মান অবশ্যই একটি অ্যারে হতে হবে"exercises.concept[].slug" কী (key) আবশ্যক"exercises.concept[].slug"-এর মান অবশ্যই একটি কেবাব-কেস স্ট্রিং² হতে হবে, যার দৈর্ঘ্য <= 255"exercises.concept[].slug"-এর মান অবশ্যই "exercises.concept[].slug"-এর মধ্যে অনন্য হতে হবে এবং "exercises.practice[].slug"-এ থাকতে পারবে না"exercises.concept[].name" কী (key) আবশ্যক"exercises.concept[].name"-এর মান অবশ্যই একটি টাইটেল কেস স্ট্রিং³ হতে হবে, যার দৈর্ঘ্য <= 255"exercises.concept[].uuid" কী (key) আবশ্যক"exercises.concept[].uuid"-এর মান অবশ্যই একটি অনন্য version 4 UUID স্ট্রিং⁶ হতে হবে"exercises.concept[].uuid"-এর মান কখনো পরিবর্তন হওয়া যাবে না"exercises.concept[].concepts" কী (key) আবশ্যক"exercises.concept[].concepts"-এর মান অবশ্যই স্ট্রিংয়ের একটি খালি নয় এমন অ্যারে হতে হবে, যদি "exercises.concept[].status"-এর মান deprecated-এর সমান না হয়"exercises.concept[].concepts"-এর মান অবশ্যই একটি খালি অ্যারে হতে হবে, যদি "exercises.concept[].status"-এর মান deprecated-এর সমান হয়"exercises.concept[].concepts"-এর মানগুলো অবশ্যই কেবাব-কেস স্ট্রিং² হতে হবে"exercises.concept[].concepts"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না"exercises.concept[].concepts"-এর মানগুলো অন্য কোনো কনসেপ্ট অনুশীলনীর "concepts" প্রোপার্টিতে থাকতে পারবে না"exercises.concept[].concepts"-এর মানগুলো অবশ্যই কোনো একটি কনসেপ্টের "concepts.slug" প্রোপার্টির সাথে মিলতে হবে"exercises.concept[].prerequisites" কী (key) আবশ্যক"exercises.concept[].prerequisites"-এর মান অবশ্যই স্ট্রিংয়ের একটি খালি নয় এমন অ্যারে হতে হবে, যদি "exercises.concept[].status"-এর মান deprecated-এর সমান না হয়; তবে ঠিক একটি অনুশীলনীর জন্য খালি অ্যারে মান হিসেবে থাকা অনুমোদিত
"exercises.concept[].prerequisites"-এর মান অবশ্যই একটি খালি অ্যারে হতে হবে, যদি "exercises.concept[].status"-এর মান deprecated-এর সমান হয়"exercises.concept[].prerequisites"-এর মানগুলো অবশ্যই কেবাব-কেস স্ট্রিং² হতে হবে"exercises.concept[].prerequisites"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না"exercises.concept[].prerequisites"-এর মানগুলো অবশ্যই অন্য যেকোনো কনসেপ্ট অনুশীলনীর "concepts" প্রোপার্টির মানের সাথে মিলতে হবে"exercises.concept[].prerequisites"-এর মানগুলো অনুশীলনীর "exercises.concept[].concepts" প্রোপার্টির কোনো মানের সাথে মিলতে পারবে না"exercises.concept[].prerequisites"-এর মানগুলো অবশ্যই কোনো একটি কনসেপ্টের "concepts.slug" প্রোপার্টির সাথে মিলতে হবে"exercises.concept[].concepts" ও "exercises.concept[].prerequisites"-এর মধ্যে কোনো চক্র থাকতে পারবে না"exercises.concept[].status" কী (key) ঐচ্ছিক"exercises.concept[].status"-এর মান অবশ্যই wip, beta, active বা deprecated স্ট্রিং হতে হবে"exercises.practice" কী (key) আবশ্যক"exercises.practice"-এর মান অবশ্যই একটি অ্যারে হতে হবে"exercises.practice[].slug" কী (key) আবশ্যক"exercises.practice[].slug"-এর মান অবশ্যই একটি কেবাব-কেস স্ট্রিং² হতে হবে, যার দৈর্ঘ্য <= 255"exercises.practice[].slug"-এর মান অবশ্যই "exercises.practice[].slug"-এর মধ্যে অনন্য হতে হবে এবং "exercises.concept[].slug"-এ থাকতে পারবে না"exercises.practice[].slug"-এর মান হিসেবে অবশ্যই ঠিক একটি মান থাকতে হবে, যা hello-world স্ট্রিং"exercises.practice[].name" কী (key) আবশ্যক"exercises.practice[].name"-এর মান অবশ্যই একটি টাইটেল কেস স্ট্রিং³ হতে হবে, যার দৈর্ঘ্য <= 255"exercises.practice[].uuid" কী (key) আবশ্যক"exercises.practice[].uuid"-এর মান অবশ্যই একটি অনন্য version 4 UUID স্ট্রিং⁶ হতে হবে"exercises.practice[].uuid"-এর মান কখনো পরিবর্তন হওয়া যাবে না"exercises.practice[].difficulty" কী (key) আবশ্যক"exercises.practice[].difficulty"-এর মান অবশ্যই একটি ইন্টিজার হতে হবে, যা >= 1 এবং <= 10"exercises.practice[].practices" কী (key) আবশ্যক"exercises.practice[].practices"-এর মান অবশ্যই স্ট্রিংয়ের একটি খালি নয় এমন অ্যারে হতে হবে, যদি "exercises.practice[].status"-এর মান deprecated-এর সমান না হয়"exercises.practice[].practices"-এর মান অবশ্যই একটি খালি অ্যারে হতে হবে, যদি "exercises.practice[].status"-এর মান deprecated-এর সমান হয়"exercises.practice[].practices"-এর মানগুলো অবশ্যই কেবাব-কেস স্ট্রিং² হতে হবে"exercises.practice[].practices"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না"exercises.practice[].practices"-এর মানগুলো অবশ্যই কোনো একটি কনসেপ্টের "concepts[].slug" প্রোপার্টির সাথে মিলতে হবে"exercises.practice[].practices"-এর মানগুলো (সব অনুশীলনী মিলিয়ে) একটি নির্দিষ্ট কনসেপ্টের স্লাগকে সর্বোচ্চ ১০ বার উল্লেখ করতে পারবে"exercises.practice[].prerequisites" কী (key) আবশ্যক"exercises.practice[].prerequisites"-এর মান অবশ্যই স্ট্রিংয়ের একটি খালি নয় এমন অ্যারে হতে হবে, যদি "exercises.practice[].status"-এর মান deprecated-এর সমান না হয়"exercises.practice[].prerequisites"-এর মান অবশ্যই একটি খালি অ্যারে হতে হবে, যদি "exercises.practice[].status"-এর মান deprecated-এর সমান হয়"exercises.practice[].prerequisites"-এর মান অবশ্যই একটি খালি অ্যারে হতে হবে, যদি "exercises.practice[].slug" hello-world-এর সমান হয়"exercises.practice[].prerequisites"-এর মানগুলো অবশ্যই কেবাব-কেস স্ট্রিং² হতে হবে"exercises.practice[].prerequisites"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না"exercises.practice[].prerequisites"-এর মানগুলো অবশ্যই যেকোনো কনসেপ্ট অনুশীলনীর "exercises.concept[].concepts" মানের সাথে মিলতে হবে"exercises.practice[].prerequisites"-এর মানগুলো অবশ্যই কোনো একটি কনসেপ্টের "concepts[].slug" প্রোপার্টির সাথে মিলতে হবে"exercises.practice[].status" কী (key) ঐচ্ছিক"exercises.practice[].status"-এর মান অবশ্যই wip, beta, active বা deprecated স্ট্রিং হতে হবে"exercises.practice[].status"-এর মান, যদি "exercises.practice[].slug" hello-world-এর সমান হয়, তবে হয় বাদ দিতে হবে, নয়তো active স্ট্রিং হতে হবে"exercises.foregone" কী (key) ঐচ্ছিক"exercises.foregone"-এর মান অবশ্যই একটি অ্যারে হতে হবে"exercises.foregone"-এর মানগুলো অবশ্যই কেবাব-কেস স্ট্রিং² হতে হবে"exercises.foregone"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না"exercises.foregone"-এর মানগুলো কোনো কনসেপ্ট বা প্র্যাকটিস অনুশীলনীর স্লাগের সাথে মিলতে পারবে না"concepts" কী (key) আবশ্যক"concepts"-এর মান অবশ্যই একটি অ্যারে হতে হবে"concepts[].uuid" কী (key) আবশ্যক"concepts[].uuid"-এর মান অবশ্যই একটি অনন্য version 4 UUID স্ট্রিং⁶ হতে হবে"concepts[].uuid"-এর মান কখনো পরিবর্তন হওয়া যাবে না"concepts[].slug" কী (key) আবশ্যক"concepts[].slug"-এর মান অবশ্যই একটি কেবাব-কেস স্ট্রিং² হতে হবে, যার দৈর্ঘ্য <= 255"concepts[].name" কী (key) আবশ্যক"concepts[].name"-এর মান অবশ্যই একটি টাইটেল কেস স্ট্রিং³ হতে হবে, যার দৈর্ঘ্য <= 255"concepts[].tags" কী (key) ঐচ্ছিক"concepts[].tags.all" কী (key) ঐচ্ছিক, যদি না "concepts[].tags.any" খালি থাকে"concepts[].tags.all"-এর মান অবশ্যই একটি অ্যারে হতে হবে"concepts[].tags.all"-এর মানগুলো অবশ্যই নন-ব্ল্যাংক ট্যাগ⁷ স্ট্রিং হতে হবে, যার দৈর্ঘ্য <= 255"concepts[].tags.all"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না"concepts[].tags.any" কী (key) ঐচ্ছিক, যদি না "concepts[].tags.all" খালি থাকে"concepts[].tags.any"-এর মান অবশ্যই একটি অ্যারে হতে হবে"concepts[].tags.any"-এর মানগুলো অবশ্যই নন-ব্ল্যাংক ট্যাগ⁷ স্ট্রিং হতে হবে, যার দৈর্ঘ্য <= 255"concepts[].tags.any"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না"concepts[].tags.not" কী (key) ঐচ্ছিক"concepts[].tags.not"-এর মান অবশ্যই একটি অ্যারে হতে হবে"concepts[].tags.not"-এর মানগুলো অবশ্যই নন-ব্ল্যাংক ট্যাগ⁷ স্ট্রিং হতে হবে, যার দৈর্ঘ্য <= 255"concepts[].tags.not"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না"concepts" মানের জন্য একটি concept/<concepts.slug>/about.md ফাইল থাকতে হবে। এই ফাইলের লিন্টিং নিয়ম নিচে দেওয়া হলো।"concepts" মানের জন্য একটি concept/<concepts.slug>/introduction.md ফাইল থাকতে হবে। এই ফাইলের লিন্টিং নিয়ম নিচে দেওয়া হলো।"concepts" মানের জন্য একটি concept/<concepts.slug>/links.json ফাইল থাকতে হবে। এই ফাইলের লিন্টিং নিয়ম নিচে দেওয়া হলো।"key_features" কী (key) ঐচ্ছিক"key_features"-এর মান অবশ্যই দৈর্ঘ্য = 6 সহ একটি অ্যারে হতে হবে"key_features[].icon" কী (key) আবশ্যক"key_features[].icon"-এর মান অবশ্যই পূর্বনির্ধারিত আইকন মানগুলোর একটি ব্যবহার করতে হবে"key_features[].title" কী (key) আবশ্যক"key_features[].title"-এর মান অবশ্যই একটি সেন্টেন্স কেস স্ট্রিং⁴ হতে হবে, যার দৈর্ঘ্য <= 25"key_features[].content" কী (key) আবশ্যক"key_features[].content"-এর মান অবশ্যই একটি নন-ব্ল্যাংক স্ট্রিং¹ হতে হবে, যার দৈর্ঘ্য <= 100"tags" কী (key) আবশ্যক"tags"-এর মান অবশ্যই স্ট্রিংয়ের একটি অ্যারে হতে হবে"tags"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না"tags"-এর মানগুলো অবশ্যই পূর্বনির্ধারিত ট্যাগ মানগুলোর একটি ব্যবহার করতে হবে"blurb" কী (key) আবশ্যক"blurb"-এর মান অবশ্যই একটি নন-ব্ল্যাংক স্ট্রিং¹ হতে হবে, যার দৈর্ঘ্য <= 350"source" কী (key) ঐচ্ছিক"source"-এর মান অবশ্যই একটি নন-ব্ল্যাংক স্ট্রিং¹ হতে হবে"source_url" কী (key) ঐচ্ছিক"source_url"-এর মান অবশ্যই একটি URL হতে হবে"authors" কী (key) আবশ্যক"authors"-এর মান অবশ্যই একটি খালি নয় এমন অ্যারে হতে হবে"authors"-এর মানগুলো অবশ্যই নন-ব্ল্যাংক স্ট্রিং¹ হতে হবে"authors"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না"authors"-এর মানগুলো কেস-নিরপেক্ষভাবে বিবেচনা করা হয়"contributors" কী (key) ঐচ্ছিক"contributors"-এর মান অবশ্যই একটি অ্যারে হতে হবে"contributors"-এর মানগুলো অবশ্যই নন-ব্ল্যাংক স্ট্রিং¹ হতে হবে"contributors"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না"contributors"-এর মানগুলো কেস-নিরপেক্ষভাবে বিবেচনা করা হয়"authors" বা "contributors" অ্যারের একটিতে তালিকাভুক্ত করা যাবে (কোনো ওভারল্যাপ থাকা যাবে না)"files.solution" কী (key) আবশ্যক"files.solution"-এর মান অবশ্যই একটি খালি নয় এমন অ্যারে হতে হবে"files.solution"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না"files.test" কী (key) আবশ্যক"files.test"-এর মান অবশ্যই একটি খালি নয় এমন অ্যারে হতে হবে"files.test"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না"files.exemplar" কী (key) আবশ্যক"files.exemplar"-এর মান অবশ্যই একটি খালি নয় এমন অ্যারে হতে হবে"files.exemplar"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না"files.editor" কী (key) ঐচ্ছিক"files.editor"-এর মান অবশ্যই একটি অ্যারে হতে হবে"files.editor"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না"files.invalidator" কী (key) ঐচ্ছিক"files.invalidator"-এর মান অবশ্যই একটি অ্যারে হতে হবে"files.invalidator"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না"files.solution"-এ তালিকাভুক্ত ফাইলগুলো অবশ্যই বিদ্যমান থাকতে হবে"files.test"-এ তালিকাভুক্ত ফাইলগুলো অবশ্যই বিদ্যমান থাকতে হবে"files.exemplar"-এ তালিকাভুক্ত ফাইলগুলো অবশ্যই বিদ্যমান থাকতে হবে"files.editor"-এ তালিকাভুক্ত ফাইলগুলো অবশ্যই বিদ্যমান থাকতে হবে"files.invalidator"-এ তালিকাভুক্ত ফাইলগুলো অবশ্যই বিদ্যমান থাকতে হবে"files.solution", "files.test", "files.exemplar" বা "files.invalidator" অ্যারের একটিতে তালিকাভুক্ত করা যাবে (কোনো ওভারল্যাপ থাকা যাবে না)
d বা plsql হলে, "files.solution" ও "files.test" ফাইল ওভারল্যাপ করতে পারবে
"forked_from" কী (key) ঐচ্ছিক"forked_from"-এর মান অবশ্যই একটি অ্যারে হতে হবে"forked_from"-এর মানগুলো অবশ্যই <track-slug>/<exercise-slug> ফরম্যাটে থাকা স্ট্রিং হতে হবে (যেমন fsharp/bird-watcher)"forked_from"-এর মানগুলো অবশ্যই প্রকৃতপক্ষে বাস্তবায়িত অনুশীলনীকে নির্দেশ করতে হবে"forked_from"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না"language_versions" কী (key) ঐচ্ছিক"language_versions"-এর মান অবশ্যই একটি স্ট্রিং হতে হবে"representer.version" কী (key) ঐচ্ছিক"representer.version"-এর মান অবশ্যই একটি ইন্টিজার হতে হবে, যা >= 1"icon" কী (key) ঐচ্ছিক"icon"-এর মান অবশ্যই একটি কেবাব-কেস স্ট্রিং² হতে হবে## General অথবা ## X. <task> হতে হবে, যেখানে X instructions.md-এর টাস্ক নম্বর শিরোনামের সাথে মেলে## 1. Do X
config.json-এর কোনো একটি কনসেপ্টের "concepts.slug" প্রোপার্টির সাথে মিলতে হবে।"blurb" কী (key) আবশ্যক"blurb"-এর মান অবশ্যই একটি নন-ব্ল্যাংক স্ট্রিং¹ হতে হবে, যার দৈর্ঘ্য <= 350"source" কী (key) ঐচ্ছিক"source"-এর মান অবশ্যই একটি নন-ব্ল্যাংক স্ট্রিং¹ হতে হবে"source_url" কী (key) ঐচ্ছিক"source_url"-এর মান অবশ্যই একটি URL হতে হবে"authors" কী (key) ঐচ্ছিক"authors"-এর মান অবশ্যই একটি অ্যারে হতে হবে"authors"-এর মানগুলো অবশ্যই নন-ব্ল্যাংক স্ট্রিং¹ হতে হবে"authors"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না"authors"-এর মানগুলো কেস-নিরপেক্ষভাবে বিবেচনা করা হয়"contributors" কী (key) ঐচ্ছিক"contributors"-এর মান অবশ্যই একটি অ্যারে হতে হবে"contributors"-এর মানগুলো অবশ্যই নন-ব্ল্যাংক স্ট্রিং¹ হতে হবে"contributors"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না"contributors"-এর মানগুলো কেস-নিরপেক্ষভাবে বিবেচনা করা হয়"authors" বা "contributors" অ্যারের একটিতে তালিকাভুক্ত করা যাবে (কোনো ওভারল্যাপ থাকা যাবে না)"files.solution" কী (key) আবশ্যক"files.solution"-এর মান অবশ্যই একটি খালি নয় এমন অ্যারে হতে হবে"files.solution"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না"files.test" কী (key) আবশ্যক"files.test"-এর মান অবশ্যই একটি খালি নয় এমন অ্যারে হতে হবে"files.test"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না"files.example" কী (key) আবশ্যক"files.example"-এর মান অবশ্যই একটি খালি নয় এমন অ্যারে হতে হবে"files.example"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না"files.editor" কী (key) ঐচ্ছিক"files.editor"-এর মান অবশ্যই একটি অ্যারে হতে হবে"files.editor"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না"files.invalidator" কী (key) ঐচ্ছিক"files.invalidator"-এর মান অবশ্যই একটি অ্যারে হতে হবে"files.invalidator"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না"files.solution"-এ তালিকাভুক্ত ফাইলগুলো অবশ্যই বিদ্যমান থাকতে হবে"files.test"-এ তালিকাভুক্ত ফাইলগুলো অবশ্যই বিদ্যমান থাকতে হবে"files.example"-এ তালিকাভুক্ত ফাইলগুলো অবশ্যই বিদ্যমান থাকতে হবে"files.editor"-এ তালিকাভুক্ত ফাইলগুলো অবশ্যই বিদ্যমান থাকতে হবে"files.invalidator"-এ তালিকাভুক্ত ফাইলগুলো অবশ্যই বিদ্যমান থাকতে হবে"files.solution", "files.test", "files.example বা "files.invalidator" অ্যারের একটিতে তালিকাভুক্ত করা যাবে (কোনো ওভারল্যাপ থাকা যাবে না)
d বা plsql হলে, "files.solution" ও "files.test" ফাইল ওভারল্যাপ করতে পারবে
"language_versions" কী (key) ঐচ্ছিক"language_versions"-এর মান অবশ্যই একটি স্ট্রিং হতে হবে"test_runner" কী (key) ঐচ্ছিক"test_runner"-এর মান অবশ্যই একটি বুলিয়ান হতে হবে"representer.version" কী (key) ঐচ্ছিক"representer.version"-এর মান অবশ্যই একটি ইন্টিজার হতে হবে, যা >= 1"icon" কী (key) ঐচ্ছিক"icon"-এর মান অবশ্যই একটি কেবাব-কেস স্ট্রিং² হতে হবেintroduction.md বা একটি সহোদর ডিরেক্টরি থাকে"introduction.authors" কী (key) ঐচ্ছিক"introduction.authors"-এর মান অবশ্যই একটি অ্যারে হতে হবে"introduction.authors"-এর মানগুলো অবশ্যই নন-ব্ল্যাংক স্ট্রিং¹ হতে হবে"introduction.authors"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না"introduction.authors"-এর মানগুলো কেস-নিরপেক্ষভাবে বিবেচনা করা হয়"introduction.authors" অ্যারে খালি না হলে, একটি খালি নয় এমন introduction.md ফাইল থাকতে হবে"introduction.contributors" কী (key) ঐচ্ছিক"introduction.contributors"-এর মান অবশ্যই একটি অ্যারে হতে হবে"introduction.contributors"-এর মানগুলো অবশ্যই নন-ব্ল্যাংক স্ট্রিং¹ হতে হবে"introduction.contributors"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না"introduction.contributors"-এর মানগুলো কেস-নিরপেক্ষভাবে বিবেচনা করা হয়"introduction.contributors" অ্যারে খালি না হলে, একটি খালি নয় এমন introduction.md ফাইল থাকতে হবে"introduction.authors" বা "introduction.contributors" অ্যারের একটিতে তালিকাভুক্ত করা যাবে (কোনো ওভারল্যাপ থাকা যাবে না)"approaches" কী (key) ঐচ্ছিক, যদি না একটি সহোদর ডিরেক্টরি উপস্থিত থাকে (যেটিতে অ্যাপ্রোচের ফাইলগুলো থাকে)"approaches"-এর মান অবশ্যই অবজেক্টের একটি অ্যারে হতে হবে"approaches[].uuid" কী (key) আবশ্যক"approaches[].uuid"-এর মান অবশ্যই একটি অনন্য version 4 UUID স্ট্রিং⁶ হতে হবে"approaches[].uuid"-এর মান কখনো পরিবর্তন হওয়া যাবে না"approaches[].slug" কী (key) আবশ্যক"approaches[].slug"-এর মান অবশ্যই একটি কেবাব-কেস স্ট্রিং² হতে হবে, যার দৈর্ঘ্য <= 255"approaches[].slug"-এর মানের জন্য একটি সামঞ্জস্যপূর্ণ খালি নয় এমন <slug>/content.md ফাইল থাকতে হবে"approaches[].slug"-এর মানের জন্য একটি সামঞ্জস্যপূর্ণ খালি নয় এমন <slug>/snippet.txt ফাইল থাকতে হবে"approaches[].title" কী (key) আবশ্যক"approaches[].title"-এর মান অবশ্যই একটি টাইটেল কেস স্ট্রিং³ হতে হবে, যার দৈর্ঘ্য <= 255"approaches[].blurb" কী (key) আবশ্যক"approaches[].blurb"-এর মান অবশ্যই একটি নন-ব্ল্যাংক স্ট্রিং¹ হতে হবে, যার দৈর্ঘ্য <= 350"approaches[].authors" কী (key) আবশ্যক"approaches[].authors"-এর মান অবশ্যই একটি খালি নয় এমন অ্যারে হতে হবে"approaches[].authors"-এর মানগুলো অবশ্যই নন-ব্ল্যাংক স্ট্রিং¹ হতে হবে"approaches[].authors"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না"approaches[].authors"-এর মানগুলো কেস-নিরপেক্ষভাবে বিবেচনা করা হয়"approaches[].contributors" কী (key) ঐচ্ছিক"approaches[].contributors"-এর মান অবশ্যই একটি অ্যারে হতে হবে"approaches[].contributors"-এর মানগুলো অবশ্যই নন-ব্ল্যাংক স্ট্রিং¹ হতে হবে"approaches[].contributors"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না"approaches[].contributors"-এর মানগুলো কেস-নিরপেক্ষভাবে বিবেচনা করা হয়"approaches[].authors" বা "approaches[].contributors" অ্যারের একটিতে তালিকাভুক্ত করা যাবে (কোনো ওভারল্যাপ থাকা যাবে না)"approaches[].tags" কী (key) ঐচ্ছিক"approaches[].tags.all" কী (key) ঐচ্ছিক, যদি না "approaches[].tags.any" খালি থাকে"approaches[].tags.all"-এর মান অবশ্যই একটি অ্যারে হতে হবে"approaches[].tags.all"-এর মানগুলো অবশ্যই নন-ব্ল্যাংক ট্যাগ⁷ স্ট্রিং হতে হবে, যার দৈর্ঘ্য <= 255"approaches[].tags.all"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না"approaches[].tags.any" কী (key) ঐচ্ছিক, যদি না "approaches[].tags.all" খালি থাকে"approaches[].tags.any"-এর মান অবশ্যই একটি অ্যারে হতে হবে"approaches[].tags.any"-এর মানগুলো অবশ্যই নন-ব্ল্যাংক ট্যাগ⁷ স্ট্রিং হতে হবে, যার দৈর্ঘ্য <= 255"approaches[].tags.any"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না"approaches[].tags.not" কী (key) ঐচ্ছিক"approaches[].tags.not"-এর মান অবশ্যই একটি অ্যারে হতে হবে"approaches[].tags.not"-এর মানগুলো অবশ্যই নন-ব্ল্যাংক ট্যাগ⁷ স্ট্রিং হতে হবে, যার দৈর্ঘ্য <= 255"approaches[].tags.not"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না.approaches/config.json ফাইলে সামঞ্জস্যপূর্ণ একটি "approaches[].slug" এন্ট্রি থাকলে ফাইলটির উপস্থিতি আবশ্যক.approaches/config.json ফাইলে সামঞ্জস্যপূর্ণ একটি "approaches[].slug" এন্ট্রি থাকলে ফাইলটির উপস্থিতি আবশ্যকconfig.json ফাইলের approaches.snippet_extension মান থেকে নেওয়া হয়"articles" কী (key) ঐচ্ছিক, যদি না একটি সহোদর ডিরেক্টরি উপস্থিত থাকে (যেটিতে আর্টিকেলের ফাইলগুলো থাকে)"articles"-এর মান অবশ্যই অবজেক্টের একটি অ্যারে হতে হবে"articles[].uuid" কী (key) আবশ্যক"articles[].uuid"-এর মান অবশ্যই একটি অনন্য version 4 UUID স্ট্রিং⁶ হতে হবে"articles[].uuid"-এর মান কখনো পরিবর্তন হওয়া যাবে না"articles[].slug" কী (key) আবশ্যক"articles[].slug"-এর মান অবশ্যই একটি কেবাব-কেস স্ট্রিং² হতে হবে, যার দৈর্ঘ্য <= 255"articles[].slug"-এর মানের জন্য একটি সামঞ্জস্যপূর্ণ খালি নয় এমন <slug>/content.md ফাইল থাকতে হবে"articles[].slug"-এর মানের জন্য একটি সামঞ্জস্যপূর্ণ খালি নয় এমন <slug>/snippet.md ফাইল থাকতে হবে"articles[].title" কী (key) আবশ্যক"articles[].title"-এর মান অবশ্যই একটি টাইটেল কেস স্ট্রিং³ হতে হবে, যার দৈর্ঘ্য <= 255"articles[].blurb" কী (key) আবশ্যক"articles[].blurb"-এর মান অবশ্যই একটি নন-ব্ল্যাংক স্ট্রিং¹ হতে হবে, যার দৈর্ঘ্য <= 350"articles[].authors" কী (key) আবশ্যক"articles[].authors"-এর মান অবশ্যই একটি খালি নয় এমন অ্যারে হতে হবে"articles[].authors"-এর মানগুলো অবশ্যই নন-ব্ল্যাংক স্ট্রিং¹ হতে হবে"articles[].authors"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না"articles[].authors"-এর মানগুলো কেস-নিরপেক্ষভাবে বিবেচনা করা হয়"articles[].contributors" কী (key) ঐচ্ছিক"articles[].contributors"-এর মান অবশ্যই একটি অ্যারে হতে হবে"articles[].contributors"-এর মানগুলো অবশ্যই নন-ব্ল্যাংক স্ট্রিং¹ হতে হবে"articles[].contributors"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না"articles[].contributors"-এর মানগুলো কেস-নিরপেক্ষভাবে বিবেচনা করা হয়"articles[].authors" বা "articles[].contributors" অ্যারের একটিতে তালিকাভুক্ত করা যাবে (কোনো ওভারল্যাপ থাকা যাবে না).articles/config.json ফাইলে সামঞ্জস্যপূর্ণ একটি "articles[].slug" এন্ট্রি থাকলে ফাইলটির উপস্থিতি আবশ্যক.articles/config.json ফাইলে সামঞ্জস্যপূর্ণ একটি "articles[].slug" এন্ট্রি থাকলে ফাইলটির উপস্থিতি আবশ্যক"[].url" প্রোপার্টি আবশ্যক"[].url"-এর মান অবশ্যই একটি URL হতে হবে"[].description" প্রোপার্টি আবশ্যক"[].description"-এর মান অবশ্যই একটি নন-ব্ল্যাংক স্ট্রিং¹ হতে হবে"[].icon_url" প্রোপার্টি ঐচ্ছিক"[].icon_url"-এর মান অবশ্যই একটি URL হতে হবে"blurb" কী (key) আবশ্যক"blurb"-এর মান অবশ্যই একটি নন-ব্ল্যাংক স্ট্রিং¹ হতে হবে, যার দৈর্ঘ্য <= 350"authors" কী (key) আবশ্যক"authors"-এর মান অবশ্যই একটি অ্যারে হতে হবে"authors"-এর মানগুলো অবশ্যই নন-ব্ল্যাংক স্ট্রিং¹ হতে হবে"authors"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না"authors"-এর মানগুলো কেস-নিরপেক্ষভাবে বিবেচনা করা হয়"contributors" কী (key) ঐচ্ছিক"contributors"-এর মান অবশ্যই একটি অ্যারে হতে হবে"contributors"-এর মানগুলো অবশ্যই নন-ব্ল্যাংক স্ট্রিং¹ হতে হবে"contributors"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না"contributors"-এর মানগুলো কেস-নিরপেক্ষভাবে বিবেচনা করা হয়"authors" বা "contributors" অ্যারের একটিতে তালিকাভুক্ত করা যাবে (কোনো ওভারল্যাপ থাকা যাবে না)নন-ব্ল্যাংক স্ট্রিং: এমন একটি স্ট্রিং, যাতে অন্তত একটি নন-হোয়াইটস্পেস ক্যারেক্টার আছে।
কেবাব-কেস স্ট্রিং: এমন একটি স্ট্রিং, যাতে কেবল [a-z0-9] রেঞ্জের ক্যারেক্টার থাকে, যা ঐচ্ছিকভাবে ড্যাশ দিয়ে আলাদা করা থাকে (যেমন "two-fer")। এটি অবশ্যই নিচের রেগুলার এক্সপ্রেশনের সাথে মিলতে হবে: ^[a-z0-9]+(-[a-z0-9]+)*$
টাইটেল কেস স্ট্রিং: একটি নন-ব্ল্যাংক স্ট্রিং, যা Chicago Manual of Style-এর নিচের নির্দেশিকা মেনে চলে:
সেন্টেন্স কেস স্ট্রিং: একটি নন-ব্ল্যাংক স্ট্রিং, যা নিচের নির্দেশিকা মেনে চলে:
বৈধ files প্যাটার্ন: একটি নন-ব্ল্যাংক স্ট্রিং¹, যা অনুশীলনীর ডিরেক্টরির সাপেক্ষে অনুশীলনীতে ব্যবহৃত একটি ফাইলের অবস্থান নির্দেশ করে। একটি প্যাটার্নে নিচের প্লেসহোল্ডারগুলোর একটি ব্যবহার করা যেতে পারে:
%{kebab_slug}: kebab-case অনুশীলনীর স্লাগ (যেমন bit-manipulation)%{snake_slug}: snake_case অনুশীলনীর স্লাগ (যেমন bit_manipulation)%{camel_slug}: camelCase অনুশীলনীর স্লাগ (যেমন bitManipulation)%{pascal_slug}: PascalCase অনুশীলনীর স্লাগ (যেমন BitManipulation)অনন্য version 4 UUID স্ট্রিং: এমন একটি স্ট্রিং, যা নিচের সব শর্ত পূরণ করে:
config.json ফাইলে কেবল একবারই থাকেconfig.json ফাইলে এটি থাকে নাcanonical-data.json ফাইলে এটি থাকে না^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
উদাহরণস্বরূপ, নিচের UUID-টির সঠিক রূপ রয়েছে:
d334ffe3-657e-4725-a950-290b284b6d9f
যথাযথ একটি UUID তৈরি করতে আপনি configlet uuid চালাতে পারেন।
বৈধ অ্যানালাইজার tag: একটি নন-ব্ল্যাংক স্ট্রিং¹, যা <category>:<thing> আকারে থাকে। <category>-এর মান অবশ্যই নিচের একটি হতে হবে:
paradigm (যেমন paradigm:functional)technique (যেমন technique:recursion)construct (যেমন construct:bitwise-and)uses (যেমন uses:DateTime.add_seconds)<thing>-এর মান অবশ্যই একটি নন-ব্ল্যাংক স্ট্রিং¹ হতে হবে।