Visual Studio Code PHP Intelephense continua a mostrare errori non necessari


142

Dopo l'ultimo aggiornamento di PHP Intelephense che ricevo oggi, l'intelephense continua a mostrare un errore per un simbolo indefinito per il mio percorso (e anche per altre classi), non c'è nessun errore come questo prima e mi dà fastidio.

Ecco lo screenshot dell'errore:

inserisci qui la descrizione dell'immagine

E questo è il mio codice:

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

In realtà non c'è errore in questo codice ma l'intelephense continua a mostrare un errore, quindi c'è un modo per risolvere questo problema?


Ho segnalato un problema al riguardo nella coda dei problemi dell'applicazione - github.com/bmewburn/vscode-intelephense/issues/885
anoopjohn

Se api.phpricevi un errore indefinito su Route nel tuo , vedi la risposta di @ user12483351 di seguito. Ciò ha risolto il problema per me. Sono su Intelephese 1.3.6.
dotNET,

Risposte:


103

Intelephense 1.3 ha aggiunto il tipo non definito, la funzione, la costante, la costante di classe, il metodo e la diagnostica delle proprietà, dove in precedenza in 1.2 esisteva solo la diagnostica variabile non definita.

Alcuni framework sono scritti in modo da fornire comode scorciatoie per l'utente, ma rendono difficile per i motori di analisi statiche scoprire i simboli disponibili in fase di esecuzione.

Generatori di stub come https://github.com/barryvdh/laravel-ide-helper aiutano a colmare il vuoto qui e l'utilizzo di questo con Laravel si occuperà di molti dei falsi diagnostici fornendo definizioni concrete di simboli che possono essere facilmente scoperti.

Tuttavia, PHP è un linguaggio molto flessibile e potrebbero esserci altri casi di simboli falsi indefiniti a seconda di come viene scritto il codice. Per questo motivo, dalla 1.3.3, intelephense ha opzioni di configurazione per abilitare / disabilitare ciascuna categoria di simboli indefiniti per adattarsi allo spazio di lavoro e allo stile di codifica.

Queste opzioni sono: intelephense.diagnostics.undefinedTypes intelephense.diagnostics.undefinedFunctions intelephense.diagnostics.undefinedConstants intelephense.diagnostics.undefinedClassConstants intelephense.diagnostics.undefinedMethods intelephense.diagnostics.undefinedProperties intelephense.diagnostics.undefinedVariables

L'impostazione di tutti questi su false, tranne intelephense.diagnostics.undefinedVariablesper il comportamento della versione 1.2. Vedi l'interfaccia utente delle impostazioni VSCode e cerca intelephense.


Sono passati alcuni giorni con fastidiosi avvisi, ora con il recente aggiornamento 1.3.3 - va tutto bene .. Grazie @bmewburn
Tariqul Islam

1
Grazie per la configurazione separata, per ora ho disabilitato undefinedMethods poiché intelephense non è in grado di rilevare l'helper laravel auth()->user()come classe \ App \ User, pertanto il metodo di chiamata all'interno di \ App \ User auth()->user()verrà rilevato come errore. Ho appena aggiunto i use Illuminate\Support\Facades\Route;miei percorsi per correggere un errore di percorso dei simboli indefinito.
Christhofer Natalius,

2
Grazie per questo. Per la mia installazione, basta diable intelephense.diagnostics.undefinedMethodse intelephense.diagnostics.undefinedTypefunziona.
Kamudrikah,

laravel-ide-helperriparato l'avvertimento. Grazie!
giovannipds,

Ho solo bisogno di generare il _ide_helper.phpcome suggerito sui documenti.
giovannipds,

121

La versione 1.3.0 ha un difetto IMO.
Il downgrade alla versione 1.2.3 risolve il mio problema.

Sono su

  • Laravel 5.1
  • PHP 5.6.40

Esegui il downgrade alla versione 1.2.3


3
Sì, penso che questa sia la risposta migliore, il problema è la nuova versione
Adrian Edy Pratama,

