PhpStorm 2022.3: PHP 8.2


Niniejsze wydanie zawiera podgląd nowego UI, pełne wsparcie PHP 8.2, Redis dla narzędzi baz danych, Code Vision dla PHP, szybki podgląd, walidacja konfiguracji Xdebug , wsparcie dla ParaTest, tryb czytelnika w PHPDoc, oraz wiele więcej.

Nowe UI ( Podgląd )

Całkowicie nowe UI jest już dostępne do wypróbowania dla wszystkich użytkowników. Domyślnie jest ono wyłączone, ponieważ wymaga jeszcze doszlifowania. Przełączyć się można w Ustawienia/Preferencje | Wygląd & Zachowanie | Podgląd nowego UI.

Nowe UI pozwala na wykonywanie praktycznie identycznych zadań, w międzyczasie oferując lepszą czytelność oraz porządek.

Poprawy pracy

W PhpStorm 2022.3 znaleźć można wiele popraw dotyczących wyglądu, oro te najważniejsze:

Code Vision

Najważniejsze informacje dotyczące symboli PHP są teraz wyświetlane tuż przy kodzie w edytorze:

  • Liczba użyć dla wybranych klas, interfejsów, metod czy funkcji. Poznanie informacji nie wymaga już kliknięcia ikony.
  • Liczba implementacji interfejsu.
  • Informacja z Git dotycząca osoby która wprowadziła najwięcej zmian w fragment kodu. Może ona być jego właścicielem, lub najbardziej doświadczona w jego kwestii.

Lokalizacja tekstu CodeVision może być skonfigurowana, wyświetlając informacje nad, lub na prawo od fragmentu kodu. Aby to zmienić wystarczy kliknąć prawym przyciskiem myszy na tekst Code Vision i wybrać opcję Konfiguruj. Wtedy użytkownik zostaje przeniesiony do Preferencje/Ustawienia | Edytor | Podpowiedzi w linii | Code Vision.

Podpowiedzi Code Vision mogą być również wyłączone, poprzez kliknięcie prawym przyciskiem myszy na jednej z nich, a następnie wybranie Ukryj wszystkie podpowiedzi Code Vision.

Funkcje Code Vision w PhpStorm 2022.3 działają również dla plików JavaScript oraz TypeScript.

Podgląd szybkich popraw ( Quick-fix )

Niektóre problemy z kodem mogą zostać naprawione poprzez wciśnięcie kombinacji Alt + Enter. Teraz proponowane poprawy można podejrzeć przed zaakceptowaniem, umożliwiając sprawdzenie w jaki sposób kod będzie zmieniony po zaaplikowaniu zmian.

Podgląd pojawia się po otwarciu listy z dostępnymi akcjami oraz najechaniu na wybraną z nich.

Podgląd zostanie wyłączony / włączony po wciśnięciu klawiszy F1 / Ctrl+Q kiedy lista akcji jest otwarta.

Tryb czytelnika dla bloków PHPDoc

W trakcie pisania kodu, ważna jest jego czytelność. Teraz można zmieniać wygląd bloków PHPDoc, głównie dzięki opcji umożliwiającej ich lepszy wygląd lub wsparcie dla formatowania HTML.

Aby włączyć nowy podgląd, wystarczy użyć ikony rynny przy dowolnym bloku PHPDoc. W celu włączenia renderowania dla wszystkich bloków PHPDoc, należy użyć prawego przycisku myszy nad ikoną rynny i wybrać opcję Renderuj wszystkie komentarze Doc.

Poprawiona szybka dokumentacja

Po naciśnięciu F1 / Ctrl+Q na dowolnej funkcji, klasie czy metodzie, PhpStorm wyświetli jej dokumentację w edytorze.

To okno zostało znacząco przerobione. Nie jest już wymagane przechodzenie do przeglądarki i szukanie dokumentacji, wszystko jest już dostępne nad kodem.

Podgląd formatu Datetime

