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" की ज़रूरी है
  • "language" की वैल्यू एक गैर-खाली स्ट्रिंग¹ होनी चाहिए, जिसकी लंबाई <= 255 हो
  • "slug" की ज़रूरी है
  • "slug" की वैल्यू एक कीबैब-केस स्ट्रिंग² होनी चाहिए, जिसकी लंबाई <= 255 हो
  • "active" की ज़रूरी है
  • "active" की वैल्यू एक बूलियन होनी चाहिए
  • "blurb" की ज़रूरी है
  • "blurb" की वैल्यू एक गैर-खाली स्ट्रिंग¹ होनी चाहिए, जिसकी लंबाई <= 400 हो
  • "version" की ज़रूरी है
  • "version" की वैल्यू पूर्णांक 3 होनी चाहिए
  • "status.concept_exercises" की ज़रूरी है
  • "status.concept_exercises" की वैल्यू एक बूलियन होनी चाहिए
  • "status.test_runner" की ज़रूरी है
  • "status.test_runner" की वैल्यू एक बूलियन होनी चाहिए
  • "status.representer" की ज़रूरी है
  • "status.representer" की वैल्यू एक बूलियन होनी चाहिए
  • "status.analyzer" की ज़रूरी है
  • "status.analyzer" की वैल्यू एक बूलियन होनी चाहिए
  • "online_editor.indent_style" की ज़रूरी है
  • "online_editor.indent_style" की वैल्यू स्ट्रिंग space या tab होनी चाहिए
  • "online_editor.indent_size" की ज़रूरी है
  • "online_editor.indent_size" की वैल्यू एक पूर्णांक होनी चाहिए जो >= 0 और <= 8 हो
  • "online_editor.highlightjs_language" की वैकल्पिक है
  • "online_editor.highlightjs_language" की वैल्यू एक गैर-खाली स्ट्रिंग¹ होनी चाहिए
  • "files" की वैकल्पिक है
  • "files" की वैल्यू एक ऑब्जेक्ट होनी चाहिए
  • "files.solution" की वैकल्पिक है
  • "files.solution" की वैल्यू एक ऐरे होनी चाहिए
  • "files.solution" की वैल्यू मान्य पैटर्न⁵ होनी चाहिए
  • "files.solution" की वैल्यू में दोहराव नहीं होना चाहिए
  • "files.test" की वैकल्पिक है
  • "files.test" की वैल्यू एक ऐरे होनी चाहिए
  • "files.test" की वैल्यू मान्य पैटर्न⁵ होनी चाहिए
  • "files.test" की वैल्यू में दोहराव नहीं होना चाहिए
  • "files.example" की वैकल्पिक है
  • "files.example" की वैल्यू एक ऐरे होनी चाहिए
  • "files.example" की वैल्यू मान्य पैटर्न⁵ होनी चाहिए
  • "files.example" की वैल्यू में दोहराव नहीं होना चाहिए
  • "files.exemplar" की वैकल्पिक है
  • "files.exemplar" की वैल्यू एक ऐरे होनी चाहिए
  • "files.exemplar" की वैल्यू मान्य पैटर्न⁵ होनी चाहिए
  • "files.exemplar" की वैल्यू में दोहराव नहीं होना चाहिए
  • "files.editor" की वैकल्पिक है
  • "files.editor" की वैल्यू एक ऐरे होनी चाहिए
  • "files.editor" की वैल्यू मान्य पैटर्न⁵ होनी चाहिए
  • "files.editor" की वैल्यू में दोहराव नहीं होना चाहिए
  • "files.invalidator" की वैकल्पिक है
  • "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" फाइलों में ओवरलैप हो सकता है
  • अगर "status.test_runner" की वैल्यू true है, तो "test_runner.average_run_time" की ज़रूरी है
  • "test_runner.average_run_time" की वैल्यू एक पूर्णांक होनी चाहिए जो > 0 हो
  • अगर ट्रैक में एक या ज़्यादा अप्रोच हैं, तो "approaches.snippet_extension" की ज़रूरी है
  • "approaches.snippet_extension" की वैल्यू एक गैर-खाली स्ट्रिंग¹ होनी चाहिए
  • "exercises" की ज़रूरी है
  • "exercises.concept" की ज़रूरी है
  • "exercises.concept" की वैल्यू एक ऐरे होनी चाहिए
  • "exercises.concept[].slug" की ज़रूरी है
  • "exercises.concept[].slug" की वैल्यू एक कीबैब-केस स्ट्रिंग² होनी चाहिए, जिसकी लंबाई <= 255 हो
  • "exercises.concept[].slug" की वैल्यू "exercises.concept[].slug" में अद्वितीय होनी चाहिए और "exercises.practice[].slug" में मौजूद नहीं होनी चाहिए
  • "exercises.concept[].name" की ज़रूरी है
  • "exercises.concept[].name" की वैल्यू एक टाइटल केस स्ट्रिंग³ होनी चाहिए, जिसकी लंबाई <= 255 हो
  • "exercises.concept[].uuid" की ज़रूरी है
  • "exercises.concept[].uuid" की वैल्यू एक अद्वितीय वर्ज़न 4 UUID स्ट्रिंग⁶ होनी चाहिए
  • हर अभ्यास की "exercises.concept[].uuid" वैल्यू कभी नहीं बदलनी चाहिए
  • "exercises.concept[].concepts" की ज़रूरी है
  • अगर "exercises.concept[].status" की वैल्यू deprecated नहीं है, तो "exercises.concept[].concepts" की वैल्यू स्ट्रिंग का एक गैर-खाली ऐरे होनी चाहिए
  • अगर "exercises.concept[].status" की वैल्यू deprecated है, तो "exercises.concept[].concepts" की वैल्यू एक खाली ऐरे होनी चाहिए
  • "exercises.concept[].concepts" की वैल्यू कीबैब-केस स्ट्रिंग² होनी चाहिए
  • "exercises.concept[].concepts" की वैल्यू में दोहराव नहीं होना चाहिए
  • "exercises.concept[].concepts" की वैल्यू किसी भी दूसरे कॉन्सेप्ट अभ्यास की "concepts" प्रॉपर्टी में नहीं होनी चाहिए
  • "exercises.concept[].concepts" की वैल्यू किसी एक कॉन्सेप्ट की "concepts.slug" प्रॉपर्टी से मेल खानी चाहिए
  • "exercises.concept[].prerequisites" की ज़रूरी है
  • अगर "exercises.concept[].status" की वैल्यू deprecated नहीं है, तो "exercises.concept[].prerequisites" की वैल्यू स्ट्रिंग का एक गैर-खाली ऐरे होनी चाहिए। हाँ, ठीक एक अभ्यास ऐसा हो सकता है जिसकी वैल्यू खाली ऐरे हो
  • अगर "exercises.concept[].status" की वैल्यू deprecated है, तो "exercises.concept[].prerequisites" की वैल्यू एक खाली ऐरे होनी चाहिए
  • "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" की वैकल्पिक है
  • "exercises.concept[].status" की वैल्यू स्ट्रिंग wip, beta, active या deprecated होनी चाहिए
  • "exercises.practice" की ज़रूरी है
  • "exercises.practice" की वैल्यू एक ऐरे होनी चाहिए
  • "exercises.practice[].slug" की ज़रूरी है
  • "exercises.practice[].slug" की वैल्यू एक कीबैब-केस स्ट्रिंग² होनी चाहिए, जिसकी लंबाई <= 255 हो
  • "exercises.practice[].slug" की वैल्यू "exercises.practice[].slug" में अद्वितीय होनी चाहिए और "exercises.concept[].slug" में मौजूद नहीं होनी चाहिए
  • ठीक एक ऐसी "exercises.practice[].slug" वैल्यू होनी चाहिए जो स्ट्रिंग hello-world हो
  • "exercises.practice[].name" की ज़रूरी है
  • "exercises.practice[].name" की वैल्यू एक टाइटल केस स्ट्रिंग³ होनी चाहिए, जिसकी लंबाई <= 255 हो
  • "exercises.practice[].uuid" की ज़रूरी है
  • "exercises.practice[].uuid" की वैल्यू एक अद्वितीय वर्ज़न 4 UUID स्ट्रिंग⁶ होनी चाहिए
  • हर अभ्यास की "exercises.practice[].uuid" वैल्यू कभी नहीं बदलनी चाहिए
  • "exercises.practice[].difficulty" की ज़रूरी है
  • "exercises.practice[].difficulty" की वैल्यू एक पूर्णांक होनी चाहिए जो >= 1 और <= 10 हो
  • "exercises.practice[].practices" की ज़रूरी है
  • अगर "exercises.practice[].status" की वैल्यू deprecated नहीं है, तो "exercises.practice[].practices" की वैल्यू स्ट्रिंग का एक गैर-खाली ऐरे होनी चाहिए
  • अगर "exercises.practice[].status" की वैल्यू deprecated है, तो "exercises.practice[].practices" की वैल्यू एक खाली ऐरे होनी चाहिए
  • "exercises.practice[].practices" की वैल्यू कीबैब-केस स्ट्रिंग² होनी चाहिए
  • "exercises.practice[].practices" की वैल्यू में दोहराव नहीं होना चाहिए
  • "exercises.practice[].practices" की वैल्यू किसी एक कॉन्सेप्ट की "concepts[].slug" प्रॉपर्टी से मेल खानी चाहिए
  • सभी अभ्यासों को मिलाकर, किसी एक कॉन्सेप्ट के स्लग का ज़िक्र "exercises.practice[].practices" की वैल्यू में ज़्यादा से ज़्यादा 10 बार हो सकता है
  • "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.practice[].prerequisites" की वैल्यू किसी भी कॉन्सेप्ट अभ्यास की "exercises.concept[].concepts" वैल्यू से मेल खानी चाहिए
  • "exercises.practice[].prerequisites" की वैल्यू किसी एक कॉन्सेप्ट की "concepts[].slug" प्रॉपर्टी से मेल खानी चाहिए
  • "exercises.practice[].status" की वैकल्पिक है
  • "exercises.practice[].status" की वैल्यू स्ट्रिंग wip, beta, active या deprecated होनी चाहिए
  • अगर "exercises.practice[].slug" की वैल्यू hello-world है, तो "exercises.practice[].status" की वैल्यू या तो हटा दी जानी चाहिए या स्ट्रिंग active होनी चाहिए
  • "exercises.foregone" की वैकल्पिक है
  • "exercises.foregone" की वैल्यू एक ऐरे होनी चाहिए
  • "exercises.foregone" की वैल्यू कीबैब-केस स्ट्रिंग² होनी चाहिए
  • "exercises.foregone" की वैल्यू में दोहराव नहीं होना चाहिए
  • "exercises.foregone" की वैल्यू किसी भी कॉन्सेप्ट या प्रैक्टिस अभ्यास के स्लग से मेल नहीं खानी चाहिए
  • "concepts" की ज़रूरी है
  • "concepts" की वैल्यू एक ऐरे होनी चाहिए
  • "concepts[].uuid" की ज़रूरी है
  • "concepts[].uuid" की वैल्यू एक अद्वितीय वर्ज़न 4 UUID स्ट्रिंग⁶ होनी चाहिए
  • हर कॉन्सेप्ट की "concepts[].uuid" वैल्यू कभी नहीं बदलनी चाहिए
  • "concepts[].slug" की ज़रूरी है
  • "concepts[].slug" की वैल्यू एक कीबैब-केस स्ट्रिंग² होनी चाहिए, जिसकी लंबाई <= 255 हो
  • "concepts[].name" की ज़रूरी है
  • "concepts[].name" की वैल्यू एक टाइटल केस स्ट्रिंग³ होनी चाहिए, जिसकी लंबाई <= 255 हो
  • "concepts[].tags" की वैकल्पिक है
  • अगर "concepts[].tags.any" खाली नहीं है, तो "concepts[].tags.all" की वैकल्पिक है
  • "concepts[].tags.all" की वैल्यू एक ऐरे होनी चाहिए
  • "concepts[].tags.all" की वैल्यू गैर-खाली टैग⁷ स्ट्रिंग होनी चाहिए, जिसकी लंबाई <= 255 हो
  • "concepts[].tags.all" की वैल्यू में दोहराव नहीं होना चाहिए
  • अगर "concepts[].tags.all" खाली नहीं है, तो "concepts[].tags.any" की वैकल्पिक है
  • "concepts[].tags.any" की वैल्यू एक ऐरे होनी चाहिए
  • "concepts[].tags.any" की वैल्यू गैर-खाली टैग⁷ स्ट्रिंग होनी चाहिए, जिसकी लंबाई <= 255 हो
  • "concepts[].tags.any" की वैल्यू में दोहराव नहीं होना चाहिए
  • "concepts[].tags.not" की वैकल्पिक है
  • "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_features" की वैल्यू एक ऐरे होनी चाहिए जिसकी लंबाई = 6 हो
  • "key_features[].icon" की ज़रूरी है
  • "key_features[].icon" की वैल्यू पहले से तय आइकन वैल्यू में से कोई एक होनी चाहिए
  • "key_features[].title" की ज़रूरी है
  • "key_features[].title" की वैल्यू एक सेंटेंस केस स्ट्रिंग⁴ होनी चाहिए, जिसकी लंबाई <= 25 हो
  • "key_features[].content" की ज़रूरी है
  • "key_features[].content" की वैल्यू एक गैर-खाली स्ट्रिंग¹ होनी चाहिए, जिसकी लंबाई <= 100 हो
  • "tags" की ज़रूरी है
  • "tags" की वैल्यू स्ट्रिंग का एक ऐरे होनी चाहिए
  • "tags" की वैल्यू में दोहराव नहीं होना चाहिए
  • "tags" की वैल्यू पहले से तय टैग वैल्यू में से कोई एक होनी चाहिए