Sì! Ho avuto esattamente lo stesso problema, che è iniziato un'ora fa quando Intelephense è stato aggiornato alla 1.3.0 - il downgrade alla 1.2.3 ha risolto il problema.
leo

1
Stessa cosa per me. Sto lavorando a un progetto in PHP 5.3.3. Una volta 1.3 sono stati installati errori ovunque. Impostare la versione di PHP su 5.3.3 nell'impostazione dell'estensione Intelephense ("intelephense.environment.phpVersion": "5.3.3") non ha fatto nulla. Il ripristino della versione 1.2.3 è stato risolto.
Ben

2
@Alex Ci sono altri problemi. Riceverai errori per gli ambiti di query ecc. Non si tratta solo di facciate.
Miloslav Milo Janoušek,

2
Intelephense 1.3.3 aggiunge ulteriori opzioni di configurazione per adattarsi allo spazio di lavoro e allo stile di codifica. Ogni categoria di diagnostica non definita può ora essere abilitata / disabilitata per adattarsi.
Bmewburn,

19

Non è necessario il downgrade è possibile:

Disabilitare la diagnostica dei simboli non definita nelle impostazioni - "intelephense.diagnostics.undefinedSymbols": false.

Oppure usa un aiutante ide che aggiunge tronconi per facciate in laravel. Vedi https://github.com/barryvdh/laravel-ide-helper


3
IDE Helper risolve i problemi con la chiusura del percorso o altre chiusure, ma incontrerai altri errori durante l'utilizzo di ambiti eloquenti ecc.
Miloslav Milo Janoušek,

3
Quindi, per risolvere un problema, dobbiamo perdere la vera diagnostica. In nessun modo Josei!
Carlos Mora,

Ho installato IDE Helper e generato il file secondo le istruzioni .. questo è su un progetto Laravel. Sembrava non cambiare nulla e aveva ancora simboli indefiniti in tutto il luogo. Quindi ho declassato a 1.2.3
vesperknight il

15
use Illuminate\Support\Facades\Route;

Avviso Scomparsa dopo l'importazione dello spazio dei nomi corrispondente.

versione di

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

Questo in realtà risolve il problema. Per i comandi all'interno di console.php funziona anche con: usa Illuminate \ Support \ Facades \ Artisan;
Alex,

Questo non è raccomandato laravel. laravel-ide-helperla configurazione è.
giovannipds

L'aggiunta di questo ha risolto il problema Route, ma ho avuto lo stesso errore per Auth, quindi ho aggiunto use Illuminate\Support\Facades\Auth;anche. Problema risolto.
Daydah,

13

1.3.1 risolto.

Aggiorna la tua estensione e dovresti essere a posto


22
Sono già su v1.3.1 ma l'errore continua a mostrare.
ultrasamad

Anche io, c'è una soluzione o dovremmo effettuare il downgrade?
tonix,

3
Per me non risolve nulla. Tornare alla 1.2.3 va bene!
Carlos Mora,

1
1.3.1 ha ancora questo problema per me. 1.2.3 risolto
Puntatore NULL

2
Sono su 1.3.2 e ancora NON risolto. Ridimensionato a 1.2.3.
Alex

12

Questa soluzione può aiutarti se sai che i tuoi problemi sono limitati a Facciate e stai eseguendo Laravel 5.5 o versioni successive.

Installa laravel-ide-helper

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

Aggiungi questa istruzione condizionale nel tuo AppServiceProviderper registrare la classe helper.

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

Quindi esegui php artisan ide-helper:generateper generare un file per aiutare l'IDE a comprendere le facciate. Sarà necessario riavviare il codice di Visual Studio.

Riferimenti

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

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


1
Il problema con questo è che ottieni definizioni duplicate
Carlos Mora,

@CarlosMora non mi sembra. Non ho capito cosa volevi dire ...
giovannipds il

Sto usando laravel 6.x e funziona.
hakiko,

funziona anche laravel 7
alfian5229

