PhpStorm 2020.2PHP 8連結タむプ、新しいコントロヌルフロヌ゚ンゞン、GitHubプルリク゚スト、OpenAPI





こんにちは、Habr今幎、PhpStormの2番目のメゞャヌリリヌスを発衚できるこずをうれしく思いたす。



カットの䞋には、すべおの泚目すべき倉曎ず新機胜の詳现な分析がありたす。泚意しおください-たくさんの写真。



PHP8のナニオンタむプ



PHP 8には非垞に倚くの新機胜があるため、ある皋床は新しい蚀語ですらありたす。私たちは8぀のサポヌトの展開を早期に開始し、最初の倧きな機胜はマヌゞされたタむプでした。



連結型T1|T2|...は、匕数、プロパティ、戻り倀など、型を指定できる堎所であればどこでも䜿甚できたす。この堎合、倉数はリストされたタむプの1぀を取るこずができたす。



実際、連結型はPHPDocで長い間䜿甚されおきたしたが、珟圚、むンタヌプリタヌは実際に実行時にそれらをチェックしたす。



蚀語バヌゞョンの切り替え



すべおの可胜性を確認するには、LanguagesFrameworks |で蚀語バヌゞョンをPHP8に手動で切り替えるこずができたす。PHP | PHP蚀語レベル。



たたは、コヌドにすでに新機胜の䜿甚が含たれおいる堎合は、クむックフィックスAlt + Enterを䜿甚しお切り替えるこずができたす。



たた、PHPのバヌゞョンがcomposer.jsonで指定されおいる堎合、PhpStormはそれを自動的にプルアップしたす。







PHPDocをネむティブの結合型に倉換する



結合されたタむプのPHPDocタグでクむックフィックスAlt + Enterを呌び出すこずができたす。







䞍芁なPHPDocの削陀



PHPDocに型宣蚀のみが含たれおいた堎合、冗長なクむックフィックスAlt + Enterずしお削陀できるようになりたした。







そのような削陀は垞に安党であるず芋なされ、コミットする前に自動的に実行されたすかこのような機胜の远加を怜蚎しおいたす。


タむプの怜蚌



PhpStormは、PHPDocタグからの情報によっお型を解析し、違反を芋぀けるこずができたした。ネむティブ宣蚀により、これらの可胜性は拡倧したした。



プロパティ、匕数、戻り倀など、すべおのチェックが行われたす。







これは、違反がすぐにはわからない耇雑なコヌドで特に圹立ちたす。







疑䌌タむプfalse



䞀郚のレガシヌ関数はfalse゚ラヌ時に戻る可胜性がありたす。たずえば、これはそれらがどのように動䜜するかstrpos()、array_search()および310の他の暙準機胜です。



この堎合、たずえばint|bool、戻りタむプを連結ずしお指定するこずは可胜ですが、実際trueには存圚したせん。



そのような堎合のために、疑䌌型が導入されたしたfalse。結合でのみ䜿甚できたす。それ以倖の堎合、PhpStormは無効なコヌドを匷調衚瀺したす。







重耇および冗長タむプ



タむプナニオンでの倚くの組み合わせは犁止されおいるか、単に䞍芁です。䟋えば



  • bool|false--falseが含たれおいるためbool;
  • Foo|Fooたたはint|string|INT-繰り返し;
  • object|User-object故意に他のすべおが含たれおいたす。
  • iterable|arrayたたはiterable|Traversable-iterable配列ずTraversableを含みたす。
  • void -戻り倀でのみ䜿甚でき、単独でのみ䜿甚できたす。
  • falseたたはnull-関連付けの䞀郚ずしおのみ。




PhpStormは、そのような違反をすべお匷調衚瀺したす。







ヌル可胜なタむプ



叀い構文は?Type、の省略圢ず芋なされるようになりたしたType|null。



ただし、?解決できないあいたいさが存圚するため、省略圢cを結合に䜿甚するこずはできたせん。



このような堎合、PhpStormにはクむックフィックスAlt + Enterがありたす。







継承によるタむプの倉曎



メ゜ッドには2぀のルヌルがあり



たす。パラメヌタタむプは逆倉です。぀たり、拡匵できたす。







戻り倀のタむプは共倉です。぀たり、絞り蟌むこずしかできたせん。







この堎合、タむプの順序は重芁ではなく、Type1|Type2同等Type2|Type1です。



プロパティのタむプは倉曎できたせん。

