Visual Studio Code PHP Intelephenseが不要なエラーを表示し続ける


142

今日入手したPHP 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');
});

実際、このコードにはエラーはありませんが、インテレファンスはエラーを表示し続けているので、これを修正する方法はありますか?


アプリケーションの問題キューでこれに関する問題を報告しました-github.com/bmewburn/vscode-intelephense/issues/885
anoopjohn

のルートで未定義のエラーが発生する場合はapi.php、以下の@ user12483351の回答を参照してください。それで解決しました。Intelephese 1.3.6を使用しています。
dotNET

回答:


103

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

これらをすべてfalseに設定intelephense.diagnostics.undefinedVariablesすると、バージョン1.2の動作になります。VSCode設定UIを参照してを検索してくださいintelephense


迷惑なアラートで数日が経過しましたが、最近のアップデート1.3.3で更新されました-大丈夫です。おかげで、@ bmewburn
Tariqul Islam

1
個別の設定に感謝します。今のところundefinedMethodsを無効にしたのは、intelephenseがLaravelヘルパーauth()->user()をクラス\ App \ Userとして検出できないため、\ App \ User内のメソッドの呼び出しがauth()->user()エラーとして検出されるためです。use Illuminate\Support\Facades\Route;未定義のシンボルルートエラーを修正するためにルートに追加しました。
Christhofer Natalius

2
これをありがとう。私のセットアップでは、ただ機能しintelephense.diagnostics.undefinedMethodsintelephense.diagnostics.undefinedType動作します。
kamudrikah

laravel-ide-helper警告を修正しました。ありがとうございました!
giovannipds

_ide_helper.phpドキュメントで提案されているように生成するだけです。
giovannipds

121

バージョン1.3.0にはIMOの欠陥があります。
バージョン1.2.3にダウングレードすると問題が解決します。

私は〜に乗っています

  • Laravel 5.1
  • PHP 5.6.40

バージョン1.2.3へのダウングレード


3
ええ、私はこれが最良の答えだと思います、問題は新しいバージョンです
エイドリアンエディプラタマ

はい!Intelephenseが1.3.0に更新されたときに1時間前に始まったまったく同じ問題がありました。1.2.3にダウングレードすると修正されました。
レオ

1
わたしも。PHP 5.3.3でプロジェクトに取り組んでいます。1.3をインストールすると、どこにでもエラーが発生します。Intelephense拡張設定でPHPバージョンを5.3.3に設定しても( "intelephense.environment.phpVersion": "5.3.3")、何も実行されませんでした。1.2.3に戻すと修正されました。
Ben

2
@Alexその他の問題があります。クエリスコープなどのエラーが発生します。これはファサードだけではありません。
ミロスラフMiloJanoušek19年

2
Intelephense 1.3.3は、ワークスペースとコーディングスタイルに合わせて、さらに構成オプションを追加します。未定義の診断の各カテゴリを適切に有効化/無効化できるようになりました。
bmewburn

19

ダウングレードする必要はありません。

設定で未定義のシンボル診断を無効にする-"intelephense.diagnostics.undefinedSymbols":false。

または、laravelファサードのスタブを追加するIDEヘルパーを使用します。https://github.com/barryvdh/laravel-ide-helperを参照してください


3
IDEヘルパーは、ルートの閉鎖または他の閉鎖の問題を解決していますが、雄弁スコープなど利用しながら、他のエラー全体を実行します
MiloslavミロJanoušek

3
したがって、問題を解決するには、真の診断を失う必要があります。まさか定生!
Carlos Mora

IDEヘルパーをインストールし、指示に従ってファイルを生成しました。これはLaravelプロジェクトにあります。それは何も変わらないように見え、まだ至る所に未定義のシンボルが残っていました。したがって、1.2.3にダウングレードしました
vesperknight

15
use Illuminate\Support\Facades\Route;

警告対応する名前空間をインポートした後に表示されなくなりました。

バージョン

  • ラーベル6+
  • vscodeバージョン1.40.2
  • php intelephense 1.3.1

これは実際に問題を解決します。console.php内のコマンドの場合、次のものでも機能します。Illuminate\ Support \ Facades \ Artisanを使用します。
Alex

これはlaravelをお勧めしません。laravel-ide-helper構成です。
giovannipds

これを追加すると、の問題は解決しましたRouteが、でも同じエラーが発生したためAuth、追加しuse Illuminate\Support\Facades\Auth;ました。問題が解決しました。
Daydah、

13

1.3.1修正しました。

拡張機能を更新するだけで、問題はありません。


22
私はすでにv1.3.1を使用していますが、エラーが引き続き表示されます。
ultrasamad

私も、修正はありますか、それともダウングレードする必要がありますか?
tonix

3
私にとってそれは何も解決しません。1.2.3に戻ると問題ありません。
Carlos Mora

1
1.3.1にはまだこの問題があります。1.2.3修正
NULLポインタ