नियम: exercises/concept/<slug>/.meta/config.json मान्य है

  • फाइल मान्य JSON होनी चाहिए
  • JSON का मूल एक ऑब्जेक्ट होना चाहिए
  • "blurb" की ज़रूरी है
  • "blurb" की वैल्यू एक गैर-खाली स्ट्रिंग¹ होनी चाहिए, जिसकी लंबाई <= 350 हो
  • "source" की वैकल्पिक है
  • "source" की वैल्यू एक गैर-खाली स्ट्रिंग¹ होनी चाहिए
  • "source_url" की वैकल्पिक है
  • "source_url" की वैल्यू एक URL होनी चाहिए
  • "authors" की ज़रूरी है
  • "authors" की वैल्यू एक गैर-खाली ऐरे होनी चाहिए
  • "authors" की वैल्यू गैर-खाली स्ट्रिंग¹ होनी चाहिए
  • "authors" की वैल्यू में दोहराव नहीं होना चाहिए
  • "authors" की वैल्यू केस को नज़रअंदाज़ करके देखी जाती हैं
  • "contributors" की वैकल्पिक है
  • "contributors" की वैल्यू एक ऐरे होनी चाहिए
  • "contributors" की वैल्यू गैर-खाली स्ट्रिंग¹ होनी चाहिए
  • "contributors" की वैल्यू में दोहराव नहीं होना चाहिए
  • "contributors" की वैल्यू केस को नज़रअंदाज़ करके देखी जाती हैं
  • किसी यूज़र का नाम या तो "authors" ऐरे में हो सकता है या "contributors" ऐरे में, दोनों में नहीं (कोई ओवरलैप नहीं)
  • "files.solution" की ज़रूरी है
  • "files.solution" की वैल्यू एक गैर-खाली ऐरे होनी चाहिए
  • "files.solution" की वैल्यू में दोहराव नहीं होना चाहिए
  • "files.test" की ज़रूरी है
  • "files.test" की वैल्यू एक गैर-खाली ऐरे होनी चाहिए
  • "files.test" की वैल्यू में दोहराव नहीं होना चाहिए
  • "files.exemplar" की ज़रूरी है
  • "files.exemplar" की वैल्यू एक गैर-खाली ऐरे होनी चाहिए
  • "files.exemplar" की वैल्यू में दोहराव नहीं होना चाहिए
  • "files.editor" की वैकल्पिक है
  • "files.editor" की वैल्यू एक ऐरे होनी चाहिए
  • "files.editor" की वैल्यू में दोहराव नहीं होना चाहिए
  • "files.invalidator" की वैकल्पिक है
  • "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" की वैकल्पिक है
  • "forked_from" की वैल्यू एक ऐरे होनी चाहिए
  • "forked_from" की वैल्यू ऐसी स्ट्रिंग होनी चाहिए जो <track-slug>/<exercise-slug> के रूप में लिखी हो (जैसे fsharp/bird-watcher)
  • "forked_from" की वैल्यू ऐसे अभ्यासों की ओर इशारा करनी चाहिए जो वाकई लागू किए गए हैं
  • "forked_from" की वैल्यू में दोहराव नहीं होना चाहिए
  • "language_versions" की वैकल्पिक है
  • "language_versions" की वैल्यू एक स्ट्रिंग होनी चाहिए
  • "representer.version" की वैकल्पिक है
  • "representer.version" की वैल्यू एक पूर्णांक होनी चाहिए जो >= 1 हो
  • "icon" की वैकल्पिक है
  • "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" की ज़रूरी है
  • "blurb" की वैल्यू एक गैर-खाली स्ट्रिंग¹ होनी चाहिए, जिसकी लंबाई <= 350 हो
  • "source" की वैकल्पिक है
  • "source" की वैल्यू एक गैर-खाली स्ट्रिंग¹ होनी चाहिए
  • "source_url" की वैकल्पिक है
  • "source_url" की वैल्यू एक URL होनी चाहिए
  • "authors" की वैकल्पिक है
  • "authors" की वैल्यू एक ऐरे होनी चाहिए
  • "authors" की वैल्यू गैर-खाली स्ट्रिंग¹ होनी चाहिए
  • "authors" की वैल्यू में दोहराव नहीं होना चाहिए
  • "authors" की वैल्यू केस को नज़रअंदाज़ करके देखी जाती हैं
  • "contributors" की वैकल्पिक है
  • "contributors" की वैल्यू एक ऐरे होनी चाहिए
  • "contributors" की वैल्यू गैर-खाली स्ट्रिंग¹ होनी चाहिए
  • "contributors" की वैल्यू में दोहराव नहीं होना चाहिए
  • "contributors" की वैल्यू केस को नज़रअंदाज़ करके देखी जाती हैं
  • किसी यूज़र का नाम या तो "authors" ऐरे में हो सकता है या "contributors" ऐरे में, दोनों में नहीं (कोई ओवरलैप नहीं)
  • "files.solution" की ज़रूरी है
  • "files.solution" की वैल्यू एक गैर-खाली ऐरे होनी चाहिए
  • "files.solution" की वैल्यू में दोहराव नहीं होना चाहिए
  • "files.test" की ज़रूरी है
  • "files.test" की वैल्यू एक गैर-खाली ऐरे होनी चाहिए
  • "files.test" की वैल्यू में दोहराव नहीं होना चाहिए
  • "files.example" की ज़रूरी है
  • "files.example" की वैल्यू एक गैर-खाली ऐरे होनी चाहिए
  • "files.example" की वैल्यू में दोहराव नहीं होना चाहिए
  • "files.editor" की वैकल्पिक है
  • "files.editor" की वैल्यू एक ऐरे होनी चाहिए
  • "files.editor" की वैल्यू में दोहराव नहीं होना चाहिए
  • "files.invalidator" की वैकल्पिक है
  • "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" की वैकल्पिक है
  • "language_versions" की वैल्यू एक स्ट्रिंग होनी चाहिए
  • "test_runner" की वैकल्पिक है
  • "test_runner" की वैल्यू एक बूलियन होनी चाहिए
  • "representer.version" की वैकल्पिक है
  • "representer.version" की वैल्यू एक पूर्णांक होनी चाहिए जो >= 1 हो
  • "icon" की वैकल्पिक है
  • "icon" की वैल्यू एक कीबैब-केस स्ट्रिंग² होनी चाहिए

