You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Blade : résoudre les vues vers le fichier réel et relier les contrôleurs #4
Prise en charge (worktree templates, branche fix/blade-view-resolution, empilée sur la branche Twig de #19 : le mécanisme « appel PHP qui rend un template » est commun aux deux et n'est écrit qu'une fois).
Périmètre de fichiers visé :
graphify/extractors/blade.py
graphify/extractors/php_views.py (ajout du moteur Blade : view(), View::make(), response()->view())
tests/test_languages.py ou test dédié, fixtures neutres
Approche : @extends / @include résolus sous resources/views (chemin par défaut de Laravel), lien vers le nœud du fichier réel ; nom dynamique ou espace de noms pkg::vue : aucun lien vers un fichier.
@extends et @include pointent vers le nœud du fichier réel sous resources/views au lieu d'un nœud fantôme layouts/app : sur ClientXCMS, 120 extends et 469 includes désormais liés au bon fichier (0 avant).
Lien contrôleur vers vue renders pour view('...'), View::make('...'), response()->view('...') : 59 liens sur ClientXCMS (0 avant).
Nom de vue dynamique, espace de noms paquet::vue ou vue absente : aucun lien vers un fichier.
graphify/extractors/blade.py : _views_root, resolve_blade_name, add_view_ref (arête marquée target_file, sans nœud fantôme ; une inclusion répétée donne une seule arête).
graphify/extractors/php_views.py : _is_laravel_view_call et moteur blade dans la table des résolveurs, même mécanisme que Twig.
graphify/cache.py : schéma du cache AST 9 vers 10.
Tests : tests/test_blade_extractor.py (2 tests) et tests/fixtures/laravel_views/.
Pourquoi ce choix
Résolution calquée sur FileViewFinder de Laravel (laravel/framework v12.69.2, FileViewFinder.php:43 pour l'ordre des extensions, :149 pour les points changés en /), sous le chemin par défaut resources/views (config/view.php).
Les dossiers ajoutés à l'exécution (thème de ClientXCMS par View::addLocation) ne sont pas devinés : le thème actif n'est pas connu statiquement. Alternative écartée : chercher aussi dans resources/themes/default/views, qui lierait à un thème qui n'est peut-être pas celui en service.
mass-actions/ et mass_actions/ coexistent dans ClientXCMS et donnent le même identifiant : la désambiguïsation les sépare, et le marquage target_file envoie bien chaque @include vers le bon des deux (23 inclusions vérifiées).
Un appel view() en commentaire n'est pas relié, ce qu'une recherche par expression régulière aurait compté à tort (60 attendus par regex, 59 réels).
Activity
alexwrite commentedon Oct 11, 2026
Prise en charge (worktree
templates, branchefix/blade-view-resolution, empilée sur la branche Twig de #19 : le mécanisme « appel PHP qui rend un template » est commun aux deux et n'est écrit qu'une fois).Périmètre de fichiers visé :
graphify/extractors/blade.pygraphify/extractors/php_views.py(ajout du moteur Blade :view(),View::make(),response()->view())tests/test_languages.pyou test dédié, fixtures neutresApproche :
@extends/@includerésolus sousresources/views(chemin par défaut de Laravel), lien vers le nœud du fichier réel ; nom dynamique ou espace de nomspkg::vue: aucun lien vers un fichier.alexwrite commentedon Oct 11, 2026
Fait
@extendset@includepointent vers le nœud du fichier réel sousresources/viewsau lieu d'un nœud fantômelayouts/app: sur ClientXCMS, 120extendset 469includesdésormais liés au bon fichier (0 avant).renderspourview('...'),View::make('...'),response()->view('...'): 59 liens sur ClientXCMS (0 avant).paquet::vueou vue absente : aucun lien vers un fichier.Comment
graphify/extractors/blade.py:_views_root,resolve_blade_name,add_view_ref(arête marquéetarget_file, sans nœud fantôme ; une inclusion répétée donne une seule arête).graphify/extractors/php_views.py:_is_laravel_view_callet moteurbladedans la table des résolveurs, même mécanisme que Twig.graphify/cache.py: schéma du cache AST 9 vers 10.tests/test_blade_extractor.py(2 tests) ettests/fixtures/laravel_views/.Pourquoi ce choix
FileViewFinderde Laravel (laravel/framework v12.69.2,FileViewFinder.php:43pour l'ordre des extensions,:149pour les points changés en/), sous le chemin par défautresources/views(config/view.php).View::addLocation) ne sont pas devinés : le thème actif n'est pas connu statiquement. Alternative écartée : chercher aussi dansresources/themes/default/views, qui lierait à un thème qui n'est peut-être pas celui en service.Apprentissages
mass-actions/etmass_actions/coexistent dans ClientXCMS et donnent le même identifiant : la désambiguïsation les sépare, et le marquagetarget_fileenvoie bien chaque@includevers le bon des deux (23 inclusions vérifiées).view()en commentaire n'est pas relié, ce qu'une recherche par expression régulière aurait compté à tort (60 attendus par regex, 59 réels).Faiblesses restantes
view()de ClientXCMS visent une vue présente seulement dans le thème : pas de lien, par construction. Suivi : Vues : chemins ajoutés à l'exécution et Twig configuré dans twig.yaml non modélisés #38.@includeIf,@includeWhen,@each,@component,<x-...>non extraits : Blade : extraire @includeIf, @includeWhen, @each, @component et <x-...> #37.View::makeest reconnu par le nom courtView: une classe maison homonyme serait prise, bornée par l'exigence d'un fichier de vue existant.affectedne suit pasincludesnirenders: affected : suivre les liens includes et renders des templates #36.Quality
7552 passed, 14 skipped(suite complète)0 errorssurblade.pyetphp_views.pyruff check .sans erreurMerge: Blade views resolve to real files, controllers render them (#4)