2
1.3.2を使用していますが、まだ修正されていません。1.2.3にダウングレード。
Alex

12

この解決策は、問題が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がファサードを理解するのに役立つファイルを生成します。Visual Studio Codeを再起動する必要があります。

参考文献

https://laracasts.com/series/how-to-be-awesome-in-phpstorm/episodes/16

https://github.com/barryvdh/laravel-ide-helper


1
これに関する問題は、重複した定義を取得することです
Carlos Mora

@CarlosMoraは私には思えない。意味が
わかり

私はlaravel 6.xを使用していますが、動作します。
ハキコ

laravel 7も動作します
alfian5229

AuthVS Codeを再起動した後、intelephenseが強調表示を停止しました。私はこの回答に示されている手順を正確に実行しました。VS Codeを再起動したら、1〜2分待ってください。エラーが解消されます。
agm1984

6

これは、エディターがLaravelを理解するための実際の構成セットです。

すべて手動で構成したい場合は、ここにリポジトリがあります。これはVSコードとPhpStormの両方に対応しています。

または、必要に応じてこのパッケージをダウンロードできます。(私が作成した)グローバルにインストールすることをお勧めします。

そして、ただ実行しandylaravel setupIDEます。これにより、最初のリポジトリに従ってすべてが構成されます。


5

いいえ、エラーはIntelephense拡張機能が自動的に更新された後にのみ発生します。

この問題を解決するには、Intelephense拡張機能の[別のバージョンをインストール]をクリックして、以前のバージョンにダウングレードできます。バージョン1.2.3にはエラーはありません。


1
1.2.3にダウングレードすることで問題は解決しました。
Julitillo、

2

新しいベンダークラスを追加した直後にこれが表示される場合は、必ずVScodeコマンド(control-shift-P)を実行してください。 Index Workspace


1

ここで私は解決しました:

拡張機能の設定を開きます。

ここに画像の説明を入力してください

そして、変更したい変数を検索し、チェックを外す/チェックを外します

ここに画像の説明を入力してください

考慮すべき変数は次のとおりです。

intelephense.diagnostics.undefinedTypes 
intelephense.diagnostics.undefinedFunctions         
intelephense.diagnostics.undefinedConstants         
intelephense.diagnostics.undefinedClassConstants 
intelephense.diagnostics.undefinedMethods 
intelephense.diagnostics.undefinedProperties 
intelephense.diagnostics.undefinedVariables

1

それらにとっては、それを単純で愚かに保つことを好むでしょう。ヘルパーをインストールしたりダウングレードしたりする代わりに通知を取り除いた場合は、次のコードをsettings.json追加してエラーを無効にします。

"intelephense.diagnostics.undefinedTypes": false

0

1.3.3修正しました。拡張機能を更新するだけです。


更新するだけでなく、@ bmewburnの回答のような機能を無効にする必要があります
Adrian Edy Pratama

0

私は同じ問題を抱えていましたが、次のように問題を解決したようです。

a)最新バージョン1.3.5に更新し、すべての診断設定を再度有効にしました。

私はまだメッセージを受け取っていました

b)依存ライブラリを含むベンダーフォルダーをワークスペースに追加

これで問題は解決したようです。


使用できますlaravel-ide-helper
giovannipds

先端をありがとう。私はDrupal内でSymfonyを使用しています。laravel-ide-helperは役に立ちますか?
anoopjohn

0

これらの問題を経験し、一連のチェック全体を無効にすることに不安を感じる人のために、独自のカスタム署名をIntelephense渡す方法があります(私はVSCodeを使用していますが、Visual Studio Codeでも同じように動作するはずです)。

Intelephese repoのコメント(@KapitanOczywistyによる)からコピー:https :
//github.com/bmewburn/vscode-intelephense/issues/892#issuecomment-565852100

単一のワークスペースの場合、それは非常に簡単です.php。すべての署名を含むファイルを作成する必要があり、intelephenseがそれらにインデックスを付けます。

グローバルにスタブを追加したい場合でも可能ですが、それが目的の機能であるかどうかはわかりません。場合でも、intelephense.stubsあなたが実際にそこにどんな置くことができ、誤った値に関する警告スローフォルダの名前を。

{   
   "intelephense.stubs": [
       // ...
       "/path/to/your/stub"   
   ] 
} 

注:この設定を変更すると、スタブが更新されます。

あなたはここでビルドスタブを見ることができます:https//github.com/JetBrains/phpstorm-stubs

私の場合、私はdspecのを必要としdescribebeforeEachit私は署名付きファイルに含まので、エラーとして強調されていないために... /directories_and_paths/app/vendor/bin/dspec:私は必要な関数宣言を持っていた私のVSCodeのワークスペースの設定では、

function describe($description = null, \Closure $closure = null) {
}

function it($description, \Closure $closure) {
}

// ... and so on
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.