Kode Visual Studio PHP Intelephense Terus Menunjukkan Tidak Perlu Kesalahan


142

Setelah pembaruan terbaru dari PHP Intelephense yang saya dapatkan hari ini, intelephense terus menunjukkan kesalahan untuk simbol yang tidak ditentukan untuk rute saya (dan kelas lainnya juga), tidak ada kesalahan seperti ini sebelumnya dan itu mengganggu saya.

Berikut screenshot kesalahan:

masukkan deskripsi gambar di sini

Dan ini kode saya:

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');
});

Sebenarnya tidak ada kesalahan dalam kode ini tetapi intelephense terus menunjukkan kesalahan sehingga apakah ada cara untuk memperbaikinya?


Saya telah melaporkan masalah tentang ini pada masalah antrian aplikasi - github.com/bmewburn/vscode-intelephense/issues/885
anoopjohn

Jika Anda mendapatkan kesalahan yang tidak ditentukan pada Rute di Anda api.php, lihat jawaban @ user12483351 di bawah ini. Itu memperbaikinya bagi saya. Saya menggunakan Intelephese 1.3.6.
dotNET

Jawaban:


103

Intelephense 1.3 menambahkan tipe, fungsi, konstan, konstanta kelas, metode, dan diagnostik properti yang tidak terdefinisi, di mana sebelumnya di 1.2 hanya ada diagnostik variabel yang tidak terdefinisi.

Beberapa kerangka kerja ditulis dengan cara yang menyediakan cara pintas yang nyaman bagi pengguna tetapi mempersulit mesin analisis statis untuk menemukan simbol yang tersedia saat runtime.

Generator rintisan seperti https://github.com/barryvdh/laravel-ide-helper membantu mengisi celah di sini dan menggunakan ini dengan Laravel akan menangani banyak diagnostik palsu dengan memberikan definisi konkret simbol yang dapat dengan mudah ditemukan.

Namun, PHP adalah bahasa yang sangat fleksibel dan mungkin ada contoh lain dari simbol tidak terdefinisi palsu tergantung pada bagaimana kode ditulis. Karena alasan ini, sejak 1.3.3, intelephense memiliki opsi konfigurasi untuk mengaktifkan / menonaktifkan setiap kategori simbol yang tidak ditentukan agar sesuai dengan ruang kerja dan gaya pengkodean.

Opsi-opsi ini adalah: intelephense.diagnostics.undefinedTypes intelephense.diagnostics.undefinedFunctions intelephense.diagnostics.undefinedConstants intelephense.diagnostics.undefinedClassConstants intelephense.diagnostics.undefinedMethods intelephense.diagnostics.undefinedProperties intelephense.diagnostics.undefinedVariables

Mengatur semua ini ke false kecuali intelephense.diagnostics.undefinedVariablesakan memberikan perilaku versi 1.2. Lihat UI pengaturan VSCode dan cari intelephense.


Melewati beberapa hari dengan peringatan yang menjengkelkan, sekarang dengan pembaruan terkini 1.3.3 - semuanya baik-baik saja .. Terima kasih @bmewburn
Tariqul Islam

1
Terima kasih untuk konfigurasi terpisah, untuk saat ini saya menonaktifkan undefinedMethods karena intelephense tidak dapat mendeteksi pembantu laravel auth()->user()sebagai class \ App \ User sehingga metode panggilan di dalam \ App \ User from auth()->user()akan dideteksi sebagai kesalahan. Saya baru saja menambahkan use Illuminate\Support\Facades\Route;rute saya untuk memperbaiki kesalahan rute simbol yang tidak ditentukan.
Christhofer Natalius

2
Terima kasih untuk ini. Untuk pengaturan saya, cukup gunakan diable intelephense.diagnostics.undefinedMethodsdan intelephense.diagnostics.undefinedTypeberfungsi.
kamudrikah

laravel-ide-helpermemperbaiki peringatan. Terima kasih!
giovannipds

Hanya perlu menghasilkan _ide_helper.phpseperti yang disarankan pada dokumen.
giovannipds

121

Versi 1.3.0 memiliki cacat IMO.
Turun ke versi 1.2.3 memperbaiki masalah saya.

aku di

  • Laravel 5.1
  • PHP 5.6.40

Turunkan Versi ke Versi 1.2.3


3
Ya, saya pikir ini adalah jawaban terbaik, masalahnya adalah versi baru
Adrian Edy Pratama

