Code Visual Studio PHP Intelephense continue d'afficher l'erreur non nécessaire


142

Après la dernière mise à jour de PHP Intelephense que je reçois aujourd'hui, l'intelephense continue d'afficher une erreur pour un symbole non défini pour mon itinéraire (et d'autres classes aussi), il n'y a pas d'erreur comme celle-ci auparavant et cela me dérange.

Voici la capture d'écran d'erreur:

entrez la description de l'image ici

Et voici mon code:

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

En fait, il n'y a pas d'erreur dans ce code mais l'intéléphense continue d'afficher une erreur, donc y a-t-il un moyen de résoudre ce problème?


J'ai signalé un problème à ce sujet dans la file d'attente des problèmes de l'application - github.com/bmewburn/vscode-intelephense/issues/885
anoopjohn

Si vous obtenez une erreur non définie sur Route dans votre api.php, consultez la réponse de @ user12483351 ci-dessous. Cela m'a arrangé. Je suis sur Intelephese 1.3.6.
dotNET

Réponses:


103

Intelephense 1.3 a ajouté des diagnostics de type, de fonction, de constante, de constante de classe, de méthode et de propriété non définis, alors qu'auparavant, en 1.2, il n'y avait que des diagnostics de variable non définis.

Certains frameworks sont écrits de manière à fournir des raccourcis pratiques pour l'utilisateur, mais rendent difficile pour les moteurs d'analyse statique de découvrir les symboles disponibles au moment de l'exécution.

Les générateurs de stub comme https://github.com/barryvdh/laravel-ide-helper aident à combler le vide ici et à l'utiliser avec Laravel va prendre en charge de nombreux faux diagnostics en fournissant des définitions concrètes de symboles qui peuvent être facilement découverts.

Pourtant, PHP est un langage très flexible et il peut y avoir d'autres cas de faux symboles non définis selon la façon dont le code est écrit. Pour cette raison, depuis 1.3.3, intelephense a des options de configuration pour activer / désactiver chaque catégorie de symbole non défini en fonction de l'espace de travail et du style de codage.

Ces options sont: intelephense.diagnostics.undefinedTypes intelephense.diagnostics.undefinedFunctions intelephense.diagnostics.undefinedConstants intelephense.diagnostics.undefinedClassConstants intelephense.diagnostics.undefinedMethods intelephense.diagnostics.undefinedProperties intelephense.diagnostics.undefinedVariables

La définition de tous ces éléments sur false sauf intelephense.diagnostics.undefinedVariablesdonnera le comportement de la version 1.2. Voir l'interface utilisateur des paramètres VSCode et recherchez intelephense.


Passé quelques jours avec des alertes ennuyeuses, maintenant avec la récente mise à jour 1.3.3 - tout va bien .. Merci @bmewburn
Tariqul Islam

1
Merci pour la configuration séparée, pour l'instant j'ai désactivé undefinedMethods car intelephense ne peut pas détecter l'aide laravel en auth()->user()tant que classe \ App \ User donc la méthode d'appel dans \ App \ User à partir de auth()->user()sera détectée comme une erreur. Je viens d'ajouter use Illuminate\Support\Facades\Route;dans mes itinéraires pour corriger l'erreur de route de symbole non définie.
Christhofer Natalius

2
Merci pour cela. Pour ma configuration, juste diable intelephense.diagnostics.undefinedMethodset intelephense.diagnostics.undefinedTypefonctionne.
kamudrikah

laravel-ide-helpercorrection de l'avertissement. Je vous remercie!
giovannipds

Juste besoin de générer le _ide_helper.phpcomme suggéré sur les documents.
giovannipds

121

La version 1.3.0 a un défaut IMO.
La rétrogradation vers la version 1.2.3 résout mon problème.

Je suis dessus

  • Laravel 5.1
  • PHP 5.6.40

Rétrograder vers la version 1.2.3


3
Oui, je pense que c'est la meilleure réponse, le problème est la nouvelle version
Adrian Edy Pratama

