Το configlet χρησιμοποιείται κυρίως για έλεγχο με lint: ελέγχει αν τα αρχεία ρύθμισης ενός track είναι σωστά δομημένα, τόσο συντακτικά όσο και σημασιολογικά. Τα track με λανθασμένη ρύθμιση μπορεί να μη συγχρονίζονται σωστά, να φαίνονται λάθος στον ιστότοπο ή να προσφέρουν υποδεέστερη εμπειρία χρήστη, γι' αυτό οι έλεγχοι του configlet παίζουν σημαντικό ρόλο στη διατήρηση της ακεραιότητας του Exercism.
Μπορείς να χρησιμοποιήσεις την εντολή lint για να ελέγξεις ένα track.
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]
Αυτοί είναι οι κανόνες που ελέγχει το lint.
Ο linter πρέπει να ελέγχει αν όλα τα απαιτούμενα αρχεία υπάρχουν. Τα αρχεία που δεν αφορούν συγκεκριμένη άσκηση και πρέπει να υπάρχουν είναι:
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.jsonΤο αρχείο config.json πρέπει να πληροί τους εξής ελέγχους:
"language" είναι υποχρεωτικό"language" πρέπει να είναι μη κενή συμβολοσειρά¹ με μήκος <= 255"slug" είναι υποχρεωτικό"slug" πρέπει να είναι συμβολοσειρά kebab-case² με μήκος <= 255"active" είναι υποχρεωτικό"active" πρέπει να είναι Boolean (λογική τιμή)"blurb" είναι υποχρεωτικό"blurb" πρέπει να είναι μη κενή συμβολοσειρά¹ με μήκος <= 400"version" είναι υποχρεωτικό"version" πρέπει να είναι ο ακέραιος 3
"status.concept_exercises" είναι υποχρεωτικό"status.concept_exercises" πρέπει να είναι Boolean"status.test_runner" είναι υποχρεωτικό"status.test_runner" πρέπει να είναι Boolean"status.representer" είναι υποχρεωτικό"status.representer" πρέπει να είναι Boolean"status.analyzer" είναι υποχρεωτικό"status.analyzer" πρέπει να είναι Boolean"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" μπορούν να επικαλύπτονται"test_runner.average_run_time" είναι υποχρεωτικό αν το "status.test_runner" είναι ίσο με true
"test_runner.average_run_time" πρέπει να είναι ακέραιος > 0"approaches.snippet_extension" είναι υποχρεωτικό αν το track έχει μία ή περισσότερες προσεγγίσεις"approaches.snippet_extension" πρέπει να είναι μη κενή συμβολοσειρά¹"exercises" είναι υποχρεωτικό"exercises.concept" είναι υποχρεωτικό"exercises.concept" πρέπει να είναι πίνακας"exercises.concept[].slug" είναι υποχρεωτικό"exercises.concept[].slug" πρέπει να είναι συμβολοσειρά kebab-case² με μήκος <= 255"exercises.concept[].slug" πρέπει να είναι μοναδική στο "exercises.concept[].slug" και δεν επιτρέπεται να υπάρχει στο "exercises.practice[].slug"
"exercises.concept[].name" είναι υποχρεωτικό"exercises.concept[].name" πρέπει να είναι συμβολοσειρά Title Case³ με μήκος <= 255"exercises.concept[].uuid" είναι υποχρεωτικό"exercises.concept[].uuid" πρέπει να είναι μοναδική συμβολοσειρά UUID έκδοσης 4⁶"exercises.concept[].uuid" για κάθε άσκηση δεν πρέπει να αλλάζει ποτέ"exercises.concept[].concepts" είναι υποχρεωτικό"exercises.concept[].concepts" πρέπει να είναι μη κενός πίνακας συμβολοσειρών αν το "exercises.concept[].status" δεν είναι ίσο με deprecated
"exercises.concept[].concepts" πρέπει να είναι κενός πίνακας αν το "exercises.concept[].status" είναι ίσο με deprecated
"exercises.concept[].concepts" πρέπει να είναι συμβολοσειρές kebab-case²"exercises.concept[].concepts" δεν πρέπει να έχουν διπλότυπα"exercises.concept[].concepts" δεν πρέπει να βρίσκονται στην ιδιότητα "concepts" καμίας άλλης άσκησης εννοιών"exercises.concept[].concepts" πρέπει να αντιστοιχούν στην ιδιότητα "concepts.slug" μίας από τις έννοιες"exercises.concept[].prerequisites" είναι υποχρεωτικό"exercises.concept[].prerequisites" πρέπει να είναι μη κενός πίνακας συμβολοσειρών αν το "exercises.concept[].status" δεν είναι ίσο με deprecated, εκτός από ακριβώς μία άσκηση στην οποία επιτρέπεται να έχει κενό πίνακα ως τιμή"exercises.concept[].prerequisites" πρέπει να είναι κενός πίνακας αν το "exercises.concept[].status" είναι ίσο με deprecated
"exercises.concept[].prerequisites" πρέπει να είναι συμβολοσειρές kebab-case²"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" πρέπει να είναι συμβολοσειρά kebab-case² με μήκος <= 255"exercises.practice[].slug" πρέπει να είναι μοναδική στο "exercises.practice[].slug" και δεν επιτρέπεται να υπάρχει στο "exercises.concept[].slug"
"exercises.practice[].slug" που να είναι η συμβολοσειρά hello-world
"exercises.practice[].name" είναι υποχρεωτικό"exercises.practice[].name" πρέπει να είναι συμβολοσειρά Title Case³ με μήκος <= 255"exercises.practice[].uuid" είναι υποχρεωτικό"exercises.practice[].uuid" πρέπει να είναι μοναδική συμβολοσειρά UUID έκδοσης 4⁶"exercises.practice[].uuid" για κάθε άσκηση δεν πρέπει να αλλάζει ποτέ"exercises.practice[].difficulty" είναι υποχρεωτικό"exercises.practice[].difficulty" πρέπει να είναι ακέραιος >= 1 και <= 10"exercises.practice[].practices" είναι υποχρεωτικό"exercises.practice[].practices" πρέπει να είναι μη κενός πίνακας συμβολοσειρών αν το "exercises.practice[].status" δεν είναι ίσο με deprecated
"exercises.practice[].practices" πρέπει να είναι κενός πίνακας αν το "exercises.practice[].status" είναι ίσο με deprecated
"exercises.practice[].practices" πρέπει να είναι συμβολοσειρές kebab-case²"exercises.practice[].practices" δεν πρέπει να έχουν διπλότυπα"exercises.practice[].practices" πρέπει να αντιστοιχούν στην ιδιότητα "concepts[].slug" μίας από τις έννοιες"exercises.practice[].practices" πρέπει να αναφέρονται στο slug μιας μεμονωμένης έννοιας το πολύ 10 φορές (σε όλες τις ασκήσεις)"exercises.practice[].prerequisites" είναι υποχρεωτικό"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" πρέπει να είναι συμβολοσειρές kebab-case²"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[].status" πρέπει, αν το "exercises.practice[].slug" είναι ίσο με hello-world, είτε να παραλείπεται είτε να είναι η συμβολοσειρά active
"exercises.foregone" είναι προαιρετικό"exercises.foregone" πρέπει να είναι πίνακας"exercises.foregone" πρέπει να είναι συμβολοσειρές kebab-case²"exercises.foregone" δεν πρέπει να έχουν διπλότυπα"exercises.foregone" δεν πρέπει να αντιστοιχούν σε κανένα από τα slug των ασκήσεων εννοιών ή εξάσκησης"concepts" είναι υποχρεωτικό"concepts" πρέπει να είναι πίνακας"concepts[].uuid" είναι υποχρεωτικό"concepts[].uuid" πρέπει να είναι μοναδική συμβολοσειρά UUID έκδοσης 4⁶"concepts[].uuid" για κάθε έννοια δεν πρέπει να αλλάζει ποτέ"concepts[].slug" είναι υποχρεωτικό"concepts[].slug" πρέπει να είναι συμβολοσειρά kebab-case² με μήκος <= 255"concepts[].name" είναι υποχρεωτικό"concepts[].name" πρέπει να είναι συμβολοσειρά Title Case³ με μήκος <= 255"concepts[].tags" είναι προαιρετικό"concepts[].tags.all" είναι προαιρετικό, εκτός αν το "concepts[].tags.any" είναι κενό"concepts[].tags.all" πρέπει να είναι πίνακας"concepts[].tags.all" πρέπει να είναι μη κενές συμβολοσειρές tag⁷ με μήκος <= 255"concepts[].tags.all" δεν πρέπει να έχουν διπλότυπα"concepts[].tags.any" είναι προαιρετικό, εκτός αν το "concepts[].tags.all" είναι κενό"concepts[].tags.any" πρέπει να είναι πίνακας"concepts[].tags.any" πρέπει να είναι μη κενές συμβολοσειρές tag⁷ με μήκος <= 255"concepts[].tags.any" δεν πρέπει να έχουν διπλότυπα"concepts[].tags.not" είναι προαιρετικό"concepts[].tags.not" πρέπει να είναι πίνακας"concepts[].tags.not" πρέπει να είναι μη κενές συμβολοσειρές tag⁷ με μήκος <= 255"concepts[].tags.not" δεν πρέπει να έχουν διπλότυπα"concepts" πρέπει να έχει ένα αρχείο concept/<concepts.slug>/about.md. Οι κανόνες ελέγχου με lint για αυτό το αρχείο ορίζονται παρακάτω."concepts" πρέπει να έχει ένα αρχείο concept/<concepts.slug>/introduction.md. Οι κανόνες ελέγχου με lint για αυτό το αρχείο ορίζονται παρακάτω."concepts" πρέπει να έχει ένα αρχείο concept/<concepts.slug>/links.json. Οι κανόνες ελέγχου με lint για αυτό το αρχείο ορίζονται παρακάτω."key_features" είναι προαιρετικό"key_features" πρέπει να είναι πίνακας με μήκος = 6"key_features[].icon" είναι υποχρεωτικό"key_features[].icon" πρέπει να χρησιμοποιεί μία από τις προκαθορισμένες τιμές εικονιδίων
"key_features[].title" είναι υποχρεωτικό"key_features[].title" πρέπει να είναι συμβολοσειρά Sentence Case⁴ με μήκος <= 25"key_features[].content" είναι υποχρεωτικό"key_features[].content" πρέπει να είναι μη κενή συμβολοσειρά¹ με μήκος <= 100"tags" είναι υποχρεωτικό"tags" πρέπει να είναι πίνακας συμβολοσειρών"tags" δεν πρέπει να έχουν διπλότυπα"tags" πρέπει να χρησιμοποιούν μία από τις προκαθορισμένες τιμές tag
"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" πρέπει να είναι συμβολοσειρά kebab-case²## General είτε ## X. <task>, όπου το X αντιστοιχεί στην επικεφαλίδα του αριθμού της εργασίας στο instructions.md
## 1. Do X
"concepts.slug" μίας από τις έννοιες στο config.json του track."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" πρέπει να είναι Boolean"representer.version" είναι προαιρετικό"representer.version" πρέπει να είναι ακέραιος >= 1"icon" είναι προαιρετικό"icon" πρέπει να είναι συμβολοσειρά kebab-case²introduction.md ή ένας γειτονικός κατάλογος"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" πρέπει να είναι μοναδική συμβολοσειρά UUID έκδοσης 4⁶"approaches[].uuid" για κάθε έννοια δεν πρέπει να αλλάζει ποτέ"approaches[].slug" είναι υποχρεωτικό"approaches[].slug" πρέπει να είναι συμβολοσειρά kebab-case² με μήκος <= 255"approaches[].slug" πρέπει να έχει ένα αντίστοιχο μη κενό αρχείο <slug>/content.md
"approaches[].slug" πρέπει να έχει ένα αντίστοιχο μη κενό αρχείο <slug>/snippet.txt
"approaches[].title" είναι υποχρεωτικό"approaches[].title" πρέπει να είναι συμβολοσειρά Title Case³ με μήκος <= 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.all" είναι προαιρετικό, εκτός αν το "approaches[].tags.any" είναι κενό"approaches[].tags.all" πρέπει να είναι πίνακας"approaches[].tags.all" πρέπει να είναι μη κενές συμβολοσειρές tag⁷ με μήκος <= 255"approaches[].tags.all" δεν πρέπει να έχουν διπλότυπα"approaches[].tags.any" είναι προαιρετικό, εκτός αν το "approaches[].tags.all" είναι κενό"approaches[].tags.any" πρέπει να είναι πίνακας"approaches[].tags.any" πρέπει να είναι μη κενές συμβολοσειρές tag⁷ με μήκος <= 255"approaches[].tags.any" δεν πρέπει να έχουν διπλότυπα"approaches[].tags.not" είναι προαιρετικό"approaches[].tags.not" πρέπει να είναι πίνακας"approaches[].tags.not" πρέπει να είναι μη κενές συμβολοσειρές tag⁷ με μήκος <= 255"approaches[].tags.not" δεν πρέπει να έχουν διπλότυπα"approaches[].slug" στο αρχείο .approaches/config.json
"approaches[].slug" στο αρχείο .approaches/config.json
approaches.snippet_extension στο αρχείο config.json του track"articles" είναι προαιρετικό, εκτός αν υπάρχει γειτονικός κατάλογος (ο οποίος περιέχει τα αρχεία του άρθρου)"articles" πρέπει να είναι πίνακας αντικειμένων"articles[].uuid" είναι υποχρεωτικό"articles[].uuid" πρέπει να είναι μοναδική συμβολοσειρά UUID έκδοσης 4⁶"articles[].uuid" για κάθε έννοια δεν πρέπει να αλλάζει ποτέ"articles[].slug" είναι υποχρεωτικό"articles[].slug" πρέπει να είναι συμβολοσειρά kebab-case² με μήκος <= 255"articles[].slug" πρέπει να έχει ένα αντίστοιχο μη κενό αρχείο <slug>/content.md
"articles[].slug" πρέπει να έχει ένα αντίστοιχο μη κενό αρχείο <slug>/snippet.md
"articles[].title" είναι υποχρεωτικό"articles[].title" πρέπει να είναι συμβολοσειρά Title Case³ με μήκος <= 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" (χωρίς επικάλυψη)"articles[].slug" στο αρχείο .articles/config.json
"articles[].slug" στο αρχείο .articles/config.json
"[].url" είναι υποχρεωτική"[].url" πρέπει να είναι URL"[].description" είναι υποχρεωτική"[].description" πρέπει να είναι μη κενή συμβολοσειρά¹"[].icon_url" είναι προαιρετική"[].icon_url" πρέπει να είναι URL"blurb" είναι υποχρεωτικό"blurb" πρέπει να είναι μη κενή συμβολοσειρά¹ με μήκος <= 350"authors" είναι υποχρεωτικό"authors" πρέπει να είναι πίνακας"authors" πρέπει να είναι μη κενές συμβολοσειρές¹"authors" δεν πρέπει να έχουν διπλότυπα"authors" αντιμετωπίζονται χωρίς διάκριση πεζών-κεφαλαίων"contributors" είναι προαιρετικό"contributors" πρέπει να είναι πίνακας"contributors" πρέπει να είναι μη κενές συμβολοσειρές¹"contributors" δεν πρέπει να έχουν διπλότυπα"contributors" αντιμετωπίζονται χωρίς διάκριση πεζών-κεφαλαίων"authors" ή "contributors" (χωρίς επικάλυψη)Μη κενή συμβολοσειρά: μια συμβολοσειρά που περιέχει τουλάχιστον έναν χαρακτήρα που δεν είναι κενό διάστημα.
Συμβολοσειρά kebab-case: μια συμβολοσειρά που περιέχει μόνο χαρακτήρες στο εύρος [a-z0-9], προαιρετικά χωρισμένους με παύλες (π.χ. "two-fer"). Πρέπει να ταιριάζει με την κανονική έκφραση: ^[a-z0-9]+(-[a-z0-9]+)*$
Συμβολοσειρά Title Case: μια μη κενή συμβολοσειρά που ακολουθεί τις παρακάτω οδηγίες από το Chicago Manual of Style:
Συμβολοσειρά Sentence Case: μια μη κενή συμβολοσειρά που ακολουθεί τις παρακάτω οδηγίες:
Έγκυρο μοτίβο files: Μια μη κενή συμβολοσειρά¹ που καθορίζει τη θέση ενός αρχείου που χρησιμοποιείται σε μια άσκηση, σχετική με τον κατάλογο της άσκησης. Ένα μοτίβο μπορεί να χρησιμοποιεί έναν από τους παρακάτω placeholders:
%{kebab_slug}: το slug της άσκησης σε kebab-case (π.χ. bit-manipulation)%{snake_slug}: το slug της άσκησης σε snake_case (π.χ. bit_manipulation)%{camel_slug}: το slug της άσκησης σε camelCase (π.χ. bitManipulation)%{pascal_slug}: το slug της άσκησης σε PascalCase (π.χ. BitManipulation)Μοναδική συμβολοσειρά UUID έκδοσης 4: Μια συμβολοσειρά που ικανοποιεί όλες τις παρακάτω συνθήκες:
config.json επιπέδου track ενός δεδομένου track του Exercismconfig.json επιπέδου track κανενός άλλου track του Exercismcanonical-data.json στο https://github.com/exercism/problem-specifications^[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
Μπορείς να τρέξεις το configlet uuid για να δημιουργήσεις ένα κατάλληλο UUID.
Έγκυρο tag του αναλυτή: Μια μη κενή συμβολοσειρά¹ που έχει τη μορφή <category>:<thing>.
Η τιμή του <category> πρέπει να είναι μία από τις εξής:
paradigm (π.χ. paradigm:functional)technique (π.χ. technique:recursion)construct (π.χ. construct:bitwise-and)uses (π.χ. uses:DateTime.add_seconds)Η τιμή του <thing> πρέπει να είναι μη κενή συμβολοσειρά¹.