नियम: exercises/{concept|practice}/<slug>/.approaches/config.json मान्य है

  • फाइल का मौजूद होना वैकल्पिक है, लेकिन अगर कोई introduction.md या साथ वाली कोई डायरेक्टरी हो, तो नहीं
  • फाइल मान्य JSON होनी चाहिए
  • JSON का मूल एक ऑब्जेक्ट होना चाहिए
  • "introduction.authors" की वैकल्पिक है
  • "introduction.authors" की वैल्यू एक ऐरे होनी चाहिए
  • "introduction.authors" की वैल्यू गैर-खाली स्ट्रिंग¹ होनी चाहिए
  • "introduction.authors" की वैल्यू में दोहराव नहीं होना चाहिए
  • "introduction.authors" की वैल्यू केस को नज़रअंदाज़ करके देखी जाती हैं
  • अगर "introduction.authors" ऐरे खाली नहीं है, तो एक गैर-खाली introduction.md फाइल होनी चाहिए
  • "introduction.contributors" की वैकल्पिक है
  • "introduction.contributors" की वैल्यू एक ऐरे होनी चाहिए
  • "introduction.contributors" की वैल्यू गैर-खाली स्ट्रिंग¹ होनी चाहिए
  • "introduction.contributors" की वैल्यू में दोहराव नहीं होना चाहिए
  • "introduction.contributors" की वैल्यू केस को नज़रअंदाज़ करके देखी जाती हैं
  • अगर "introduction.contributors" ऐरे खाली नहीं है, तो एक गैर-खाली introduction.md फाइल होनी चाहिए
  • किसी यूज़र का नाम या तो "introduction.authors" ऐरे में हो सकता है या "introduction.contributors" ऐरे में, दोनों में नहीं (कोई ओवरलैप नहीं)
  • "approaches" की वैकल्पिक है, लेकिन अगर साथ में कोई डायरेक्टरी मौजूद हो (जिसमें उस अप्रोच की फाइलें हैं), तो नहीं
  • "approaches" की वैल्यू ऑब्जेक्ट का एक ऐरे होनी चाहिए
  • "approaches[].uuid" की ज़रूरी है
  • "approaches[].uuid" की वैल्यू एक अद्वितीय वर्ज़न 4 UUID स्ट्रिंग⁶ होनी चाहिए
  • हर कॉन्सेप्ट की "approaches[].uuid" वैल्यू कभी नहीं बदलनी चाहिए
  • "approaches[].slug" की ज़रूरी है
  • "approaches[].slug" की वैल्यू एक कीबैब-केस स्ट्रिंग² होनी चाहिए, जिसकी लंबाई <= 255 हो
  • "approaches[].slug" की वैल्यू के लिए एक गैर-खाली <slug>/content.md फाइल होनी चाहिए
  • "approaches[].slug" की वैल्यू के लिए एक गैर-खाली <slug>/snippet.txt फाइल होनी चाहिए
  • "approaches[].title" की ज़रूरी है
  • "approaches[].title" की वैल्यू एक टाइटल केस स्ट्रिंग³ होनी चाहिए, जिसकी लंबाई <= 255 हो
  • "approaches[].blurb" की ज़रूरी है
  • "approaches[].blurb" की वैल्यू एक गैर-खाली स्ट्रिंग¹ होनी चाहिए, जिसकी लंबाई <= 350 हो
  • "approaches[].authors" की ज़रूरी है
  • "approaches[].authors" की वैल्यू एक गैर-खाली ऐरे होनी चाहिए
  • "approaches[].authors" की वैल्यू गैर-खाली स्ट्रिंग¹ होनी चाहिए
  • "approaches[].authors" की वैल्यू में दोहराव नहीं होना चाहिए
  • "approaches[].authors" की वैल्यू केस को नज़रअंदाज़ करके देखी जाती हैं
  • "approaches[].contributors" की वैकल्पिक है
  • "approaches[].contributors" की वैल्यू एक ऐरे होनी चाहिए
  • "approaches[].contributors" की वैल्यू गैर-खाली स्ट्रिंग¹ होनी चाहिए
  • "approaches[].contributors" की वैल्यू में दोहराव नहीं होना चाहिए
  • "approaches[].contributors" की वैल्यू केस को नज़रअंदाज़ करके देखी जाती हैं
  • किसी यूज़र का नाम या तो "approaches[].authors" ऐरे में हो सकता है या "approaches[].contributors" ऐरे में, दोनों में नहीं (कोई ओवरलैप नहीं)
  • "approaches[].tags" की वैकल्पिक है
  • अगर "approaches[].tags.any" खाली नहीं है, तो "approaches[].tags.all" की वैकल्पिक है
  • "approaches[].tags.all" की वैल्यू एक ऐरे होनी चाहिए
  • "approaches[].tags.all" की वैल्यू गैर-खाली टैग⁷ स्ट्रिंग होनी चाहिए, जिसकी लंबाई <= 255 हो
  • "approaches[].tags.all" की वैल्यू में दोहराव नहीं होना चाहिए
  • अगर "approaches[].tags.all" खाली नहीं है, तो "approaches[].tags.any" की वैकल्पिक है
  • "approaches[].tags.any" की वैल्यू एक ऐरे होनी चाहिए
  • "approaches[].tags.any" की वैल्यू गैर-खाली टैग⁷ स्ट्रिंग होनी चाहिए, जिसकी लंबाई <= 255 हो
  • "approaches[].tags.any" की वैल्यू में दोहराव नहीं होना चाहिए
  • "approaches[].tags.not" की वैकल्पिक है
  • "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" की मेल खाती एंट्री मौजूद है, तो फाइल का मौजूद होना ज़रूरी है
  • स्निपेट में ज़्यादा से ज़्यादा 8 लाइन होनी चाहिए
  • स्निपेट एक्सटेंशन ट्रैक की config.json फाइल में approaches.snippet_extension की वैल्यू से लिया जाता है

