configlet lint


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.json
  • docs/ABOUT.md
  • docs/INSTALLATION.md
  • docs/LEARNING.md
  • docs/RESOURCES.md
  • docs/SNIPPET.txt
  • docs/TESTS.md
  • exercises/shared/.docs/help.md
  • exercises/shared/.docs/tests.md

কনসেপ্ট অনুশীলনী-নির্দিষ্ট যে ফাইলগুলো অবশ্যই থাকতে হবে সেগুলো হলো:

  • exercises/concept/<slug>/.docs/hints.md
  • exercises/concept/<slug>/.docs/instructions.md
  • exercises/concept/<slug>/.docs/introduction.md
  • exercises/concept/<slug>/.meta/config.json

প্র্যাকটিস অনুশীলনীর জন্যও অনুরূপ একটি তালিকা থাকবে, তবে তার স্পেক আমরা এখনো ঠিক করিনি।

config.json-এ তালিকাভুক্ত প্রতিটি কনসেপ্টের নিচের ফাইলগুলো থাকা উচিত:

  • concepts/<slug>/about.md
  • concepts/<slug>/introduction.md
  • concepts/<slug>/links.json

নিয়ম: config.json ফাইল বৈধ

config.json ফাইলের জন্য নিচের যাচাইগুলো থাকা উচিত:

  • ফাইলটি অবশ্যই বৈধ 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"-এর মানগুলো অবশ্যই পূর্বনির্ধারিত ট্যাগ মানগুলোর একটি ব্যবহার করতে হবে

নিয়ম: exercises/concept/<slug>/.meta/config.json বৈধ

  • ফাইলটি অবশ্যই বৈধ JSON হতে হবে
  • JSON রুট অবশ্যই একটি অবজেক্ট হতে হবে
  • "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"-এর মান অবশ্যই একটি কেবাব-কেস স্ট্রিং² হতে হবে

নিয়ম: exercises/concept/<slug>/.docs/hints.md বৈধ

  • Markdown অবশ্যই Markdown মানদণ্ড মেনে চলতে হবে
  • সব শিরোনাম হয় ## General অথবা ## X. <task> হতে হবে, যেখানে X instructions.md-এর টাস্ক নম্বর শিরোনামের সাথে মেলে
  • সব হিন্ট অবশ্যই Markdown লিস্ট আইটেম হিসেবে উল্লেখ করতে হবে
  • লিংক অবশ্যই অ্যাবসোলিউট হতে হবে (রিলেটিভ লিংক অনুমোদিত নয়)

নিয়ম: exercises/concept/<slug>/.docs/instructions.md বৈধ

  • Markdown অবশ্যই Markdown মানদণ্ড মেনে চলতে হবে
  • সব টাস্ক অবশ্যই দ্বিতীয় স্তরের একটি শিরোনাম দিয়ে শুরু হতে হবে, যা একটি সংখ্যা ও তারপর একটি বিন্দু দিয়ে শুরু হয়: ## 1. Do X
  • লিংক অবশ্যই অ্যাবসোলিউট হতে হবে (রিলেটিভ লিংক অনুমোদিত নয়)

নিয়ম: exercises/concept/<slug>/.docs/instructions.md.tpl বৈধ (যদি থাকে)

  • প্রতিটি কনসেপ্ট প্লেসহোল্ডার-এর কনসেপ্ট অবশ্যই ট্র্যাকের config.json-এর কোনো একটি কনসেপ্টের "concepts.slug" প্রোপার্টির সাথে মিলতে হবে।

নিয়ম: exercises/concept/<slug>/.docs/introduction.md বৈধ

  • Markdown অবশ্যই Markdown মানদণ্ড মেনে চলতে হবে
  • লিংক অবশ্যই অ্যাবসোলিউট হতে হবে (রিলেটিভ লিংক অনুমোদিত নয়)

নিয়ম: exercises/practice/<slug>/.meta/config.json বৈধ

  • ফাইলটি অবশ্যই বৈধ JSON হতে হবে
  • JSON রুট অবশ্যই একটি অবজেক্ট হতে হবে
  • "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"-এর মান অবশ্যই একটি কেবাব-কেস স্ট্রিং² হতে হবে

নিয়ম: exercises/{concept|practice}/<slug>/.approaches/config.json বৈধ

  • ফাইলের উপস্থিতি ঐচ্ছিক, যদি না একটি introduction.md বা একটি সহোদর ডিরেক্টরি থাকে
  • ফাইলটি অবশ্যই বৈধ JSON হতে হবে
  • JSON রুট অবশ্যই একটি অবজেক্ট হতে হবে
  • "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"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না