Oui! J'ai eu exactement ce même problème, qui a commencé il y a une heure lorsque Intelephense a été mis à jour vers 1.3.0 - la rétrogradation vers 1.2.3 l'a corrigé.
leo

1
Pareil pour moi. Je travaille sur un projet en PHP 5.3.3. Une fois 1.3 a été installé des erreurs partout. Définir la version PHP sur 5.3.3 dans le paramètre d'extension Intelephense ("intelephense.environment.phpVersion": "5.3.3") n'a rien fait. Revenir à 1.2.3 l'a corrigé.
Ben

2
@Alex Il y a d'autres problèmes. Vous allez obtenir des erreurs pour les portées de requête, etc. Ce ne sont pas que des façades.
Miloslav Milo Janoušek

2
Intelephense 1.3.3 ajoute d'autres options de configuration en fonction de votre espace de travail et de votre style de codage. Chaque catégorie de diagnostic non défini peut maintenant être activée / désactivée pour convenir.
bmewburn

19

Vous n'avez pas besoin de rétrograder, vous pouvez:

Soit désactiver les diagnostics de symboles non définis dans les paramètres - "intelephense.diagnostics.undefinedSymbols": false.

Ou utilisez un assistant ide qui ajoute des talons pour les façades laravel. Voir https://github.com/barryvdh/laravel-ide-helper


3
IDE Helper résout les problèmes de fermeture de route ou d'autres fermetures, mais vous rencontrerez d'autres erreurs tout en utilisant des étendues éloquentes, etc.
Miloslav Milo Janoušek

3
Donc, pour résoudre un problème, nous devons perdre de vrais diagnostics. Pas question Josei!
Carlos Mora

J'ai installé IDE Helper et généré le fichier selon les instructions .. c'est sur un projet Laravel. Il semblait ne rien changer et avait toujours des symboles indéfinis partout. J'ai donc rétrogradé à 1.2.3
vesperknight

15
use Illuminate\Support\Facades\Route;

Avertissement Disparu après l'importation de l'espace de noms correspondant.

Versions

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

Cela résout en fait le problème. Pour les commandes dans console.php, cela fonctionne aussi avec: use Illuminate \ Support \ Facades \ Artisan;
Alex

Ce n'est pas recommandé. laravel-ide-helperla configuration est.
giovannipds

L'ajout de ceci a résolu le problème pour Route, mais j'ai eu la même erreur pour Auth, j'ai donc ajouté use Illuminate\Support\Facades\Auth;aussi. Problème résolu.
Daydah

13

1.3.1 l'a corrigé.

Mettez simplement à jour votre extension et vous devriez être prêt à partir


22
Je suis déjà sur la v1.3.1 mais l'erreur continue de s'afficher.
ultrasamad

Moi aussi, y a-t-il un correctif ou devrions-nous rétrograder?
tonix

3
Pour moi, cela ne résout rien. Revenir à 1.2.3 se passe bien!
Carlos Mora

1
1.3.1 a toujours ce problème pour moi. 1.2.3 corrigé
pointeur NULL

2
Je suis sur 1.3.2 et je ne suis toujours PAS corrigé. Rétrogradé à 1.2.3.
Alex

12

Cette solution peut vous aider si vous savez que vos problèmes sont limités aux façades et que vous utilisez Laravel 5.5 ou supérieur.

Installer laravel-ide-helper

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

Ajoutez cette instruction conditionnelle dans votre AppServiceProviderpour enregistrer la classe d'assistance.

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

Ensuite, exécutez php artisan ide-helper:generatepour générer un fichier pour aider l'IDE à comprendre les façades. Vous devrez redémarrer Visual Studio Code.

Références

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

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


1
Le problème avec ceci est que vous obtenez des définitions en double
Carlos Mora

@CarlosMora ne me semble pas. Je n'ai pas compris ce que tu voulais dire ...
giovannipds

J'utilise laravel 6.x et cela fonctionne.
hakiko

laravel 7 fonctionne aussi
alfian5229