Formaty dat które są przekazywane do date() lub podobnych funkcji mogą być mylące, oraz bardziej skomplikowane niż np. d-m-Y. Chociaż nawet w tym wypadku, dane wyjściowe mogą być niepewne. Zostało to uwzględnione w PhpStorm 2022.3, gdzie wystarczy najechać na tekst zawierający format daty, a IDE wyświetli przykładową datę zgodną z danym formatowaniem.

Podgląd dat współpracuje z podglądem szybkich popraw, dzięki czemu dostępne są m. in. opcje wyświetlające przykładową datę w tym samym oknie.

Podczas edycji tekstu z formatowaniem, automatyczne dokańczanie będzie sugerowało wszystkie znaki rozpoznawane jako parametry formatowania.

PHP 8.2

PhpStorm 2022.3 posiada już pełne wsparcie dla PHP 8.2. Większość zmian w IDE może zostać niezauważona, więc poniżej zostaną przedstawione ważniejsze funkcje.

Mogą one zostać wykorzystane poprzez zmianę języka projektu no 8.2, poprzez pasek narzędzi lub edycję composer.json.

Klasy tylko do odczytu

Klasa tylko do odczytu ( readonly ), jest to szybki sposób na zdefiniowanie klasy która posiada wyłącznie cechy do odczytu. Mogą one zostać użyte dla większej integralności kodu.

Dla klas do odczytu, PhpStorm umożliwia:

  • Szybką poprawę zmieniającą klasę z wartościami jako tylko do odczytu, w całą klasą jako do odczytu.
  • Inspekcję sprawdzającą czy klasy tylko do odczytu mają na pewno pochodne również jedynie do odczytu.
  • Możliwość wykrycia zbędnych właściwości w klasach tylko do odczytu.
  • Wykrycie użycia niedozwolonych statycznych czy dynamicznych wartości w klasach tylko do odczytu.

Przestarzałe cechy dynamiczne

Dostanie się do nieistniejących własności w PHP 8.2 spowoduje wywołanie błędu o przestarzałym kodzie. PhpStorm zaznacza te użycia i zapewnia szybką poprawę dla błędów, poprzez dodanie własności, lub użycie atrybutu #[AllowDynamicProperties].

Poprawy Typesystem

PHP 8.2 dodaje wsparcie dla rozerwanych normalnych typów, takich jak pojedyncze null, true czy false. Zostały one już objęte wsparciem w PhpStorm 2022.3.

Wrażliwe własności

Wrażliwe własności mogą być oznaczone przy pomocy atrybutu [SensitiveParameter], aby się upewnić że wartości te nie będą nigdy wyświetlone w śladach stosu. PhpStorm również zapewnia dla nich pełną obsługę.

Więcej prze-starzeń

PHP 8.2 wprowadza więcej deprecjacji, a PHPStorm zapewnia dla nich wsparcie przy pomocy nowych inspekcji czy poprawek dla kodu.