Iya! Saya memiliki masalah yang persis sama, yang dimulai satu jam yang lalu ketika Intelephense diperbarui ke 1.3.0 - diturunkan ke 1.2.3 memperbaikinya.
leo

1
Sama untuk ku. Saya mengerjakan proyek dalam PHP 5.3.3. Setelah 1,3 kesalahan diinstal di mana-mana. Mengatur versi PHP ke 5.3.3 di pengaturan ekstensi Intelephense ("intelephense.environment.phpVersion": "5.3.3") tidak melakukan apa pun. Mengembalikan ke 1.2.3 memperbaikinya.
Ben

2
@ Alex Ada masalah lain. Anda akan mendapatkan kesalahan untuk cakupan permintaan, dll. Ini bukan hanya tampilan luar.
Miloslav Milo Janoušek

2
Intelephense 1.3.3 menambahkan opsi konfigurasi lebih lanjut yang sesuai dengan ruang kerja dan gaya penulisan Anda. Setiap kategori diagnostik yang tidak terdefinisi sekarang dapat diaktifkan / dinonaktifkan agar sesuai.
bmewburn

19

Anda tidak perlu menurunkan versi, Anda dapat:

Nonaktifkan diagnosa simbol yang tidak terdefinisi dalam pengaturan - "intelephense.diagnostics.undefinedSymbols": false.

Atau gunakan penolong ide yang menambahkan bertopik untuk fasad laravel. Lihat https://github.com/barryvdh/laravel-ide-helper


3
IDE Helper memang menyelesaikan masalah dengan penutupan Rute atau penutupan lainnya, tetapi Anda akan menemukan kesalahan lain saat menggunakan cakupan fasih dll.
Miloslav Milo Janoušek

3
Jadi untuk mengatasi masalah kita harus kehilangan diagnostik yang benar. Tidak mungkin Josei!
Carlos Mora

Saya menginstal IDE Helper dan membuat file sesuai instruksi .. ini ada di proyek Laravel. Tampaknya tidak mengubah apa pun dan masih memiliki simbol yang tidak terdefinisi di semua tempat. Jadi saya turun ke 1.2.3
vesperknight

15
use Illuminate\Support\Facades\Route;

Peringatan Hilang setelah mengimpor namespace yang sesuai.

Versi

  • Larvel 6+
  • versi vscode 1.40.2
  • php intelephense 1.3.1

Ini sebenarnya memecahkan masalah. Untuk perintah di dalam console.php berfungsi juga dengan: gunakan Illuminate \ Support \ Facades \ Artisan;
Alex

Ini bukan laravel yang direkomendasikan. laravel-ide-helperkonfigurasi adalah.
giovannipds

Menambahkan ini untuk memecahkan masalah Route, tetapi saya memiliki kesalahan yang sama untuk Auth, jadi saya menambahkan use Illuminate\Support\Facades\Auth;juga. Masalah terpecahkan.
Daydah

13

1.3.1 memperbaikinya.

Cukup perbarui ekstensi Anda dan Anda harus siap


22
Saya sudah menggunakan v1.3.1 tetapi kesalahan terus muncul.
ultrasamad

Saya juga, apakah ada perbaikan atau haruskah kami menurunkan versi?
tonix

3
Bagi saya itu tidak memecahkan apa pun. Kembali ke 1.2.3 berjalan dengan baik!
Carlos Mora

1
1.3.1 masih memiliki masalah ini untuk saya. 1.2.3 memperbaikinya
NULL pointer

2
Saya di 1.3.2 dan masih TIDAK diperbaiki. Re-downgrade ke 1.2.3.
Alex

12

Solusi ini dapat membantu Anda jika Anda tahu masalah Anda terbatas pada Fasad dan Anda menjalankan Laravel 5.5 atau lebih tinggi.

Instal laravel-ide-helper

composer require --dev barryvdh/laravel-ide-helper

Tambahkan pernyataan bersyarat ini di Anda AppServiceProvideruntuk mendaftarkan kelas pembantu.

public function register()
{
    if ($this->app->environment() !== 'production') {
        $this->app->register(\Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class);
    }
    // ...
}

Kemudian jalankan php artisan ide-helper:generateuntuk menghasilkan file untuk membantu IDE memahami Fasad. Anda harus me-restart Visual Studio Code.

Referensi

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

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


1
Masalahnya dengan ini adalah Anda mendapatkan duplikat definisi
Carlos Mora

@CarlosMora sepertinya tidak bagi saya. Saya tidak mengerti maksud Anda ...
giovannipds

Saya menggunakan laravel 6.x dan berfungsi.
hakiko

