Visual Studio Code PHP Intelephense sigue mostrando error no necesario


142

Después de la última actualización de PHP Intelephense que recibo hoy, el intelephense sigue mostrando un error para un símbolo indefinido para mi ruta (y otra clase también), no hay ningún error como este antes y me está molestando.

Aquí está la captura de pantalla de error:

ingrese la descripción de la imagen aquí

Y este es mi código:

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 realidad no hay ningún error en este código, pero la intelephense sigue mostrando un error, ¿hay alguna forma de solucionarlo?


He informado un problema sobre esto en la cola de problemas de la aplicación - github.com/bmewburn/vscode-intelephense/issues/885
anoopjohn

Si obtiene un error indefinido en la ruta en su api.php, consulte la respuesta de @ user12483351 a continuación. Eso me lo arregló. Estoy en Intelephese 1.3.6.
dotNET

Respuestas:


103

Intelephense 1.3 agregó diagnósticos indefinidos de tipo, función, constante, constante de clase, método y propiedades, donde anteriormente en 1.2 solo había diagnósticos variables indefinidos.

Algunos marcos están escritos de una manera que proporciona accesos directos convenientes para el usuario, pero dificulta que los motores de análisis estático descubran símbolos que están disponibles en tiempo de ejecución.

Los generadores de código auxiliar como https://github.com/barryvdh/laravel-ide-helper ayudan a llenar el vacío aquí y usar esto con Laravel se encargará de muchos de los diagnósticos falsos al proporcionar definiciones concretas de símbolos que se pueden descubrir fácilmente.

Aún así, PHP es un lenguaje muy flexible y puede haber otras instancias de símbolos falsos indefinidos dependiendo de cómo se escriba el código. Por esta razón, desde 1.3.3, intelephense tiene opciones de configuración para habilitar / deshabilitar cada categoría de símbolo indefinido para adaptarse al espacio de trabajo y al estilo de codificación.

Estas opciones son: intelephense.diagnostics.undefinedTypes intelephense.diagnostics.undefinedFunctions intelephense.diagnostics.undefinedConstants intelephense.diagnostics.undefinedClassConstants intelephense.diagnostics.undefinedMethods intelephense.diagnostics.undefinedProperties intelephense.diagnostics.undefinedVariables

Establecer todo esto en falso excepto intelephense.diagnostics.undefinedVariablesdará el comportamiento de la versión 1.2. Consulte la IU de configuración de VSCode y busque intelephense.


Pasaron unos días con alertas molestas, ahora con la reciente actualización 1.3.3 - todo está bien .. Gracias @bmewburn
Tariqul Islam

1
Gracias por una configuración separada, por ahora deshabilité undefinedMethods ya que intelephense no puede detectar laravel helper auth()->user()como class \ App \ User, por lo que el método de llamada dentro de \ App \ User auth()->user()se detectará como error. Acabo de agregar use Illuminate\Support\Facades\Route;en mis rutas para corregir el error de ruta de símbolo indefinido.
Christhofer Natalius

2
Gracias por esto. Para mi configuración, solo diable intelephense.diagnostics.undefinedMethodsy intelephense.diagnostics.undefinedTypefunciona.
kamudrikah

laravel-ide-helperArreglado el aviso. ¡Gracias!
giovannipds

Solo necesitaba generar el _ide_helper.phpcomo se sugiere en los documentos.
giovannipds

121

La versión 1.3.0 tiene defectos IMO.
La degradación a la versión 1.2.3 soluciona mi problema.

Estoy en

  • Laravel 5.1
  • PHP 5.6.40

Degradar a la versión 1.2.3


3
Sí, creo que esta es la mejor respuesta, el problema es la nueva versión
Adrian Edy Pratama, el

¡Si! Tuve exactamente el mismo problema, que comenzó hace una hora cuando Intelephense se actualizó a 1.3.0; la degradación a 1.2.3 lo solucionó.
leo

1
Lo mismo para mi. Estoy trabajando en un proyecto en PHP 5.3.3. Una vez que se instaló 1.3 errores en todas partes. Configurar PHP versión 5.3.3 en la configuración de extensión Intelephense ("intelephense.environment.phpVersion": "5.3.3") no hizo nada. Volviendo a 1.2.3 lo arregló.
Ben

2
@ Alex Hay otros problemas. Obtendrá errores para los ámbitos de consulta, etc. Esto no son solo fachadas.
Miloslav Milo Janoušek

2
Intelephense 1.3.3 agrega más opciones de configuración para adaptarse a su espacio de trabajo y estilo de codificación. Cada categoría de diagnóstico indefinido ahora se puede habilitar / deshabilitar para adaptarse.
bmewburn

19

No necesita rebajar, puede:

Deshabilite el diagnóstico de símbolo indefinido en la configuración: "intelephense.diagnostics.undefinedSymbols": falso.

O use un ayudante ide que agregue trozos para fachadas laravel. Ver https://github.com/barryvdh/laravel-ide-helper


3
IDE ayudante no resuelve los problemas con el cierre de ruta o demás dispositivos de cierre, pero que se ejecutará a través de otros errores durante el uso elocuente alcances etc.
Miloslav Milo Janoušek

3
Entonces, para resolver un problema, debemos perder los diagnósticos verdaderos. De ninguna manera Josei!
Carlos Mora

Instalé IDE Helper y generé el archivo según las instrucciones ... esto está en un proyecto de Laravel. Parecía no cambiar nada y todavía tenía símbolos indefinidos por todo el lugar. Así que
bajé

15
use Illuminate\Support\Facades\Route;

