web-dev-qa-db-ja.com

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

PHP Intelephenseの最新の更新の後、Intelephenseは私のルート(および他のクラスも)の未定義シンボルに対してエラーを表示し続けます。以前はこのようなエラーはありませんでした。悩ます。

エラーのスクリーンショットは次のとおりです。

enter image description here

そして、これは私のコードです:

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はエラーを表示し続けるので、これを修正する方法はありますか?

135

Intelephense 1.3では、未定義のタイプ、関数、定数、クラス定数、メソッド、およびプロパティの診断が追加されました。以前は1.2では未定義の変数診断のみでした。

一部のフレームワークは、ユーザーにとって便利なショートカットを提供する方法で記述されていますが、静的分析エンジンが実行時に使用可能なシンボルを発見することを困難にします。

https://github.com/barryvdh/laravel-ide-helper のようなスタブジェネレーターは、ここでギャップを埋めるのに役立ち、Laravel簡単に発見できるシンボルの具体的な定義を提供することによる誤診断。

それでも、PHPは非常に柔軟な言語であり、コードの記述方法に応じて、誤った未定義シンボルの他のインスタンスが存在する可能性があります。このため、1.3.3以降、intelephenseは有効/ワークスペースとコーディングスタイルに合わせて、未定義シンボルの各カテゴリを無効にします。

これらのオプションは次のとおりです。intelephense.diagnostics.undefinedTypesintelephense.diagnostics.undefinedFunctionsintelephense.diagnostics.undefinedConstantsintelephense.diagnostics.undefinedClassConstantsintelephense.diagnostics.undefinedMethodsintelephense.diagnostics.undefinedPropertiesintelephense.diagnostics.undefinedVariables

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

89
bmewburn

バージョン1.3.0にはIMOの欠陥があります。
バージョン1.2.3にダウングレードすると、問題が修正されます。

私は〜に乗っています

  • Laravel 5.1
  • PHP 5.6.40

Downgrade to Version 1.2.3

119
Robin1990

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

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

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

18
Nacho

1.3.1修正済み。

拡張機能を更新するだけで準備完了です

14
Souljacker
use Illuminate\Support\Facades\Route;

これをインポートするだけで、警告が消えます。

  • Larvel 6+
  • vscodeバージョン1.40.2
  • php intelephense 1.3.1
13
user12483351

このソリューションは、問題が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

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

9
Patrice Wrex

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

すべてを手動で構成する場合は、 repo を使用します。これは、VSコードとPhpStormの両方に対応しています。

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

そして、andylaravel setupIDEを実行します。これにより、最初のレポに従ってすべてが設定されます。

6
Andy Song

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

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

5
exyna

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

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

enter image description here

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

enter image description here

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

intelephense.diagnostics.undefinedTypes 
intelephense.diagnostics.undefinedFunctions         
intelephense.diagnostics.undefinedConstants         
intelephense.diagnostics.undefinedClassConstants 
intelephense.diagnostics.undefinedMethods 
intelephense.diagnostics.undefinedProperties 
intelephense.diagnostics.undefinedVariables
0
Elia Weiss

私は同じ問題を抱えていましたが、以下はその問題に対処したようです。

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

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

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

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

0
anoopjohn

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

0
Snapey

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

0
Hossein

これらの問題を経験し、チェックセット全体を無効にすることに不安がある場合は、Intelephenseに独自のカスタム署名を渡す(VSCodeを使用しますが、Visual Studio Codeでも同じように動作するはずです) )。

Intelepheseリポジトリのコメントからコピー(by @KapitanOczywisty):
https://github.com/bmewburn/vscode-intelephense/issues/892#issuecomment-5658521

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

スタブをグローバルに追加したい場合でも可能ですが、それが意図されているかどうかはわかりませんfeatureintelephense.stubsが不正な値に関する警告をスローした場合でも、実際にはfolder nameを置くことができます。

{   
   "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
0
jpenna