নিয়ম: exercises/{concept|practice}/<slug>/.approaches/<approach-slug>/content.md বৈধ

  • .approaches/config.json ফাইলে সামঞ্জস্যপূর্ণ একটি "approaches[].slug" এন্ট্রি থাকলে ফাইলটির উপস্থিতি আবশ্যক
  • Markdown অবশ্যই Markdown মানদণ্ড মেনে চলতে হবে
  • লিংক অবশ্যই অ্যাবসোলিউট হতে হবে (রিলেটিভ লিংক অনুমোদিত নয়)

নিয়ম: exercises/{concept|practice}/<slug>/.approaches/<approach-slug>/snippet.<snippet-extension> বৈধ

  • .approaches/config.json ফাইলে সামঞ্জস্যপূর্ণ একটি "approaches[].slug" এন্ট্রি থাকলে ফাইলটির উপস্থিতি আবশ্যক
  • স্নিপেটে সর্বোচ্চ ৮ লাইন থাকতে হবে
  • স্নিপেট এক্সটেনশন ট্র্যাকের config.json ফাইলের approaches.snippet_extension মান থেকে নেওয়া হয়

নিয়ম: exercises/{concept|practice}/<slug>/.articles/config.json বৈধ

  • ফাইলের উপস্থিতি ঐচ্ছিক, যদি না একটি সহোদর ডিরেক্টরি থাকে
  • ফাইলটি অবশ্যই বৈধ JSON হতে হবে
  • JSON রুট অবশ্যই একটি অবজেক্ট হতে হবে
  • "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" অ্যারের একটিতে তালিকাভুক্ত করা যাবে (কোনো ওভারল্যাপ থাকা যাবে না)

নিয়ম: exercises/{concept|practice}/<slug>/.articles/<article-slug>/content.md বৈধ

  • .articles/config.json ফাইলে সামঞ্জস্যপূর্ণ একটি "articles[].slug" এন্ট্রি থাকলে ফাইলটির উপস্থিতি আবশ্যক
  • Markdown অবশ্যই Markdown মানদণ্ড মেনে চলতে হবে
  • লিংক অবশ্যই অ্যাবসোলিউট হতে হবে (রিলেটিভ লিংক অনুমোদিত নয়)

নিয়ম: exercises/{concept|practice}/<slug>/.articles/<article-slug>/snippet.md বৈধ

  • .articles/config.json ফাইলে সামঞ্জস্যপূর্ণ একটি "articles[].slug" এন্ট্রি থাকলে ফাইলটির উপস্থিতি আবশ্যক
  • Markdown অবশ্যই Markdown মানদণ্ড মেনে চলতে হবে
  • স্নিপেটে সর্বোচ্চ ৮ লাইন থাকতে হবে (শুরু ও শেষের কোড ফেন্স চিহ্ন উপেক্ষা করা হয়)

নিয়ম: exercises/shared/.docs/debug.md বৈধ

  • ফাইলের উপস্থিতি ঐচ্ছিক
  • Markdown অবশ্যই Markdown মানদণ্ড মেনে চলতে হবে
  • লিংক অবশ্যই অ্যাবসোলিউট হতে হবে (রিলেটিভ লিংক অনুমোদিত নয়)

নিয়ম: exercises/shared/.docs/help.md বৈধ

  • ফাইলের উপস্থিতি আবশ্যক
  • Markdown অবশ্যই Markdown মানদণ্ড মেনে চলতে হবে
  • লিংক অবশ্যই অ্যাবসোলিউট হতে হবে (রিলেটিভ লিংক অনুমোদিত নয়)

নিয়ম: exercises/shared/.docs/tests.md বৈধ

  • ফাইলের উপস্থিতি আবশ্যক
  • Markdown অবশ্যই Markdown মানদণ্ড মেনে চলতে হবে
  • লিংক অবশ্যই অ্যাবসোলিউট হতে হবে (রিলেটিভ লিংক অনুমোদিত নয়)

নিয়ম: concepts/<slug>/about.md বৈধ

  • Markdown অবশ্যই Markdown মানদণ্ড মেনে চলতে হবে
  • লিংক অবশ্যই অ্যাবসোলিউট হতে হবে (রিলেটিভ লিংক অনুমোদিত নয়)

নিয়ম: concepts/<slug>/introduction.md বৈধ

  • Markdown অবশ্যই Markdown মানদণ্ড মেনে চলতে হবে
  • লিংক অবশ্যই অ্যাবসোলিউট হতে হবে (রিলেটিভ লিংক অনুমোদিত নয়)
  • ফাইলটি অবশ্যই বৈধ JSON হতে হবে
  • JSON রুট অবশ্যই একটি অ্যারে হতে হবে
  • "[].url" প্রোপার্টি আবশ্যক
  • "[].url"-এর মান অবশ্যই একটি URL হতে হবে
  • "[].description" প্রোপার্টি আবশ্যক
  • "[].description"-এর মান অবশ্যই একটি নন-ব্ল্যাংক স্ট্রিং¹ হতে হবে
  • "[].icon_url" প্রোপার্টি ঐচ্ছিক
  • "[].icon_url"-এর মান অবশ্যই একটি URL হতে হবে