intelephense a cessé de surligner Authaprès avoir redémarré VS Code. J'ai fait exactement les étapes indiquées dans cette réponse. Après avoir redémarré VS Code, donnez-lui une minute ou deux et les erreurs devraient disparaître.
agm1984 Il y a

6

Il s'agit vraiment d'un ensemble de configurations permettant à votre éditeur de comprendre Laravel.

Si vous souhaitez tout configurer manuellement, voici le repo . C'est pour le code VS et PhpStorm.

Ou si vous le souhaitez, vous pouvez télécharger ce package (j'ai créé) recommandé de l'installer globalement.

Et puis courez andylaravel setupIDE. cela configurera tout pour vous selon le premier dépôt.


5

Non, les erreurs se produisent uniquement après la mise à jour automatique de l'extension Intelephense.

Pour résoudre le problème, vous pouvez le rétrograder vers la version précédente en cliquant sur "Installer une autre version" dans l'extension Intelephense. Il n'y a aucune erreur sur la version 1.2.3.


1
La rétrogradation vers 1.2.3 a résolu le problème.
Julitillo

2

Si vous voyez cela immédiatement après l'ajout d'une nouvelle classe Vendor, assurez-vous d'exécuter la commande VScode (control-shift-P) Index Workspace


1

Voici que j'ai résolu:

Ouvrez les paramètres d'extension:

entrez la description de l'image ici

Et recherchez la variable que vous souhaitez modifier, et décochez-la / cochez-la

entrez la description de l'image ici

Les variables à considérer sont:

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

1

Pour ceux qui préfèrent rester simple, stupide; Si vous préférez vous débarrasser des notifications au lieu d'installer un assistant ou de rétrograder, désactivez simplement l'erreur dans votre settings.jsonen ajoutant ceci:

"intelephense.diagnostics.undefinedTypes": false

0

1.3.3 l'a corrigé. Mettez simplement à jour votre extension.


pas seulement le mettre à jour, mais vous devez désactiver certaines fonctionnalités comme ce que la réponse de @bmewburn a dit
Adrian Edy Pratama

0

J'ai eu le même problème et les éléments suivants semblent avoir résolu le problème.

a) Mise à jour vers la dernière version 1.3.5 et réactivation de tous les paramètres de diagnostic.

Je recevais toujours les messages

b) Ajout du dossier fournisseur avec les bibliothèques dépendantes à l'espace de travail

Cela semble avoir résolu le problème.


Vous pourriez utiliserlaravel-ide-helper
giovannipds

Merci pour le conseil. J'utilise Symfony dans Drupal. Serait laravel-ide-helper aider?
anoopjohn

0

Pour quiconque traverse ces problèmes et hésite à désactiver un ensemble complet de vérifications, il existe un moyen de transmettre vos propres signatures personnalisées à Intelephense (j'utilise VSCode, mais cela devrait fonctionner de la même manière pour Visual Studio Code).

Copié du commentaire du repo Intelephese (par @KapitanOczywisty):
https://github.com/bmewburn/vscode-intelephense/issues/892#issuecomment-565852100

Pour un espace de travail unique, c'est très simple, vous devez créer un .phpfichier avec toutes les signatures et intelephense les indexera.

Si vous souhaitez ajouter des stubs à l'échelle mondiale, vous pouvez toujours le faire, mais je ne sais pas si c'est la fonctionnalité prévue . Même si intelephense.stubsjette un avertissement sur une valeur incorrecte, vous pouvez en fait y mettre n'importe quel dossier nom de .

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

Remarque: les talons sont actualisés avec ce changement de paramètre.

Vous pouvez jeter un œil aux talons intégrés ici: https://github.com/JetBrains/phpstorm-stubs

Dans mon cas, je avais besoin de dspec describe, beforeEach, it... à ne pas être mis en évidence que des erreurs, donc je viens inclus le fichier avec les signatures /directories_and_paths/app/vendor/bin/dspecdans mes paramètres de l' espace de travail de VSCode, qui avaient les déclarations de fonctions dont je avais besoin:

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

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

// ... and so on
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.