Witam,
Problem jest w tym, że wprowadziłem do PHP kilka własnych bibliotek napisanych w rozszerzeniach php_xxx.dll które umieszczone są jako standardowe biblioteki "extenssion".
Praktycznie w VSCode natychmiast wyłapywane są one jako nieznane funkcje. Ładnie by było, aby jakoś je wprowadzić na listę tych znanych. Ideałem byłoby również to aby pojawiały sie w podpowiedziach IntelliSense.
Ma ktoś jakiś pomysł. Nie wiem czy rozszerzenia IntelliSense korzystają z jakiś list czy baz danych i gdzie one się znajdują by może spróbować pogrzebać, Brakuje jasnych metod wprowadzania własnych podpowiedzi tak jak np można wprowadzać własne fragmenty kodu (snippets).
pozdrawiam
AK.
0
0
musiał byś napisać plugin do vsc.
3
PhpStorm rozwiązuje ten problem poprzez obsługę specjalnego pliku o nazwie .phpstorm.meta.php
- https://www.jetbrains.com/help/phpstorm/ide-advanced-metadata.html - który zdaje się być również wspierany przez vscode-intelephense :-)
3
Rozwiązanie @Patryk27 jest dobre jeśli chodzi o PhpStorm, napisanie pluginu do VS też jest w miarę, ale są to rozwiązania pasujące do jednego IDE.
Jeśli chciałbyś rozwiązanie które pasuje do każdego, IDE, to mógłbyś zrobić coś takiego:
<?php
if (!function_exists('my_function')) {
function my_function(string $arg, int $arg): int {
throw new Exception("My module wasn't loaded properly");
}
}
Ma to 4 zalety:
- Po pierwsze, taką deklarację funkcji zobaczy każde IDE
- Po drugie, jeśli użyjesz tej funkcji, a moduł nie zostanie poprawnie załądowany, dostaniesz elegancki exception
- Po trzecie, możesz zadeklarować syngaturę funkcji 1:1 (argumenty, typy, return type, domyślne argumenty, opcjonalne argumenty, nawet
...varargs
) - Po czwarte, ponieważ takie coś jest napisane w PHP, jeśli kiedykolwiek zmienisz swoje funkcje w module, to wystarczy że zmienisz taki pliczek.
Ma też jedną wadę:
- Trzeba dołączyć ten kod jakoś razem z modułem (ale to też się da obejść, może przez composer? Wtedy Twój dodatek stałby się paczką, i użytkownik nawet nie wiedziałby że korzysta z
.dll
)
PS: Swoją drogą, czemu tak czy tak Twój moduł to nie jest paczka composerowa?
PS2: Chcesz je jakoś dołączać do aplikacji po stronie servera? Bo jeśli tak to moje rozwiązanie odpada.