PHP Intelephenseの最新の更新の後、Intelephenseは私のルート(および他のクラスも)の未定義シンボルに対してエラーを表示し続けます。以前はこのようなエラーはありませんでした。悩ます。
エラーのスクリーンショットは次のとおりです。
そして、これは私のコードです:
Route::group(['prefix' => 'user', 'namespace' => 'Membership', 'name' => 'user.'], function () {
Route::get('profile', 'ProfileController@show')->name('profile.show');
Route::patch('profile', 'ProfileController@update')->name('profile.update');
Route::patch('change-password', 'ChangePasswordController@change')->name('change-password');
Route::get('role', 'ProfileController@getRole')->name('profile.role');
Route::get('summary', 'SummaryController@show')->name('summary');
Route::get('reserved', 'AuctionController@reservedAuction')->name('reserved');
});
実際、このコードにはエラーはありませんが、Intelephenseはエラーを表示し続けるので、これを修正する方法はありますか?
Intelephense 1.3では、未定義のタイプ、関数、定数、クラス定数、メソッド、およびプロパティの診断が追加されました。以前は1.2では未定義の変数診断のみでした。
一部のフレームワークは、ユーザーにとって便利なショートカットを提供する方法で記述されていますが、静的分析エンジンが実行時に使用可能なシンボルを発見することを困難にします。
https://github.com/barryvdh/laravel-ide-helper のようなスタブジェネレーターは、ここでギャップを埋めるのに役立ち、Laravel簡単に発見できるシンボルの具体的な定義を提供することによる誤診断。
それでも、PHPは非常に柔軟な言語であり、コードの記述方法に応じて、誤った未定義シンボルの他のインスタンスが存在する可能性があります。このため、1.3.3以降、intelephenseは有効/ワークスペースとコーディングスタイルに合わせて、未定義シンボルの各カテゴリを無効にします。
これらのオプションは次のとおりです。intelephense.diagnostics.undefinedTypes
intelephense.diagnostics.undefinedFunctions
intelephense.diagnostics.undefinedConstants
intelephense.diagnostics.undefinedClassConstants
intelephense.diagnostics.undefinedMethods
intelephense.diagnostics.undefinedProperties
intelephense.diagnostics.undefinedVariables
intelephense.diagnostics.undefinedVariables
を除くこれらすべてをfalseに設定すると、バージョン1.2の動作が得られます。 VSCode設定UIを参照して、intelephense
を検索してください。
ダウングレードする必要はありません:
設定で未定義のシンボル診断を無効にします-"intelephense.diagnostics.undefinedSymbols":false。
またはlaravel facadesのスタブを追加するideヘルパーを使用します。 https://github.com/barryvdh/laravel-ide-helper を参照してください。
1.3.1修正済み。
拡張機能を更新するだけで準備完了です
use Illuminate\Support\Facades\Route;
これをインポートするだけで、警告が消えます。
このソリューションは、問題がFacadeに限定されていることがわかっており、Laravel 5.5以上を実行している場合に役立ちます。
laravel-ide-helperのインストール
composer require --dev barryvdh/laravel-ide-helper
ヘルパークラスを登録するには、AppServiceProvider
にこの条件ステートメントを追加します。
public function register()
{
if ($this->app->environment() !== 'production') {
$this->app->register(\Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class);
}
// ...
}
次に、php artisan ide-helper:generate
を実行して、IDE Facadeの理解に役立つファイルを生成します。VisualStudio Codeを再起動する必要があります。
参考文献
https://laracasts.com/series/how-to-be-awesome-in-phpstorm/episodes/16
いいえ、エラーはIntelephense拡張機能が自動的に更新された後にのみ発生します。
問題を解決するには、Intelephense拡張機能の[別のバージョンをインストール]をクリックして、以前のバージョンにダウングレードできます。バージョン1.2.3にはエラーはありません。
ここに私は解決しました:
拡張機能設定を開きます。
そして、変更したい変数を検索し、チェックを外した/チェックした
考慮すべき変数は次のとおりです。
intelephense.diagnostics.undefinedTypes
intelephense.diagnostics.undefinedFunctions
intelephense.diagnostics.undefinedConstants
intelephense.diagnostics.undefinedClassConstants
intelephense.diagnostics.undefinedMethods
intelephense.diagnostics.undefinedProperties
intelephense.diagnostics.undefinedVariables
私は同じ問題を抱えていましたが、以下はその問題に対処したようです。
a)最新バージョン1.3.5に更新し、すべての診断設定を再度有効にしました。
私はまだメッセージを受け取っていました
b)依存ライブラリを含むベンダーフォルダーをワークスペースに追加しました
これで問題が解決したようです。
新しいベンダークラスを追加した直後にこれが表示される場合は、VScodeコマンド(control-shift-P)Index Workspace
1.3.3で修正されました。拡張機能を更新するだけです。
これらの問題を経験し、チェックセット全体を無効にすることに不安がある場合は、Intelephenseに独自のカスタム署名を渡す(VSCodeを使用しますが、Visual Studio Codeでも同じように動作するはずです) )。
Intelepheseリポジトリのコメントからコピー(by @KapitanOczywisty):
https://github.com/bmewburn/vscode-intelephense/issues/892#issuecomment-5658521
単一のワークスペースの場合、非常に簡単です。すべての署名を含む
.php
ファイルを作成する必要があり、Intelephenseはそれらにインデックスを付けます。スタブをグローバルに追加したい場合でも可能ですが、それが意図されているかどうかはわかりませんfeature。
intelephense.stubs
が不正な値に関する警告をスローした場合でも、実際にはfolder nameを置くことができます。{ "intelephense.stubs": [ // ... "/path/to/your/stub" ] }
注:スタブは、この設定変更で更新されます。
ここでビルドスタブを見ることができます: https://github.com/JetBrains/phpstorm-stubs
私の場合、エラーとして強調表示されないようにするために、dspecのdescribe
、beforeEach
、it
...が必要だったので、署名付きのファイルを含めました/directories_and_paths/app/vendor/bin/dspec
VSCodeのワークスペース設定で、必要な関数宣言がありました:
function describe($description = null, \Closure $closure = null) {
}
function it($description, \Closure $closure) {
}
// ... and so on