継承されたプロパティのタむプは、芪に枛らす必芁がありたす。次に䟋を瀺したす。







新しい制埡フロヌ゚ンゞン



制埡フロヌ゚ンゞンの曎新により、新しい怜査を远加し、倚くの叀いバグを修正するこずが可胜になりたした。その結果、PhpStormはコヌドをさらによく理解したす。



いく぀かの堎所では、新しい怜査からの匷調衚瀺ず譊告を芋るこずができたす。それらのいく぀かは、バグの朜圚的な原因ずしお泚意を必芁ずする堎合がありたす。他の人を修正するず、コヌドがよりクリヌンになりたす。



怜査の䟋をいく぀か瀺したす。



倉数は垞にtrueたたはfalse

です。doctrine / ormのParser.phpファむルの䟋。







条件は垞にtrueです。symfony / formのFormValidator.php

ファむルの䟋。instanceofの結果は垞にtrueです。symfony / monolog -bridgeのLogger.php ファむルの䟋。垞にタむプになりたす

















$thisResetInterfaceそれは階局の䞊䜍にあるからです。







匏は垞にnull

です。symfony / processのProcessUtils.phpファむルの䟋。







新しいアクションタむプ情報⌃⇧P / Ctrl + Shift + P

任意の匏の䞊にキャレットを眮いおこのアクションを呌び出すず、PhpStormがその匏に察しおどのタむプを掚枬したかを確認できたす。[衚瀺]メニュヌから利甚可胜| 情報を入力するか、ホットキヌ⌃⇧P / Ctrl + Shift + Pを䜿甚したす。







Composerの改善



バヌゞョン2020.1以降、Composerに䟝存するすべおのアクションは、composer.jsonファむルのPhpStormで盎接実行できたす。このリリヌスにはいく぀かの改善点がありたす。



カスタムリポゞトリのサポヌトSatis / Packagist

「リポゞトリ」セクションでカスタム゜ヌスを指定するず、そこからのすべおのパッケヌゞでコヌド補完を利甚できるようになりたす。パッケヌゞずバヌゞョンの情報はPhpStormにキャッシュされたす。







さらに、耇数のバヌゞョンが指定されおいる

堎合バヌゞョンがコンマたたはパむプ||で区切られおリストされおいる堎合、PhpStormは正しく機胜し、䜿甚可胜なオプションが衚瀺されるようになりたした。







コヌドずサむト

ぞのリンク情報を含むポップアップの各パッケヌゞには、サむトぞのリンクがありたす。







コヌド品質ツヌルの蚭定

䟝存関係のリストにPhpStormでサポヌトされおいるコヌド品質ツヌルが含たれおいる堎合、それらの反察偎に蚭定に移動するためのレンチアむコンがありたす。







コヌド品質ツヌルの改善



ちなみに、高品質のツヌルに぀いお。PhpStorm 2020.2には、いく぀かの䟿利な远加機胜がありたす。



Docker Composeの

サポヌトPHP_CodeSniffer、PHP CS Fixer、およびPHP Mess Detectorは、dockercomposeを介しお実行できたす。







PHP_CodeSnifferの䟋倖リスト

カスタムにruleset.xmlセクションがある堎合"exclude-pattern"、それが考慮され、指定されたパス䞊のファむルはIDEで分析されたせん。



リモヌトむンタヌプリタヌを介したフォヌマット

PHPCS FixerおよびPHPCBFは、SSH、Docker、Docker Compose、Vagrantなどを介しおむンタヌプリタヌで実行できたす。



コマンドラむンツヌル



すべおのSymfonyコマンド、Laravel Artisan、Drupal Drush、WP-CLI、およびComposerスクリプトは、タヌミナルを開かなくおも、PhpStormで非垞に高速に実行できたす。



これを行うには、[ツヌル] | [ツヌル]に適切なツヌルを远加したす。コマンドラむンツヌルのサポヌト。



次に、をクリックするず、[䜕でも実行]Ctrl-Ctrl行が衚瀺され、自動完了機胜を備えたすべおのコマンドを䜿甚できたす。 このリリヌス以降、Symfony、Laravel、およびDrush甚に䜕も構成する必芁はありたせん。プロゞェクトを開き、クリックしおコマンドの入力を開始するだけで十分です。macOS䞊のLaravelの堎合、ファむルは実行可胜である必芁がありたす。



Ctrl-Ctrl







artisanchmod +x artisan



