W kodzie jednego z moich klientów, widzę wiele odniesień do kwalifikowanej nazwy klasy jako ciąg znaków;PHP Codesniffer zwyczaj zasada: stała :: klasa zamiast napisu
[
'foobar' => 'My\Namespace\Class'
]
Zamiast:
[
'foobar' => My\Namespace\Class::class
]
Przez kilka powodów chcemy dodać regułę PHP CodeSniffer złapać tych ciągów i dodać ostrzeżenie więc ciąg może być refactored do klasy :: stały. Pierwsza część (przechwycenie ciągu znaków) jest łatwa, ale ponieważ wykonujemy statyczną analizę kodu, nie możemy wykonać (na przykład) class_exists ani wyszukać wyników get_declared_classes().
Następną opcją może być analiza samego napisu ([A-Za-z0-9]), ale nie jest to zbyt wiarygodne, ponieważ wiele ciągów będzie pasować, ale nie ma być nazwą klasy.
Inną opcją jest pierwszy „zbierać” wszystkie classnames (na podstawie T_CLASS tokena) i analizować wszystkie sznurki po że na podstawie zebranego wykazu klas. Niezbyt łatwe wdrożenie IMHO, ponieważ CodeSniffer działa na zasadzie pliku.
Ostatnia opcja, o której mógłbym pomyśleć, jest również dość brudna; ponieważ zawsze używamy kompozytora w naszych projektach, możemy wziąć automatyczne ładowanie plików kompozytora i starać się dopasować do map klas i przestrzeni nazw. Również niezbyt niezawodne i czyste.
Ktoś z inną sugestią, o której nie myśleliśmy ?!
Wygląda świetnie, jak daleko się dostałeś? Mogę ci w tym pomóc, ponieważ jest to na mojej liście problemów. –
Niestety, nie poczyniono żadnych postępów. Nie zbadałem jeszcze, ale mogę sobie wyobrazić, że narzędzia do analizy kodu statycznego, takie jak PHPStan, są już w stanie to zrobić. – Arjan
Bez problemu. Zapraszam do obejrzenia lub omówienia tego problemu: https://github.com/Symplify/Symplify/issues/59 Mogę pomóc Ci to zbudować. PHPStan analizuje tylko kod, niczego nie zmienia. –