laravel 7 juga berfungsi
alfian5229

intelephense berhenti menyorot Authsetelah saya memulai ulang VS Code. Saya melakukan langkah-langkah yang ditunjukkan dalam jawaban ini. Setelah memulai ulang VS Code, berikan satu atau dua menit dan kesalahannya akan hilang.
agm1984

6

Ini benar-benar satu set konfigurasi untuk editor Anda untuk memahami Laravel.

Jika Anda ingin mengkonfigurasi semuanya secara manual, ini repo . Ini untuk kode VS dan PhpStorm.

Atau jika mau, Anda dapat mengunduh paket ini . (Saya buat) disarankan untuk menginstalnya secara global.

Dan kemudian jalankan andylaravel setupIDE. ini akan mengkonfigurasi segalanya untuk Anda sesuai dengan repo pertama.


5

Tidak, kesalahan terjadi hanya setelah ekstensi Intelephense diperbarui secara otomatis.

Untuk mengatasi masalah, Anda dapat menurunkan versi ke versi sebelumnya dengan mengklik "Instal versi lain" di ekstensi Intelephense. Tidak ada kesalahan pada versi 1.2.3.


1
Menurunkan versi ke 1.2.3 memecahkan masalah.
Julitillo

2

Jika Anda melihat ini segera setelah menambahkan kelas Vendor baru, pastikan untuk menjalankan perintah VScode (control-shift-P) Index Workspace


1

Di sini saya dipecahkan:

Buka pengaturan ekstensi:

masukkan deskripsi gambar di sini

Dan cari variabel yang ingin Anda ubah, dan hapus centang / centang

masukkan deskripsi gambar di sini

Variabel yang harus Anda pertimbangkan adalah:

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

1

Bagi mereka yang lebih suka membuatnya sederhana, bodoh; Jika Anda lebih suka menyingkirkan pemberitahuan daripada menginstal pembantu atau menurunkan versi, cukup nonaktifkan kesalahan dalam Anda settings.jsondengan menambahkan ini:

"intelephense.diagnostics.undefinedTypes": false

0

1.3.3 memperbaikinya. Perbarui ekstensi Anda.


tidak hanya memperbaruinya tetapi Anda harus menonaktifkan beberapa fitur seperti apa jawaban @ bbmburn
Adrian Edy Pratama

0

Saya memiliki masalah yang sama dan berikut ini sepertinya telah mengatasi masalah tersebut.

a) Diperbarui ke versi terbaru 1.3.5 dan mengaktifkan kembali semua pengaturan diagnosis.

Saya masih menerima pesan

b) Menambahkan folder vendor dengan pustaka dependen ke ruang kerja

Ini tampaknya telah menyelesaikan masalah.


Anda bisa menggunakanlaravel-ide-helper
giovannipds

Terima kasih atas tipnya. Saya menggunakan Symfony di dalam Drupal. Akankah bantuan ide-laravel membantu?
anoopjohn

0

Bagi siapa pun yang mengalami masalah ini dan merasa tidak nyaman untuk menonaktifkan seluruh rangkaian pemeriksaan, ada cara untuk menyerahkan tanda tangan khusus Anda ke Intelephense (saya menggunakan VSCode, tetapi harus bekerja sama untuk Visual Studio Code).

Disalin dari komentar repo Intelephese (oleh @KapitanOczywisty):
https://github.com/bmewburn/vscode-intelephense/issues/892#issuecomment-565852100

Untuk ruang kerja tunggal sangat sederhana, Anda harus membuatnya .php file dengan semua tanda tangan dan intelephense akan mengindeksnya.

Jika Anda ingin menambahkan bertopik secara global, Anda masih bisa, tetapi saya tidak yakin apakah itu fitur yang dimaksudkan . Bahkan jika intelephense.stubsmelempar peringatan tentang nilai yang salah, Anda sebenarnya bisa memasukkan nama folder apa pun .

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

Catatan: stubs di-refresh dengan perubahan pengaturan ini.

Anda dapat melihat stub bawaan di sini: https://github.com/JetBrains/phpstorm-stubs

Dalam kasus saya, saya perlu dspec ini describe, beforeEach, it... untuk tidak disorot sebagai kesalahan, jadi saya hanya menyertakan file dengan tanda tangan /directories_and_paths/app/vendor/bin/dspecdalam pengaturan VSCode ini ruang kerja, yang memiliki deklarasi fungsi yang saya butuhkan:

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

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

// ... and so on
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.