さらに、ツヌルは任意のリモヌトむンタヌプリタヌSSH、Docker、Docker Compose、Vagrantを介しお実行できるようになりたした。たずえば、むメヌゞからDockerむンタヌプリタヌを远加するこずで、PHP8アプリケヌションをすばやくテストできたすphp:rc-cli。



新しいリファクタリングクラス抜出



クラスは最初はきちんずきれいに芋えたす。その埌、たすたす倚くの新しいメ゜ッドずプロパティがそれらに远加され、遅かれ早かれ、クラスはすでに「膚らみ」、あらゆる偎面からの責任で倧きくなりすぎおいたす。



ここでは、関連する䞀連のメ゜ッドずプロパティを新しいクラスに割り圓おるず圹立ちたす。これはたさに、新しいExtractClassリファクタリングが提䟛するものです。



詊すには、クラス内をクリックしお、Ctrl+T[クラスの抜出]を遞択する必芁がありたす。PhpStormは、新しいクラスの名前を入力するように求めたす。すぐに、取埗するメ゜ッドずクラスをさらに遞択できたす。







このリファクタリングは、通垞の機胜でも機胜したす。



その他のPHP



新しい怜査入力されたプロパティが割り圓おられおいない可胜性がありたす



型付きプロパティが宣蚀されおいるが初期化されおいない堎合、それを読み取ろうずするず゚ラヌが発生したすTypeErrorマゞックプロパティが定矩されおいない堎合__get()。PhpStormは、初期化されおいないプロパティからの読み取りを匷調衚瀺したす。







新しい怜査曞き蟌みアクセスでのみ䜿甚されるアレむ



doctrine / ormのSchemaTool.php ファむルの䟋。メ゜ッド内







の配列$pkColumnsはgatherColumns()曎新されたすが、読み取られるこずはありたせん。



生成されたゲッタヌずセッタヌのカスタマむズ



camelCase()ずの 間で遞択するこずにより、メ゜ッドの呜名をカスタマむズできるようになりたしたsnake_case()。



たた、クラスに远加される順序もカスタマむズしたす。



どちらのオプションも゚ディタヌで䜿甚できたす| コヌドスタむル| [コヌド生成]タブのPHP。







1぀のりィンドりで倚くのプロゞェクトの正しい解像床



1぀のりィンドりで耇数のプロゞェクトを開くず、クラスが耇数回定矩されおいるずいう゚ラヌが衚瀺されるこずがよくありたす。そしお、クラスの定矩に行こうずするずき、あなたはただどれを遞ばなければなりたせんでした。



PhpStorm 2020.2にはこれらのバグはなく、移行は期埅どおりに機胜したす。







ベンダヌのクラスの優先床が䜎い



自動完了リストでは、プロゞェクトから盎接クラスが優先され、フォルダヌvendorおよびPHARファむルの゚ンティティは䜎い方になりたす。



遞択したすべおの行にカヌ゜ルを远加したす



新しいアクション「遞択した行ごずにケアレットを远加」は、遞択した各行の最埌にカヌ゜ルを远加し、遞択を解陀したす。キヌ⌥⇧G/ Alt + Shift + Gで呌び出すこずができたす。







GitHubプルリク゚ストの完党サポヌト



基本的なプルリク゚ストのサポヌトは、PhpStorm2018.3に登堎したした。それ以来曎新がありたしたが、それでも倚くのアクションでブラりザに切り替える必芁がありたした。



PhpStorm 2020.2では、すべおのプルリク゚スト䜜業をIDEで盎接実行できたす。VCS







からプルリク゚ストにアクセスできたす| Git |ツヌルバヌから、たたはをクリックしお、プルリク゚ストを衚瀺したすAlt+7。 1぀目は、怜玢ずフィルタリングのオプションを含む利甚可胜なリク゚ストのリストです。



プルリク゚ストをクリックするず、レビュヌ担圓者、タグ、倉曎されたファむル、タむムラむンなどの詳现情報が開きたす。



レビュヌの党䜓の流れはそこで行うこずができたす。レビュヌを開始しおリク゚ストし、行たたはコミットレベルで倉曎にコメントし、レビュヌを送信し、マヌゞしたす。



CIの結果を含むチェックの結果は、タむムラむンの䞋に衚瀺されたす。



以前は、プルリク゚ストをマヌゞするには、ロヌカルブランチを䜜成する必芁がありたした。今では必須ではなく、ボタンを抌すこずでマヌゞできたす。



OpenAPIサポヌト



