Visual Studio Code PHP Intelephense Продовжуйте показувати не потрібну помилку


142

Після останнього оновлення 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');
});

Насправді в цьому коді немає помилок, але інтелепхенсе постійно показує помилку, тож є спосіб виправити це?


Я повідомив про проблему в черзі на додаток - github.com/bmewburn/vscode-intelephense/isissue/885
anoopjohn

Якщо у маршруті у вас з’являється невизначена помилка api.php, перегляньте відповідь @ user12483351 нижче. Це зафіксувало це для мене. Я на Інтелефезі 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 та шукайте intelephense.


Пройшов кілька днів із набридливими сповіщеннями, зараз із останнім оновленням 1.3.3 - все гаразд. Дякую @bmewburn
Tariqul Islam

1
Дякую за окрему конфігурацію, зараз я відключив undefinedMethods, оскільки intelephense не може виявити помічника laravel auth()->user()як клас \ App \ Користувач, тому метод виклику всередині \ App \ Користувач від auth()->user()буде виявлений як помилка. Я просто додав use Illuminate\Support\Facades\Route;у свої маршрути, щоб виправити невизначену помилку маршруту символу.
Крістофер Наталій

2
Дякую за це Для мого налаштування просто набір intelephense.diagnostics.undefinedMethodsі intelephense.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.2.3, виправили її.
лео

1
Те саме для мене. Я працюю над проектом в PHP 5.3.3. Колись 1.3 було встановлено помилки скрізь. Якщо встановити версію PHP на 5.3.3 в налаштуваннях розширення Intelephense ("intelephense.environment.phpVersion": "5.3.3"), нічого не робилося. Повернення до 1.2.3 виправлено.
Бен

2
@Alex Є й інші проблеми. Ви отримаєте помилки в області запитів тощо. Це не лише фасади.
Мілослав Міло

2
Intelephense 1.3.3 додає додаткові параметри конфігурації відповідно до вашої робочої області та стилю кодування. Кожна категорія невизначеної діагностики тепер може бути включена / вимкнена для відповідності.
bmewburn

19

Вам не потрібно знижувати версію, ви можете:

Або вимкніть невстановлену діагностику символів у налаштуваннях - "intelephense.diagnostics.undefinedSymbols": false.

Або скористайтеся ідеєю-помічником, яка додає заглушки для фасадів laravel. Дивіться https://github.com/barryvdh/laravel-ide-helper


3
IDE Helper вирішує проблеми із закриттям маршруту чи іншими закриттями, але ви зіткнетесь з іншими помилками під час використання красномовних областей тощо.
Мілослав Міло

3
Тому для вирішення проблеми нам потрібно втратити справжню діагностику. Ні в якому разі Хосей!
Карлос Мора

Я встановив IDE Helper і згенерував файл згідно інструкцій. Це на проекті Laravel. Здавалося, нічого не змінювало, і все ще було невизначені символи всюди. Тому я знизився до 1.2.3
vesperknight

15
use Illuminate\Support\Facades\Route;

Попередження зникло після імпорту відповідного простору імен.

Версія

  • Ларвель 6+
  • версія версії 1.40.2
  • php intelephense 1.3.1

Це фактично вирішує проблему. Для команд всередині console.php він також добре працює з: використання Illuminate \ Support \ Support \ Facades \ Artisan;
Олексій

Це не рекомендується. laravel-ide-helperконфігурація є.
giovannipds

Додавання цього вирішило проблему для Route, але у мене була та сама помилка Auth, тому я також додав use Illuminate\Support\Facades\Auth;. Проблема вирішена.
Дейда

13

1.3.1 виправлено.

Просто оновіть своє розширення, і вам слід добре поїхати


22
Я вже на v1.3.1, але помилка продовжує показуватися.
ультрасамад

Я теж є, чи є виправлення чи ми повинні зменшити його?
tonix

3
Для мене це нічого не вирішує. Повернення до 1.2.3 іде добре!
Карлос Мора

1
1.3.1 все ще є ця проблема для мене. 1.2.3 виправлено
покажчик NULL

2
Я на 1.3.2 і все ще НЕ виправлений. Поновлено до 1.2.3.
Олексій

12

Це рішення може допомогти вам, якщо ви знаєте, що ваші проблеми обмежені Фасадами, і ви працюєте з 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
Проблема з цим - ви отримуєте дублювані визначення
Карлос Мора

@CarlosMora здається не мені. Я не зрозумів, що ви мали на увазі ...
giovannipds

Я використовую laravel 6.x, і він працює.
hakiko

laravel 7 теж працює
alfian5229

Інтелепхенсе припинив виділення Authпісля перезапуску коду VS. Я точно зробив кроки, показані в цій відповіді. Після перезапуску коду VS надайте йому хвилину-дві, і помилки повинні очиститися.
agm1984

6

Це дійсно набір конфігурацій, щоб ваш редактор зрозумів Laravel.

Якщо ви хочете все це налаштувати вручну, ось репо . Це стосується як коду VS, так і PhpStorm.

Або якщо ви хочете, ви можете завантажити цей пакет (я створив), рекомендуючи встановити його в усьому світі.

А потім просто біжи andylaravel setupIDE. це налаштує все для вас відповідно до кулачного репо.


5

Ні, помилки виникають лише після автоматичного оновлення розширення Intelephense.

Щоб вирішити проблему, ви можете повернути її до попередньої версії, натиснувши "Встановити іншу версію" в розширенні Intelephense. У версії 1.2.3 помилок немає.


1
Пониження рівня до 1.2.3 вирішило проблему.
Julitillo

2

Якщо ви побачите це відразу після додавання нового класу Vendor, не забудьте виконати команду 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
Адріан Еді Пратама

0

У мене був той самий випуск, і, здається, було вирішено наступне питання.

a) Оновлено до останньої версії 1.3.5 та знову ввімкнуло всі параметри діагностики.

Я ще отримував повідомлення

b) До робочої області додана папка постачальника із залежними бібліотеками

Це, здається, вирішило проблему.


Ви можете використовуватиlaravel-ide-helper
giovannipds

Дякую за пораду. Я використовую Symfony всередині Drupal. Чи допоможе ларавель-іде-помічник?
anoopjohn

0

Для тих, хто переживає ці проблеми та непросто відключає цілий набір перевірок, є спосіб передати власні власні підписи в Intelephense (я використовую VSCode, але він повинен працювати так само і для коду Visual Studio).

Скопійовано з коментаря репо Intelephese (від @KapitanOczywisty):
https://github.com/bmewburn/vscode-intelephense/isissue/892#issuecomment-565852100

Для однієї робочої області це дуже просто, вам потрібно створити .phpфайл з усіма підписами, і intelephense проіндексує їх.

Якщо ви хочете додати заглушки в усьому світі, ви все одно можете, але я не впевнений, чи призначена вона функцією . Навіть якщо ви intelephense.stubsкидаєте попередження про неправильне значення, ви можете фактично помістити туди будь-яку назву папки .

{   
   "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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.