klee-contrib / topmodel

Outil de modélisation et générateurs pour divers langages
https://klee-contrib.github.io/topmodel/
MIT License
11 stars 12 forks source link

Génération du schéma de la config via modgen --schema et générateurs personnalisés #249

Closed JabX closed 1 year ago

JabX commented 1 year ago

Fix #240 Fix #189

Une nouvelle commande modgen --schema (ou modgen -s) a été ajoutée pour générer le schéma JSON de configuration du topmodel.config. Il est généré a côté du fichier de configuration en complétant son nom par .schema.json (donc ici topmodel.config.schema.json. Pour l'utiliser dans VSCode, il faut renseigner le mapping à la main dans le settings.json, par exemple :

{
  "yaml.schemas": {
    "samples/generators/angular/topmodel.config.schema.json": "samples/generators/angular/topmodel.config"
  }
}

Il faudrait probablement intégrer à l'extension l'appel à modgen --schema et l'ajout de cette configuration, au moins via une commande manuelle. En l'état même si on fait rien ce n'est pas très grave, il manquera juste l'autocomplétion/validation des configurations de générateurs dans VSCode, puisqu'elles ne sont plus livrées avec l'extension.

Cette évolution permet de localiser le schéma de config de chaque générateur avec chaque générateur, au lieu de tout centraliser dans TopModel.Core (ce qui n'avait pas beaucoup de sens en plus).

De plus, il est également possible de référencer un projet C# contenant un générateur directement dans le fichier de config topmodel, ce qui a été fait dans le sample PHP par exemple :

---
app: topmodel.php.sample.demo
modelRoot: ../../model
lockFileName: php.topmodel.lock
generators:
  - ../../../TopModel.Generator.Php
php:
  - tags:
      - back
    outputDirectory: src
    identity:
      mode: sequence

Les générateurs et la config définis dans ce projet sont ajoutés aux générateurs intégrés à modgen de manière transparente. En particulier, modgen --schema incluera bien la configuration des générateurs personnalisés.

Il est nécessaire que le projet C# ait été build pour que modgen le trouve (on charge les binaires directement). De plus, on publiera TopModel.Generator.Core sur nuget en plus de TopModel.Generator pour qu'il puisse être utilisé en dehors de ce repository (ce qui est un peu le but 😉).

(Le générateur PHP a donc été retiré de modgen pour l'instant (car non testé encore), mais est toujours inclus dans les samples via cette nouvelle fonctionnalité. Il est prévu à terme de l'inclure dans modgen).

JabX commented 1 year ago

J'attire l'attention sur ça :

image

Tous les schémas générés sont identiques, sauf celui du sample PHP puisqu'il référence le générateur PHP en plus des autres. Evidemment, à terme, tous les générateurs seront chargés de la même façon et modgen n'incluera plus aucun générateur, mais il y a plein de questions à résoudre autour du versionning et de l'acquisition des générateurs s'ils ne sont plus packagés avec modgen. C'est pas pour tout de suite quoi 😅