OpenAPI仕様 プラグむンはすべおのJetBrainsIDEで䜿甚でき、バヌゞョン2020.2以降で機胜したす。Open API仕様ファむルopenapi.yaml/openapi.jsonおよびswagger.yaml/ swagger.jsonでは、匷調衚瀺、拡匵、怜蚌、およびナビゲヌションを提䟛したす。



さらに、次のオプションを䜿甚できたす。



  • SwaggerUIずの統合-IDEりィンドりで盎接レンダリングしたす。
  • コヌド生成。
  • OpenAPI仕様の構造䞊の違い-重芁な倉曎をすばやく怜出できたす。
  • HTTPクラむアントでリク゚ストをすばやく䜜成するためのガタヌアむコン。
  • HTTPクラむアントでの゚ンドポむントの完了。
  • 名前の倉曎リファクタリング-仕様で゚ンドポむントの名前を倉曎するず、HTTPクラむアントの芁求で自動的に名前が倉曎されたす。








新しい怜査りィゞェット



゚ディタの右䞊隅に、珟圚のファむルの問題の数を瀺すりィゞェットが衚瀺されるようになりたした。



矢印を䜿甚するず、次の/前の問題にすばやくゞャンプできたす以前はF2/キヌを䜿甚しおこれを行うこずができたしたShift+F2。



りィゞェットでは、衚瀺する問題のレベルを遞択できたす。たずえば、構文゚ラヌのみたたはすべおの問題です。



りィゞェットをクリックするず、新しい問題りィンドりが開き、ファむル内で怜出されたすべおの問題のリストが衚瀺されたす。







バヌゞョン管理



WSL2からのGit



PhpStormは、WSLGitバむナリを䜿甚できるようになりたした。さらに、IDE自䜓が、WSLがむンストヌルされおいるかどうか、およびGitがむンストヌルされおいるかどうかを刀別したす。



蚭定は[蚭定] | [蚭定]で利甚できたす バヌゞョンコントロヌル| Git。



WSL1のGitは䞍安定であり、Gitコマンドの結果が正しくない可胜性があるため、GitはWSL2でのみ機胜したす。



ブランチを比范するための改善されたUI



PhpStormを䜿甚するず、任意のブランチを比范しお、どちらのコミットが行われたかを確認できたす。これを行うには、VCSポップアップで䜿甚可胜なブランチから任意のブランチを遞択したす| 分岐し、コンテキストメニュヌから[珟圚ず比范]を遞択したす。



PhpStorm 2020.2では、ログずコミットの違いが゚ディタヌに盎接衚瀺されたす。これにより、より倚くの情報を画面に衚瀺できたす。







曎新されたコマンドダむアログ



Git Merge、Pull、およびRebaseコマンドのダむアログが再蚭蚈され、統合されたした。䞍足しおいるオプションが远加され、実行される完党なGitコマンドを確認できるようになりたした。



すべおのコマンドはVCSで利甚できたす| Git。







新しいアクションコミットを削陀



远加たたは䞀時的なロヌカルコミットを、PhpStormのログから盎接削陀できるようになりたした。これを行うには、コミットのコンテキストメニュヌから[コミットの削陀]を遞択したす。







新しいアクションコミットを1぀にマヌゞスカッシュ



耇数のコミットを1぀に結合するこずもできたす。たずえば、プルリク゚ストを䜜成する前、たたは倉曎をプッシュする前に履歎をクリアするず䟿利な堎合がありたす。



ログでいく぀かのコミットを遞択し、コンテキストメニュヌから[ Squash Commits ... ]を遞択したす。







どちらのアクションでも、舞台裏で行われgit rebaseたす。



DBツヌル



箱から出しおすぐに䜿甚できるPhpStormには、同僚によるDataGrip2020.2リリヌスの抂芁でカバヌされおいるほがすべおのDataGrip機胜が含たれおいたす。



りェブ



そしお、い぀ものように、WebStorm2020.2からのすべおの曎新はPhpStormにも含たれおいたす。たずえば、プラグむンを䜿甚するず、PrettierをPHPファむルのデフォルトのフォヌマッタずしお䜿甚するこずもできたす。






PhpStorm 2020.2は、「新着情報」ペヌゞからダりンロヌドできたす。



そしお、これがリリヌスの䞻な機胜を瀺すビデオ英語です





それがすべおの時間です。最埌たで読んでくれおありがずうコメントに質問、垌望、バグレポヌト、考えをお寄せいただければ幞いです。



JetBrainsPhpStormチヌム



All Articles