# 31. Fichiers source V1 ## 31.1 `.saseltype` — V1 REQUIS — FIGÉ - namespace obligatoire après en-tête/docs ; - exactement un type nominal top-level parmi `class`, `struct`, `enum`, `interface`, `union` ; - nom du fichier exactement identique au nom du type, extension exclue ; - comparaison sensible à la casse même sur un filesystem qui ne l'est pas ; - chemin relatif au `source_root` cohérent avec le namespace ; - pas de fonctions/variables/constants top-level auxiliaires. Exemple : ```text src/compiler/lexer/Token.saseltype namespace compiler.lexer; public final class Token { ... } ``` ## 31.2 `.sasel` — V1 REQUIS — FIGÉ - namespace obligatoire et cohérent avec le répertoire ; - imports ; - fonctions libres ; - variables/constants top-level ; - pas de type nominal top-level ; - nom de fichier ASCII minuscule suivant `[a-z][a-z0-9_]*.sasel` ; - aucune correspondance obligatoire entre le nom du fichier et les symboles qu'il contient. Un fichier `.sasel` peut porter le même nom qu'un sous-répertoire/sous-namespace voisin. Le nom du fichier ne participe pas à l'identité des symboles et la distinction `.` / `::` évite une ambiguïté de résolution. ## 31.3 `.saselrun` — V1 REQUIS — FIGÉ Le point d'entrée source d'un package `bin` est obligatoirement : ```text /main.saselrun ``` Règles : - directement sous `source_root` ; - nom exact `main.saselrun` ; - pas de namespace ; - imports ; - exactement `main` ; - pas de helpers top-level ; - exactement un `main.saselrun` par package `bin` ; - `main.saselrun` interdit dans un package `lib`. Cette règle évite d'introduire un champ de manifest destiné uniquement à choisir entre plusieurs points d'entrée concurrents. ## 31.4 `.saselscript` — V1 RÉSERVÉ Extension réservée pour le futur environnement browser Saselang. Direction actuelle : - pas de namespace ; - entrée browser ; - plusieurs scripts possibles ; - un script ne doit pas importer directement un autre `.saselscript` ; - le code réutilisable doit venir de modules/libraries. La V1 LLVM n'est pas obligée d'implémenter le runtime browser. ## 31.5 `module.saselmod` — V1 REQUIS — FIGÉ EN PRINCIPE Nom exact : ```text module.saselmod ``` Fichier entièrement optionnel. S'il existe, il commence obligatoirement par une déclaration `namespace` correspondant exactement au répertoire. Il ne contient : - ni exports ; - ni reexports ; - ni dépendances de package ; - ni options de build générales ; - ni code exécutable arbitraire. Un développeur voulant réexposer une API doit écrire un wrapper explicite. Responsabilités prévues : ```text doc module-wide deprecated module-wide policies module-wide (ex: forbid unsafe) requirements de feature target/capability requirements lorsque pertinent ``` Syntaxe précise de ces directives : V1 À FINALISER. ---