নিয়ম: concept/<slug>/.meta/config.json বৈধ

  • ফাইলটি অবশ্যই বৈধ JSON হতে হবে
  • JSON রুট অবশ্যই একটি অবজেক্ট হতে হবে
  • "blurb" কী (key) আবশ্যক
  • "blurb"-এর মান অবশ্যই একটি নন-ব্ল্যাংক স্ট্রিং¹ হতে হবে, যার দৈর্ঘ্য <= 350
  • "authors" কী (key) আবশ্যক
  • "authors"-এর মান অবশ্যই একটি অ্যারে হতে হবে
  • "authors"-এর মানগুলো অবশ্যই নন-ব্ল্যাংক স্ট্রিং¹ হতে হবে
  • "authors"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না
  • "authors"-এর মানগুলো কেস-নিরপেক্ষভাবে বিবেচনা করা হয়
  • "contributors" কী (key) ঐচ্ছিক
  • "contributors"-এর মান অবশ্যই একটি অ্যারে হতে হবে
  • "contributors"-এর মানগুলো অবশ্যই নন-ব্ল্যাংক স্ট্রিং¹ হতে হবে
  • "contributors"-এর মানগুলোতে ডুপ্লিকেট থাকা যাবে না
  • "contributors"-এর মানগুলো কেস-নিরপেক্ষভাবে বিবেচনা করা হয়
  • ব্যবহারকারীদের কেবল "authors" বা "contributors" অ্যারের একটিতে তালিকাভুক্ত করা যাবে (কোনো ওভারল্যাপ থাকা যাবে না)

নিয়ম: docs/ABOUT.md বৈধ

  • ফাইলের উপস্থিতি আবশ্যক
  • ফাইলের বিষয়বস্তু নন-ব্ল্যাংক হতে হবে
  • Markdown অবশ্যই Markdown মানদণ্ড মেনে চলতে হবে
  • লিংক অবশ্যই অ্যাবসোলিউট হতে হবে (রিলেটিভ লিংক অনুমোদিত নয়)

নিয়ম: docs/INSTALLATION.md বৈধ

  • ফাইলের উপস্থিতি আবশ্যক
  • ফাইলের বিষয়বস্তু নন-ব্ল্যাংক হতে হবে
  • Markdown অবশ্যই Markdown মানদণ্ড মেনে চলতে হবে
  • লিংক অবশ্যই অ্যাবসোলিউট হতে হবে (রিলেটিভ লিংক অনুমোদিত নয়)

নিয়ম: docs/LEARNING.md বৈধ

  • ফাইলের উপস্থিতি আবশ্যক
  • ফাইলের বিষয়বস্তু নন-ব্ল্যাংক হতে হবে
  • Markdown অবশ্যই Markdown মানদণ্ড মেনে চলতে হবে
  • লিংক অবশ্যই অ্যাবসোলিউট হতে হবে (রিলেটিভ লিংক অনুমোদিত নয়)

নিয়ম: docs/RESOURCES.md বৈধ

  • ফাইলের উপস্থিতি আবশ্যক
  • ফাইলের বিষয়বস্তু নন-ব্ল্যাংক হতে হবে
  • Markdown অবশ্যই Markdown মানদণ্ড মেনে চলতে হবে
  • লিংক অবশ্যই অ্যাবসোলিউট হতে হবে (রিলেটিভ লিংক অনুমোদিত নয়)

নিয়ম: docs/SNIPPET.txt বৈধ

  • ফাইলের উপস্থিতি আবশ্যক
  • ফাইলের বিষয়বস্তু নন-ব্ল্যাংক হতে হবে

নিয়ম: docs/TESTS.md বৈধ

  • ফাইলের উপস্থিতি আবশ্যক
  • ফাইলের বিষয়বস্তু নন-ব্ল্যাংক হতে হবে
  • Markdown অবশ্যই Markdown মানদণ্ড মেনে চলতে হবে
  • লিংক অবশ্যই অ্যাবসোলিউট হতে হবে (রিলেটিভ লিংক অনুমোদিত নয়)

