Pendant ma participation au dernier Code Sprint UI Patterns j'ai eu l'occasion de travailler sur un nouveau module pour répondre aux besoins du projet.
UI Patterns Devel, un sous module de UI Patterns 2.x qui entre autre inclus un validateur Twig qui permet de vérifier la syntaxe des fichiers de template Twig pour des composants Drupal Single-Directory Components.
La tâche de créer un analyseur statique pour Twig a demandé un peu plus de travail que ce que j'avais estimé. Mais cela m'a permis d'en apprendre plus sur les entrailles de Twig internals.
J'ai démarré comme tout programmeur par regarder ce qui avait été fait et je suis tombé ce projet : phpstan-twig-analyis qui m'a servi de point de départ et m'a permis de déterminer une première approche pour charger un template Twig, l'analyser et collecter les erreurs.
L'architecture principale est d'ingérer une source Twig, de la parser pour avoir le NodeTree : $nodeTree = $this->twig->parse($this->twig->tokenize($source));
et d'utiliser NodeTraverser pour parcourir le template en tant qu'objets.
Il m'a suffit ensuite de créer un gestionnaire de règles à appliquer et d'utiliser un collector pour recevoir les messages. Puis une page Drupal et une commande Drush ui-patterns:validate
pour afficher les erreurs.
Au final le plus intéressant à été de définir des règles pour l'usage des variables dans le template. Pour Drupal SDC les variables de chaque template sont décrites dans un fichier Yaml, cela permet de déterminer si une variable est manquante ou n'existe pas dans le template.