intelephense ha smesso di evidenziare Auth dopo aver riavviato VS Code. Ho fatto esattamente i passaggi indicati in questa risposta. Dopo aver riavviato VS Code, assegnagli un minuto o due e gli errori dovrebbero essere eliminati.
agm1984

6

Questo è davvero un insieme di configurazioni per il tuo editor per capire Laravel.

Se vuoi configurarlo tutto manualmente, ecco il repository . Questo è sia per il codice VS che per PhpStorm.

Oppure, se lo desideri, puoi scaricare questo pacchetto . (Ho creato) consigliato di installarlo a livello globale.

E poi corri e basta andylaravel setupIDE. questo configurerà tutto per te secondo il repository pugno.


5

No, gli errori si verificano solo dopo l'aggiornamento automatico dell'estensione Intelephense.

Per risolvere il problema, è possibile eseguire il downgrade alla versione precedente facendo clic su "Installa un'altra versione" nell'estensione Intelephense. Non ci sono errori sulla versione 1.2.3.


1
Il downgrade a 1.2.3 ha risolto il problema.
Julitillo,

2

Se lo vedi subito dopo aver aggiunto una nuova classe Vendor, assicurati di eseguire il comando VScode (control-shift-P) Index Workspace


1

Ecco che ho risolto:

Apri le impostazioni dell'estensione:

inserisci qui la descrizione dell'immagine

E cerca la variabile che desideri modificare e deselezionala / spuntata

inserisci qui la descrizione dell'immagine

Le variabili che dovresti considerare sono:

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

1

A quelli preferirebbe mantenerlo semplice, stupido; Se preferisci sbarazzarti degli avvisi invece di installare un helper o il downgrade, disabilita semplicemente l'errore nel tuo settings.jsonaggiungendo questo:

"intelephense.diagnostics.undefinedTypes": false

0

1.3.3 risolto. Aggiorna la tua estensione.


non basta aggiornarlo, ma è necessario disabilitare alcune funzionalità come quella che ha detto la risposta di @bmewburn
Adrian Edy Pratama,

0

Ho avuto lo stesso problema e sembrava aver risolto il problema.

a) Aggiornato all'ultima versione 1.3.5 e riattivato tutte le impostazioni di diagnosi.

Stavo ancora ricevendo i messaggi

b) Aggiunta la cartella del fornitore con le librerie dipendenti nell'area di lavoro

Questo sembra aver risolto il problema.


Puoi usarelaravel-ide-helper
giovannipds il

Grazie per il consiglio. Sto usando Symfony all'interno di Drupal. Laravel-ide-helper sarebbe d'aiuto?
anoopjohn

0

Per chiunque stia affrontando questi problemi e non sia sicuro di disabilitare un intero set di controlli, c'è un modo per farlo passare le tue firme personalizzate a Intelephense (io uso VSCode, ma dovrebbe funzionare lo stesso per Visual Studio Code).

Copiato dal commento del repository Intelephese (di @KapitanOczywisty):
https://github.com/bmewburn/vscode-intelephense/issues/892#issuecomment-565852100

Per singolo spazio di lavoro è molto semplice, devi creare .php file con tutte le firme e intelephense le indicizzerà.

Se si desidera aggiungere gli stub a livello globale, è ancora possibile, ma non sono sicuro che si tratti di funzionalità . Anche se intelephense.stubsgenera un avviso relativo a un valore errato, in effetti è possibile inserire qualsiasi nome di cartella .

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

Nota: gli stub vengono aggiornati con questa modifica alle impostazioni.

Puoi dare un'occhiata agli stub incorporati qui: https://github.com/JetBrains/phpstorm-stubs

Nel mio caso, avevo bisogno di DSPEC describe, beforeEach, it... per non essere evidenziati come errori, così ho incluso il file con le firme /directories_and_paths/app/vendor/bin/dspecnei miei impostazioni dell'area di lavoro di VSCode, che avevano le dichiarazioni di funzione di cui avevo bisogno:

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

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

// ... and so on
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.