नियम: exercises/{concept|practice}/<slug>/.articles/config.json मान्य है

  • फाइल का मौजूद होना वैकल्पिक है, लेकिन अगर साथ में कोई डायरेक्टरी हो, तो नहीं
  • फाइल मान्य JSON होनी चाहिए
  • JSON का मूल एक ऑब्जेक्ट होना चाहिए
  • "articles" की वैकल्पिक है, लेकिन अगर साथ में कोई डायरेक्टरी मौजूद हो (जिसमें उस आर्टिकल की फाइलें हैं), तो नहीं
  • "articles" की वैल्यू ऑब्जेक्ट का एक ऐरे होनी चाहिए
  • "articles[].uuid" की ज़रूरी है
  • "articles[].uuid" की वैल्यू एक अद्वितीय वर्ज़न 4 UUID स्ट्रिंग⁶ होनी चाहिए
  • हर कॉन्सेप्ट की "articles[].uuid" वैल्यू कभी नहीं बदलनी चाहिए
  • "articles[].slug" की ज़रूरी है
  • "articles[].slug" की वैल्यू एक कीबैब-केस स्ट्रिंग² होनी चाहिए, जिसकी लंबाई <= 255 हो
  • "articles[].slug" की वैल्यू के लिए एक गैर-खाली <slug>/content.md फाइल होनी चाहिए
  • "articles[].slug" की वैल्यू के लिए एक गैर-खाली <slug>/snippet.md फाइल होनी चाहिए
  • "articles[].title" की ज़रूरी है
  • "articles[].title" की वैल्यू एक टाइटल केस स्ट्रिंग³ होनी चाहिए, जिसकी लंबाई <= 255 हो
  • "articles[].blurb" की ज़रूरी है
  • "articles[].blurb" की वैल्यू एक गैर-खाली स्ट्रिंग¹ होनी चाहिए, जिसकी लंबाई <= 350 हो
  • "articles[].authors" की ज़रूरी है
  • "articles[].authors" की वैल्यू एक गैर-खाली ऐरे होनी चाहिए
  • "articles[].authors" की वैल्यू गैर-खाली स्ट्रिंग¹ होनी चाहिए
  • "articles[].authors" की वैल्यू में दोहराव नहीं होना चाहिए
  • "articles[].authors" की वैल्यू केस को नज़रअंदाज़ करके देखी जाती हैं
  • "articles[].contributors" की वैकल्पिक है
  • "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 मानकों का पालन करना चाहिए
  • स्निपेट में ज़्यादा से ज़्यादा 8 लाइन होनी चाहिए (शुरू और अंत के कोड फेंस मार्कर नहीं गिने जाते)

नियम: 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" की ज़रूरी है
  • "blurb" की वैल्यू एक गैर-खाली स्ट्रिंग¹ होनी चाहिए, जिसकी लंबाई <= 350 हो
  • "authors" की ज़रूरी है
  • "authors" की वैल्यू एक ऐरे होनी चाहिए
  • "authors" की वैल्यू गैर-खाली स्ट्रिंग¹ होनी चाहिए
  • "authors" की वैल्यू में दोहराव नहीं होना चाहिए
  • "authors" की वैल्यू केस को नज़रअंदाज़ करके देखी जाती हैं
  • "contributors" की वैकल्पिक है
  • "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. अद्वितीय वर्ज़न 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> की वैल्यू एक गैर-खाली स्ट्रिंग¹ होनी चाहिए।