Autocomplétion VS Code avec les schémas JSON¶
VS Code peut utiliser les schémas JSON Forge pour aider à remplir les fichiers d'entités et de relations. Cette aide est optionnelle : Forge ne dépend pas de VS Code pour valider un projet.
Principe¶
VS Code lit un schéma JSON et, pour chaque fichier associé :
- propose les clés autorisées (autocomplétion) ;
- signale les clés inconnues ;
- propose les valeurs
enumattendues ; - signale les types JSON invalides.
VS Code ne remplace pas forge entity:validate. La validation structurelle
que VS Code peut apporter reste partielle ; les règles sémantiques de Forge
(entités inconnues, collisions, doublons, cohérence entre champs et index)
sont vérifiées uniquement par la CLI.
Méthode 1 : utiliser $schema dans le fichier JSON¶
La façon la plus directe est d'ajouter une clé $schema dans chaque fichier.
Le chemin est relatif au fichier JSON ouvert.
Exemple : fichier d'entité¶
Un fichier d'entité est typiquement placé à :
Déclarer le schéma dans ce fichier :
{
"$schema": "../../../schemas/entity.schema.json",
"schema_version": "1.0",
"name": "Article",
"table": "articles",
"fields": [
{
"name": "title",
"type": "string",
"max_length": 255,
"required": true
}
],
"options": {
"timestamps": false,
"soft_delete": false
}
}
Le chemin ../../../schemas/entity.schema.json remonte trois niveaux depuis
mvc/entities/article/ jusqu'à la racine du projet.
Exemple : relations.json¶
Le chemin ../../schemas/relations.schema.json remonte deux niveaux depuis
mvc/entities/.
Méthode 2 : associer les schémas dans .vscode/settings.json¶
L'association globale évite de modifier chaque fichier JSON. Elle se place dans
.vscode/settings.json à la racine du projet.
Configuration de base¶
{
"json.schemas": [
{
"fileMatch": [
"/mvc/entities/relations.json"
],
"url": "./schemas/relations.schema.json"
},
{
"fileMatch": [
"/mvc/entities/**/*.json"
],
"url": "./schemas/entity.schema.json"
}
]
}
Note : si
relations.jsoncorrespond aussi au motif/mvc/entities/**/*.json, l'entrée spécifique àrelations.jsondoit rester avant l'entrée générique. L'ordre des entrées dansjson.schemasdétermine quelle association prend effet.
Variante prudente (sous-dossiers)¶
Pour cibler explicitement les entités dans des sous-dossiers et éviter de
sélectionner relations.json via le motif générique :
{
"json.schemas": [
{
"fileMatch": [
"/mvc/entities/relations.json"
],
"url": "./schemas/relations.schema.json"
},
{
"fileMatch": [
"/mvc/entities/*/*.json"
],
"url": "./schemas/entity.schema.json"
},
{
"fileMatch": [
"/mvc/security/rbac.json"
],
"url": "./schemas/rbac.schema.json"
}
]
}
Le motif /mvc/entities/*/*.json cible les entités dans des sous-dossiers :
mvc/entities/article/article.json ✓
mvc/entities/media/media.json ✓
mvc/entities/relations.json ✗ (non ciblé — couvert par l'entrée précédente)
Cette configuration est disponible dans .vscode/settings.json à la racine du dépôt.
Elle est automatiquement prise en compte dès l'ouverture du projet dans VS Code.
Ce que VS Code peut détecter¶
Avec un schéma associé, VS Code peut signaler :
| Cas | Exemple invalide | Exemple valide |
|---|---|---|
| Clé inconnue | "couleur": "rouge" dans une entité |
— |
| Clé obligatoire manquante | entité sans name |
"name": "Article" |
| Type JSON invalide | "required": "oui" |
"required": true |
| Type Forge non autorisé | "type": "VARCHAR(255)" |
"type": "string" |
Valeur enum invalide |
"on_delete": "CASCADE" |
"on_delete": "cascade" |
| Pivot incomplet | many_to_many sans pivot.table |
avec "table": "article_tag" |
unique_pair incorrect |
"unique_pair": false |
"unique_pair": true |
Ce que VS Code ne remplace pas¶
VS Code valide principalement la structure des fichiers JSON. forge entity:validate
valide en plus les règles sémantiques que le JSON Schema ne peut pas exprimer :
- relation vers une entité inexistante dans
mvc/entities/; - doublon de table entre deux entités ;
- index pointant vers un champ absent de
fields[]; - relation
many_to_manydéclarée deux fois en inverse ; - collision entre
pivot.fields[]et les noms réservésfrom_key/to_key; - cohérence complète avec les générateurs Forge (
build:model,make:crud).
Les commandes officielles de validation restent :
python forge.py schema:doctor # vérifie l'intégrité du registre de schémas
python forge.py entity:validate # validation sémantique des entités et relations
python forge.py rbac:validate # validation du contrat RBAC (optionnel)
Schémas Forge concernés¶
| Schéma | Rôle |
|---|---|
schemas/entity.schema.json |
structure d'une entité |
schemas/field.schema.json |
structure d'un champ métier |
schemas/relations.schema.json |
structure de relations.json |
schemas/pivot.schema.json |
structure d'une table pivot |
schemas/rbac.schema.json |
structure de mvc/security/rbac.json |
schemas/common.schema.json |
définitions partagées (réutilisées par les autres schémas) |
Les schémas sont autonomes : Forge n'a pas besoin d'Internet pour valider un
projet. Les $id commençant par https://forge-mvc.dev/ sont des identifiants
logiques, pas des URL résolues en ligne.
Compatibilité JSON Schema¶
Les schémas Forge déclarent JSON Schema Draft 2020-12.
Selon la version de VS Code et de son moteur JSON intégré, certaines règles
avancées (comme $dynamicRef ou certains mots-clés d'annotation) peuvent être
plus ou moins bien prises en compte. La validation officielle reste donc
forge entity:validate.
En pratique, les règles de base — types, enum, propriétés requises,
additionalProperties: false — sont bien reconnues par les versions récentes
de VS Code.
Exemple de fichiers couverts¶
La configuration .vscode/settings.json couvre les chemins suivants dans un projet Forge :
| Fichier | Schéma associé |
|---|---|
mvc/entities/article/article.json |
schemas/entity.schema.json |
mvc/entities/user/user.json |
schemas/entity.schema.json |
mvc/entities/media/media.json |
schemas/entity.schema.json |
mvc/entities/relations.json |
schemas/relations.schema.json |
mvc/security/rbac.json |
schemas/rbac.schema.json |
Non couverts automatiquement (utiliser $schema explicite) :
- fichiers JSON hors de
mvc/; - fichiers JSON dans
starters/ouexamples/; schemas/*.schema.jsoneux-mêmes.
Commandes Forge complémentaires¶
VS Code aide à l'édition, mais ne remplace pas les commandes de validation Forge :
| Commande | Ce qu'elle vérifie |
|---|---|
python forge.py schema:doctor |
intégrité du registre de schémas, références locales |
python forge.py entity:validate |
cohérence sémantique des entités et relations |
python forge.py rbac:validate |
contrat RBAC (optionnel) |
python forge.py build:model |
génération SQL et modèles depuis les entités |
Ces commandes vérifient des règles que le JSON Schema ne peut pas exprimer :
- relation vers une entité inexistante dans
mvc/entities/; - doublon de table entre deux entités ;
- collision entre
pivot.fields[]et les noms réservés ; - cohérence métier RBAC (rôles/permissions croisés) ;
- génération effective des artefacts SQL et Python.
Dépannage¶
VS Code ne signale pas d'erreur dans un fichier JSON Forge¶
- Vérifier que le dossier ouvert dans VS Code est la racine du projet Forge
(celui qui contient
mvc/,schemas/,.vscode/). - Vérifier que
.vscode/settings.jsonexiste et contientjson.schemas. - Vérifier que les schémas existent :
schemas/entity.schema.json, etc. →python forge.py schema:doctor - Recharger la fenêtre VS Code :
Ctrl+Shift+P→Developer: Reload Window.
VS Code signale une erreur mais entity:validate ne trouve rien¶
VS Code valide la structure JSON Schema. Certaines erreurs structurelles sont
détectables uniquement par le schéma (ex : clé inconnue, type incorrect).
Si l'erreur est dans une propriété non couverte sémantiquement, elle peut
apparaître dans VS Code mais pas dans entity:validate, ou inversement.
Les deux outils sont complémentaires — utiliser les deux.
Le schéma RBAC n'est pas reconnu dans VS Code¶
Le fichier mvc/security/rbac.json est optionnel. S'il n'existe pas,
VS Code n'a rien à valider. S'il existe et que VS Code ne l'associe pas,
vérifier que le chemin exact est mvc/security/rbac.json
(pas mvc/security/rbac.schema.json ou un autre nom).