Przestarzała interpolacja tekstu ${

Gdy trzeba użyć zmiennej w tekście, istnieją dwa sposoby na jej umieszczenie: "$foo" oraz "{$foo}".

Przed PHP 8.2 był również dostępny zapis: "${$foo}". Jest on jeszcze dostępny, ale został oznaczony jako przestarzały i zostanie całkowicie usunięty w przyszłości.

PhpStorm podświetli wystąpienia ostatniego zapisu, a użycie Alt+Enter zapewni szybką poprawkę która zaktualizuje kod.

Przestarzałe częściowo wspierane wywoływane

W PHP 8.2, część sposobów na wywoływanie funkcji stało się przestarzała. Aby poprawić kod, należy użyć Alt+Enter dla szybkich popraw.

PhpStorm może przeskanować całą bazę kodu naraz i znaleźć wszystkie możliwe wystąpienia konkretnych błędów. W Kod | Analizuj kod | Uruchom Inspekcję po nazwie. Następnie, wystarczy wyszukać pożądaną inspekcję, przykładowo „właściwości dynamiczne”, i PhpStorm zajmie się resztą.

Debugowanie

W przypadku kiedy jest problem z konfiguracją Xdebug, oto kilka możliwych akcji, które są teraz dostępne w PhpStorm.

Walidacja wyjścia phpinfo()

Po dodaniu phpinfo() do kodu PHP można skopiować dane wyjściowe z przeglądarki. Wkleić je należy do okna dialogowego w Uruchom / Walidacja Debugowania Serwera Web.

PhpStorm zanalizuje konfigurację serwera i powiadomi o ewentualnych problemach.

Sprawdzenie konfiguracji serwera przy pomocy skryptu

Jeżeli phpinfo() nie pomogło, zawsze można skorzystać z skryptu walidacyjnego PhpStorm znajdującego się na serwerze.

Debugowanie zwracanej wartości z Xdebug

Xdebug 3.2 posiada dodatkowy krok debugowania zwrot z funkcji który umożliwia inspekcję wartości zwracanej.

PhpStoerm 2022.3 wspiera tą funkcję, i aby nią wywołać wystarczy nacisnąć Wejdź w kiedy jest się na ostatniej instrukcji funkcji. W rezultacie, dodatkowa zmienna zostanie umieszczona w Obserwowanych.

Bazy danych: wsparcie Redis

Wczesne wsparcie dla Redis zostało zaimplementowane w PhpStorm 2022.3.

Integracje narzędzi PHP

Równoległe testy przy użyciu ParaTest

Długo oczekiwane wsparcie dla równoległego testowania w PhpStorm jest już dostępne. Aby z niego skorzystać i uruchamiać równolegle testy najpierw należy sprawdzić opcję Użyj ParaTest w konfiguracji uruchamiania testów, oraz ostatecznie sprawdzić czy ścieżka do pliku binarnego ParaTest jest poprawna.

Zwykle, jeżeli ParaTest jest dodany w pliku composer.json, ścieżka powinna wyglądać mniej więcej następująco:./vendor/bin/paratest_for_phpstorm.

Uruchamianie pojedynczych zbiorów danych od dostawców danych PHPUnit

Przy pomocy dostawców danych PHPUnit, można szybko uruchomić całą serię testów przy użyciu zróżnicowanych danych testowych.

Może to zaoszczędzić czas, kiedy uruchamiany jest tylko jeden zestaw danych od dostawcy podczas trwania testów.

Test z określonymi danymi może zostać uruchomiony przy pomocy ikony rynny w edytorze.

Wykorzystanie zewnętrznych formatów dla PHP

Od teraz jest możliwe korzystanie z zewnętrznych formatów w Preferencjach | PHP | Narzędzia jakości. W tym celu dostępne są chociażby FriendsOfPHP/PHP-CS-Fixer czy squizlabs/PHP_CodeSniffer. Oczywiście domyślne formatowanie PhpStorm jest nadal dostępne.

Integracja Robo

Popularne narzędzie uruchamiające zadania w PHP zyskało rozszerzone wsparcie w postaci:

  • Specjalne okno zadań teraz jest dostępne jeżeli klasa Robo jest obecna w projekcie.
  • Uruchomienie konfiguracji wykonywania zadań Robo jest możliwe w menu kontekstowym i wywoływane z metody Robo.
  • Każda publiczna metoda w klasie Robo posiada ikonę w rynnie z odpowiednimi konfiguracjami.

Wsparcie Prophecy

Jeżeli w trakcie testów wykorzystywany jest przykładowy framework Prophecy, praca z nim w PhpStorm będzie łatwiejsza.

Uzupełnianie kodu jest teraz dostępne po wywołaniu metod prophesize() oraz reveal().

Poprawy dla WordPress

Pisanie dodatków oraz motywów dla, czy zwykłe dostosowywanie, stron WordPress stało się właśnie trochę łatwiejsze dzięki temu wydaniu PhpStorm.

Dodano wsparcie dla get_template_part(), get_header(), get_sidebar(), oraz get_footer(). Po kliknięciu na dowolną z nich zostanie się przeniesionym do odpowiedniego pliku.

Ścieżki zawierające funkcje plugins_url() lub używające get_stylesheet_*() są również rozpoznawane, oraz po kliknięciu przenoszą do źródła.

Poprawy dla Blade

Zamknięcie dyrektyw będzie teraz automatycznie dodawane w miejscach gdzie jest to możliwe.

Poprawiono również wykrywanie ( nie ) używanych funkcji w szablonie blade. Powinno to zmniejszyć liczbę niepoprawnie zaznaczonych takich przypadków.

Inne zmiany w PHP

asysta ML – sortowanie list sfinalizowania w PHP

W wersji 2019.3 zostało dodane uzupełnianie kodu oparte na nauce maszynowej ( Machine-learning: ML ). Poprawia ono automatyczne uzupełnianie kody poprzez zmianę pozycji elementów w oknie dokańczania, tak że najważniejsze elementy są wyżej.

Było to domyślnie wyłączone, ale okazało się że wspomaga to dokańczanie. Według badań JetBrains użytkownicy wybierają najwyższą pozycję z listy rozwijanej 65% razy. Z uzupełnianiem opartym na ML, liczba ta wzrasta do 75%. Z tego powodu, opcja ta teraz jest domyślnie włączona.

Nadal można ją wyłączyć, lub zmienić jej ustawienia w Preferencje/Ustawienia | Edytor | Generalne | Dokańczanie Kodu.

Aktualizacja nazwy pliku po zmianie nazwy klasy

Po zmianie nazwy klasy w pliku, automatycznie zostanie też zmieniona nazwa pliku w którym klasa się znajduje.

Przeniesienie stałych do enum

PHP 8.1 wprowadził enum jako prostsza alternatywa dla stałych w klasach przechowujących stałe wartości.

Aby stworzyć taki element, należy użyć refaktoryzacji Przenieś członków na stałych klasy. W oknie refaktoryzacji, wystarczy wybrać Przenieś jako przypadek enum.

PhpStorm stworzy element enum, znajdzie oraz zamieni wszystkie odwołania jego dotyczące.

Akcja ta jest dostępna tylko w projektach z językiem PHP w wersji co najmniej 8.1.

Wsparcie dla iterowania po kształtach tablic list

Wsparcie dla komentarzy o kształcie list zostało dodane w PhpStorm 2021.2, a następnie w PhpStorm 2022.1 zostało ono poszerzone o wieloliniowy oraz zagnieżdżony ich zapis.

W tym wydaniu zostało dodane pełne uzupełnianie dla elementów kształtu listy w pętlach.

Przenoszenie klas poprzez przeciąganie – poprawy

Refaktoryzacja klas poprzez przeciąganie została dodana już w wersji 2021.3. Wcześniej działało to wyłącznie w projektach z odpowiednio skonfigurowaną ścieżką root dla źródeł, według PSR-0/PSR-4.

Teraz ten wymóg został usunięty, i nawet projekty które nie mają wymaganych ustawień, umożliwiają przeciąganie klas – PhpStorm sam dokona wymaganych weryfikacji, oraz wykryje źródło do refaktoryzacji.

W tym wydaniu dodatkowo poprawiono algorytmy identyfikujące namespace pliku, więc w trakcie przeciągania okno dialogowe z zapytaniem o namespace może nawet nie zostać wyświetlone. Zamiast tego wszystkie pliki będą przeniesione z zaktualizowanymi przestrzeniami oraz referencjami.

Wstrzykiwanie języka JSON w tekst Nowdoc/Heredoc przy pomocy tagów JSON

Dotychczas w celu zmiany podświetlania kodu w liniach Nowdoc i Heredoc można było użyć <<<SQL token or even <<<PHP. Teraz można również używać tokenu JSON.

Nowe rozwiązanie Synchronizacja Ustawień

Dwa rozwiązania ( Synchronizacja Ustawień IDE oraz Repozytorium Ustawień ) zostały połączone w jedno – Synchronizacja Ustawień. Umożliwia ono na synchronizację ustawień pomiędzy różnymi urządzeniami czy IDE.

Nowe rozwiązanie można włączyć w Ustawienia / Preferencje | Synchronizacja ustawień | Włącz synchronizację ustawień.

Docker

Wykonywalny plik Docker z WSL bez Docker Desktop

Można ustawić typ połączenia WSL w Ustawienia / Preferencje | Kompilacja, wykonanie, wdrożenie | Doker.

Nowa akcja kontekstowa: Ściągnij obraz

Wybranie akcji kontekstowych (Alt+Enter) na podświetlonej nazwie obrazu umożliwi użycie opcji Pull Docker image, pobierze ona wymagany obraz bez uruchamiania go z pliku Dockerfile, docker-compose.yml, a nawet z testów wykorzystujących kontenery testowe.

Wsparcie dla typu pliku .dockerignore

Można teraz korzystać z wyróżniania i uzupełniania w plikach .dockerignore.

Obsługa formatu heredoc w Dockerfiles

Można teraz używać skryptów wielowierszowych bezpośrednio w plikach Docker.

Połączenia platformy Docker z kontekstów platformy Docker

Teraz można skonfigurować dodatkowe połączenia Docker przy użyciu kontekstów Docker, wywołując menu kontekstowe Dodaj usługę w widoku Usługi i wybierając Połączenia Docker z kontekstów Docker.

Klient HTTP

Formatowanie długich żądań w kliencie HTTP

Klient HTTP zapewnia teraz lepsze opcje formatowania żądań z długimi adresami URL. Można także użyć akcji kontekstowej Umieść parametry zapytania w osobnych wierszach, aby podzielić zapytanie na mniejsze fragmenty w różnych wierszach.

Skrypty żądań wstępnych

Klient HTTP obsługuje teraz bloki skryptów, które są wykonywane przed żądaniami. Można wygenerować pewne dane przed wykonaniem żądania i przekazać je do kolejnego żądania za pomocą zmiennych.

Nowe interfejsy API dla programów obsługi JavaScript

PhpStorm udostępnia teraz API сrypto, dzięki czemu jest w stanie obliczyć wartości zaszyfrowane md5 lub sha1 dla żądania HTTP.

Dostępne są teraz dodatkowe losowe funkcje, co jest wygodne do szybkiego testowania API.

Więcej ulepszeń jakości

Możliwość dokowania okien narzędzi do pływających kart edytora

Aby ułatwić aranżację przestrzeni roboczej i interakcję z PhpStorm przy użyciu wielu monitorów, zaimplementowano opcję przeciągania okien narzędzi poza główne okno i dokowania ich do pływających kart edytora.

Ulepszone zakładki

W wersji 2022.3 wprowadzono kilka ulepszeń interfejsu użytkownika funkcji Zakładki, aby dostroić jej funkcjonalność po połączeniu instancji Ulubione i Zakładki w wersji 2021.3.
Po raz kolejny możliwe jest tworzenie zakładek do plików z zakładek edytora. Kliknięcie karty prawym przyciskiem myszy, wywoła menu kontekstowe i umożliwi wybranie Zakładki.

Ponadto można dodać wszystkie pliki we wszystkich otwartych kartach do zakładek. Można też wywołać to samo menu kontekstowe i wybrać opcję Zaznacz otwarte karty lub wywołać tę akcję za pomocą odpowiedniej ikony (trzy kropki) znajdującej się po prawej stronie panelu kart edytora. IDE umieści wszystkie otwarte karty na nowej liście zakładek, które można nazwać według własnego uznania.

Jednowierszowe kopiowanie/wycinanie/wklejanie

Usprawniono edycję w IDE, dodając opcję kopiowania ⌘C / Ctrl+C i wycinania ⌘X / Ctrl+X pojedynczych wierszy kodu w edytorze bez ich zaznaczania. Akcja wklejania ⌘V / Ctrl+V następnie dodaje zawartość schowka powyżej bieżącej linii. Nadal można używać starego zachowania kopiowania i wycinania, zaznaczając żądany tekst, a gdy zostanie użyta akcja wklejania, zawartość zostanie dodana w pozycji kursora.

Można wyłączyć tę opcję w dowolnym momencie i używać wyłącznie starego zachowania, przechodząc do Preferencje / Ustawienia | Ustawienia zaawansowane | Edytor i wybranie opcji Nie kopiuj/wytnij bieżącego wiersza przy wywoływaniu akcji Kopiuj lub Wytnij bez zaznaczenia oraz Nie zaznaczaj skopiowanej linii po wywołaniu akcji Kopiuj bez zaznaczenia.