শব্দকোষ

  1. নন-ব্ল্যাংক স্ট্রিং: এমন একটি স্ট্রিং, যাতে অন্তত একটি নন-হোয়াইটস্পেস ক্যারেক্টার আছে।

  2. কেবাব-কেস স্ট্রিং: এমন একটি স্ট্রিং, যাতে কেবল [a-z0-9] রেঞ্জের ক্যারেক্টার থাকে, যা ঐচ্ছিকভাবে ড্যাশ দিয়ে আলাদা করা থাকে (যেমন "two-fer")। এটি অবশ্যই নিচের রেগুলার এক্সপ্রেশনের সাথে মিলতে হবে: ^[a-z0-9]+(-[a-z0-9]+)*$

  3. টাইটেল কেস স্ট্রিং: একটি নন-ব্ল্যাংক স্ট্রিং, যা Chicago Manual of Style-এর নিচের নির্দেশিকা মেনে চলে:

    • শিরোনাম ও উপশিরোনামের প্রথম ও শেষ শব্দ বড় হাতের অক্ষরে লিখুন।
    • "গুরুত্বপূর্ণ" শব্দ (বিশেষ্য, সর্বনাম, ক্রিয়া, বিশেষণ, ক্রিয়া-বিশেষণ, এবং কিছু সংযোজক) বড় হাতের অক্ষরে লিখুন।
    • সংযোজক and, but, for, or ও nor ছোট হাতের অক্ষরে লিখুন।
    • আর্টিকেল the, a ও an ছোট হাতের অক্ষরে লিখুন।
    • পদান্বয়ী অব্যয় দৈর্ঘ্য নির্বিশেষে ছোট হাতের অক্ষরে লিখুন, তবে সেগুলোতে জোর দেওয়া হলে, সেগুলো ক্রিয়া-বিশেষণ বা বিশেষণ হিসেবে ব্যবহৃত হলে, কিংবা সংযোজক হিসেবে ব্যবহৃত হলে নয়।
    • to ও as শব্দ দুটি ছোট হাতের অক্ষরে লিখুন।
    • ল্যাটিন প্রজাতির নামের দ্বিতীয় অংশ ছোট হাতের অক্ষরে লিখুন।
  4. সেন্টেন্স কেস স্ট্রিং: একটি নন-ব্ল্যাংক স্ট্রিং, যা নিচের নির্দেশিকা মেনে চলে:

    • বাক্যের প্রথম শব্দ, সেইসাথে নামবাচক বিশেষ্য এবং আরও নির্দিষ্ট কোনো নিয়ম অনুযায়ী যেসব শব্দে প্রয়োজন, সেগুলো বড় হাতের অক্ষরে লিখুন।
  5. বৈধ files প্যাটার্ন: একটি নন-ব্ল্যাংক স্ট্রিং¹, যা অনুশীলনীর ডিরেক্টরির সাপেক্ষে অনুশীলনীতে ব্যবহৃত একটি ফাইলের অবস্থান নির্দেশ করে। একটি প্যাটার্নে নিচের প্লেসহোল্ডারগুলোর একটি ব্যবহার করা যেতে পারে:

    • %{kebab_slug}: kebab-case অনুশীলনীর স্লাগ (যেমন bit-manipulation)
    • %{snake_slug}: snake_case অনুশীলনীর স্লাগ (যেমন bit_manipulation)
    • %{camel_slug}: camelCase অনুশীলনীর স্লাগ (যেমন bitManipulation)
    • %{pascal_slug}: PascalCase অনুশীলনীর স্লাগ (যেমন BitManipulation)
  6. অনন্য version 4 UUID স্ট্রিং: এমন একটি স্ট্রিং, যা নিচের সব শর্ত পূরণ করে:

    • এটি একটি নির্দিষ্ট Exercism ট্র্যাকের ট্র্যাক-লেভেল config.json ফাইলে কেবল একবারই থাকে
    • অন্য কোনো Exercism ট্র্যাকের ট্র্যাক-লেভেল config.json ফাইলে এটি থাকে না
    • https://github.com/exercism/problem-specifications-এর কোনো canonical-data.json ফাইলে এটি থাকে না
    • Exercism-এর আর কোথাও এটি থাকে না
    • এটি নিচের রেগুলার এক্সপ্রেশনের সাথে মেলে:
    ^[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 চালাতে পারেন।

  7. বৈধ অ্যানালাইজার tag: একটি নন-ব্ল্যাংক স্ট্রিং¹, যা <category>:<thing> আকারে থাকে। <category>-এর মান অবশ্যই নিচের একটি হতে হবে:

  • paradigm (যেমন paradigm:functional)
  • technique (যেমন technique:recursion)
  • construct (যেমন construct:bitwise-and)
  • uses (যেমন uses:DateTime.add_seconds)

<thing>-এর মান অবশ্যই একটি নন-ব্ল্যাংক স্ট্রিং¹ হতে হবে।