[ 'name' => 'Layout NetGescon Standard', 'description' => 'Le view Blade devono estendere admin.layouts.netgescon', 'pattern' => "/@extends\(['\"]admin\\.layouts\\.netgescon['\"]\)/m", 'suggestion' => "@extends('admin.layouts.netgescon')", 'severity' => 'error', 'mode' => 'require', 'fileTypes' => ['blade'], // Escludi frammenti inclusi (partials/tabs) e componenti Blade 'excludeContains' => [ 'resources/views/admin/gescon-import/partials', 'resources/views/admin/gescon-import/tabs', 'resources/views/components/menu', 'resources/views/components/', 'resources/views/admin/documenti/print-list.blade.php', ], ], // Vietato l'uso del vecchio layout 'layout_forbidden_app' => [ 'name' => 'Layout Obsoleto (layouts.app)', 'description' => 'Evita l\'uso del vecchio layout layouts.app', 'pattern' => "/@extends\(['\"]layouts\\.app['\"]\)/m", 'suggestion' => "Sostituisci con @extends('admin.layouts.netgescon')", 'severity' => 'error', 'mode' => 'prohibit', 'fileTypes' => ['blade'], ], 'bootstrap_classes' => [ 'name' => 'Classi Bootstrap/Tailwind Obsolete', 'description' => 'Rileva usage di classi Bootstrap o Tailwind non allineate allo stile NetGescon', 'pattern' => '/(' . '(? 'Usare classi NetGescon: netgescon-btn, netgescon-card, netgescon-text, ecc.', 'severity' => 'warning', 'mode' => 'prohibit', 'fileTypes' => ['blade'], 'excludeContains' => [ 'resources/views/components/menu', ], ], 'netgescon_components' => [ 'name' => 'Componenti NetGescon', 'description' => 'Rileva uso dei componenti NetGescon standard (informativo)', 'pattern' => '/(netgescon-btn|netgescon-card|netgescon-title|netgescon-text|netgescon-input)/m', 'suggestion' => 'Componenti NetGescon rilevati', 'severity' => 'info', 'mode' => 'detect', 'fileTypes' => ['blade'], ], 'controller_namespace' => [ 'name' => 'Namespace Controller', 'description' => 'I controller devono avere un namespace valido', 'pattern' => '/namespace\\s+App\\\\Http\\\\Controllers(\\\\[A-Za-z]+)?;/', 'suggestion' => 'namespace App\\Http\\Controllers\\Admin; (per i controller admin)', 'severity' => 'error', 'mode' => 'require', 'fileTypes' => ['php'], 'pathContains' => ['app/Http/Controllers'], ], 'model_relationships' => [ 'name' => 'Relazioni Eloquent', 'description' => 'Rileva la definizione delle relazioni Eloquent (informativo)', 'pattern' => '/(belongsTo|hasMany|hasOne|belongsToMany)\s*\(\s*[\'\"][A-Z]/m', 'suggestion' => 'Relazioni Eloquent definite correttamente', 'severity' => 'info', 'mode' => 'detect', 'fileTypes' => ['php'], ], 'deprecated_helpers' => [ 'name' => 'Helper Deprecati', 'description' => 'Rileva helper Laravel deprecati (array_get, array_set, str_is, starts_with, ends_with)', 'pattern' => '/\\b(array_get|array_set|str_is|starts_with|ends_with)\s*\(/m', 'suggestion' => 'Usare data_get(), Arr::set(), Str::is(), Str::startsWith(), Str::endsWith() o funzioni PHP 8', 'severity' => 'warning', 'mode' => 'prohibit', 'fileTypes' => ['php'], ], 'security_issues' => [ 'name' => 'Problemi di Sicurezza', 'description' => 'Rileva accesso diretto a superglobali o SQL non parametrizzato', 'pattern' => '/(\$_GET|\$_POST|\$_REQUEST|DB::raw\s*\(\s*[\'\"][^\'\"]*(SELECT|INSERT|UPDATE|DELETE))/im', 'suggestion' => 'Usare Request validation e Query Builder/parametri', 'severity' => 'critical', 'mode' => 'prohibit', 'fileTypes' => ['php'], ], 'migration_standards' => [ 'name' => 'Standard Migration', 'description' => 'Verifica uso delle API Laravel Migration (informativo)', 'pattern' => '/(Schema::create|Schema::table|Schema::dropIfExists)/m', 'suggestion' => 'Uso corretto delle Migration rilevato', 'severity' => 'info', 'mode' => 'detect', 'fileTypes' => ['php'], 'pathContains' => ['database/migrations'], ], // Debug Blade: bilanciamento @section/@endsection 'blade_sections_balance' => [ 'name' => 'Bilanciamento Sezioni Blade', 'description' => 'Ogni @section deve avere un @endsection corrispondente', 'pattern' => '/@section\b|@endsection\b/m', 'suggestion' => 'Aggiungi o rimuovi le direttive per bilanciare le sezioni', 'severity' => 'error', 'mode' => 'detect', 'fileTypes' => ['blade'], ], // Debug Blade: div bilanciati 'unbalanced_divs' => [ 'name' => 'Div non bilanciati', 'description' => 'Numero di
aperti non corrisponde ai
chiusi', 'pattern' => '//im', 'balanceTag' => 'div', 'suggestion' => 'Verifica la struttura dei contenitori e chiudi tutti i div', 'severity' => 'error', 'mode' => 'detect', 'fileTypes' => ['blade'], ], 'unbalanced_navs' => [ 'name' => 'Nav non bilanciati', 'description' => 'Numero di chiusi', 'pattern' => '//im', 'balanceTag' => 'nav', 'suggestion' => 'Verifica che