Advertencia Desapareció después de importar el espacio de nombres correspondiente.

Versiones

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

Esto realmente resuelve el problema. Para los comandos dentro de console.php también funciona con: use Illuminate \ Support \ Facades \ Artisan;
Alex

Esto no se recomienda laravel. laravel-ide-helperla configuración es
giovannipds

Agregar esto resolvió el problema Route, pero tuve el mismo error Auth, así que también agregué use Illuminate\Support\Facades\Auth;. Problema resuelto.
Daydah

13

1.3.1 lo arregló.

Simplemente actualice su extensión y debería estar listo para comenzar


22
Ya estoy en v1.3.1 pero el error sigue apareciendo.
ultrasamad

Yo también, ¿hay alguna solución o deberíamos rebajar?
tonix

3
Para mí no resuelve nada. ¡Volver a 1.2.3 va bien!
Carlos Mora

1
1.3.1 todavía tiene este problema para mí. 1.2.3 lo arregló
puntero NULL el

2
Estoy en 1.3.2 y todavía NO estoy arreglado. Re-degradado a 1.2.3.
Alex

12

Esta solución puede ayudarlo si sabe que sus problemas están limitados a Fachadas y está ejecutando Laravel 5.5 o superior.

Instalar laravel-ide-helper

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

Agregue esta declaración condicional en su AppServiceProviderpara registrar la clase auxiliar.

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

Luego, ejecute php artisan ide-helper:generatepara generar un archivo para ayudar al IDE a comprender las fachadas. Deberá reiniciar Visual Studio Code.

Referencias

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

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


1
El problema con esto es que obtienes definiciones duplicadas
Carlos Mora

@CarlosMora no me parece. No entendí lo que
querías

Estoy usando laravel 6.xy funciona.
hakiko

laravel 7 también funciona
alfian5229

Intelephense dejó de resaltar Authdespués de reiniciar VS Code. Hice exactamente los pasos que se muestran en esta respuesta. Después de reiniciar VS Code, espere un minuto o dos y los errores deberían desaparecer.
agm1984 hace

6

Este es realmente un conjunto de configuraciones para que su editor entienda Laravel.

Si desea configurarlo todo manualmente, aquí está el repositorio . Esto es tanto para el código VS como para PhpStorm.

O si lo desea, puede descargar este paquete . (Creé) recomienda instalarlo globalmente.

Y luego solo corre andylaravel setupIDE. esto configurará todo para usted de acuerdo con el primer repositorio.


5

No, los errores ocurren solo después de que la extensión Intelephense se actualiza automáticamente.

Para resolver el problema, puede degradarlo a la versión anterior haciendo clic en "Instalar otra versión" en la extensión Intelephense. No hay errores en la versión 1.2.3.


1
La degradación a 1.2.3 resolvió el problema.
Julitillo

2

Si ve esto inmediatamente después de agregar una nueva clase de proveedor, asegúrese de ejecutar el comando VScode (control-shift-P) Index Workspace


1

Aquí está resuelto:

Abra la configuración de extensión:

ingrese la descripción de la imagen aquí

Y busque la variable que desea cambiar, y desmarque / marque

ingrese la descripción de la imagen aquí

Las variables que debe considerar son:

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

1

A los que prefieren mantenerlo simple, estúpido; Si prefiere deshacerse de los avisos en lugar de instalar un asistente o una degradación, simplemente deshabilite el error settings.jsonagregando esto:

"intelephense.diagnostics.undefinedTypes": false

0

1.3.3 lo arregló. Simplemente actualice su extensión.


no solo actualícelo, sino que debe deshabilitar algunas funciones como lo que dijo la respuesta @bmewburn
Adrian Edy Pratama

0

Tuve el mismo problema y lo siguiente parecía haber solucionado el problema.

a) Se actualizó a la última versión 1.3.5 y volvió a habilitar todas las configuraciones de diagnóstico.

Seguía recibiendo los mensajes

b) Se agregó la carpeta del proveedor con las bibliotecas dependientes al espacio de trabajo

Esto parece haber resuelto el problema.


Podrías usarlaravel-ide-helper
giovannipds

Gracias por el consejo. Estoy usando Symfony dentro de Drupal. ¿Laravel-ide-helper ayudaría?
anoopjohn

0

Para cualquiera que esté pasando por estos problemas y se sienta incómodo al deshabilitar un conjunto completo de comprobaciones, hay una manera de pasar sus propias firmas personalizadas a Intelephense (uso VSCode, pero debería funcionar igual para Visual Studio Code).

Copiado del comentario del repositorio de Intelephese (por @KapitanOczywisty):
https://github.com/bmewburn/vscode-intelephense/issues/892#issuecomment-565852100

Para un solo espacio de trabajo es muy simple, debe crear un .phparchivo con todas las firmas e intelephense los indexará.

Si desea agregar stubs a nivel mundial, aún puede hacerlo, pero no estoy seguro de si es la función prevista . Incluso si intelephense.stubsarroja una advertencia sobre un valor incorrecto, de hecho, puede poner cualquier nombre de carpeta .

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

Nota: los resguardos se actualizan con este cambio de configuración.

Puede echar un vistazo a los apéndices incorporados aquí: https://github.com/JetBrains/phpstorm-stubs

En mi caso, necesitaba de dspec describe, beforeEach, it... a no ser señalados como los errores, por lo que sólo incluía el archivo con las firmas /directories_and_paths/app/vendor/bin/dspecen la configuración del espacio de trabajo de mis VSCode, que tenían las declaraciones de funciones que necesitaba:

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

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

// ... and so on
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.