Código do Visual Studio PHP Intelephense Continue mostrando o erro não necessário

142

Após a atualização mais recente do PHP Intelephense que recebo hoje, o intelephense continua mostrando um erro para um símbolo indefinido para minha rota (e para outras classes também), não há nenhum erro como esse antes e está me incomodando.

Aqui está a captura de tela do erro:

insira a descrição da imagem aqui

E este é o meu 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');
});

Na verdade, não há erro neste código, mas o intelephense continua mostrando um erro, então existe uma maneira de corrigir isso?

Adrian Edy Pratama
fonte
I relataram uma questão sobre isso na fila questão da aplicação - github.com/bmewburn/vscode-intelephense/issues/885
anoopjohn
Se você estiver recebendo um erro indefinido no Route api.php, consulte a resposta do @ user12483351 abaixo. Isso consertou para mim. Estou no Intelephese 1.3.6.
dotNET

Respostas:

103

O Intelephense 1.3 adicionou diagnósticos indefinidos de tipo, função, constante, constante de classe, método e propriedade, onde anteriormente no 1.2 havia apenas diagnósticos de variáveis ​​indefinidos.

Algumas estruturas são escritas de maneira a fornecer atalhos convenientes para o usuário, mas dificultam para os mecanismos de análise estática descobrir símbolos disponíveis no tempo de execução.

Geradores de stub como https://github.com/barryvdh/laravel-ide-helper ajudam a preencher a lacuna aqui e, usando isso com o Laravel, cuidará de muitos dos diagnósticos falsos, fornecendo definições concretas de símbolos que podem ser facilmente descobertos.

Ainda assim, o PHP é uma linguagem muito flexível e pode haver outras instâncias de símbolos falsos indefinidos, dependendo de como o código é escrito. Por esse motivo, desde a versão 1.3.3, o intelephense possui opções de configuração para ativar / desativar cada categoria de símbolo indefinido para se adequar ao espaço de trabalho e ao estilo de codificação.

Essas opções são: intelephense.diagnostics.undefinedTypes intelephense.diagnostics.undefinedFunctions intelephense.diagnostics.undefinedConstants intelephense.diagnostics.undefinedClassConstants intelephense.diagnostics.undefinedMethods intelephense.diagnostics.undefinedProperties intelephense.diagnostics.undefinedVariables

Definir tudo isso como false, exceto intelephense.diagnostics.undefinedVariablesfornecerá o comportamento da versão 1.2. Consulte a interface do usuário das configurações do VSCode e procure intelephense.

bmewburn
fonte
Passou alguns dias com alertas irritantes, agora com a atualização recente 1.3.3 - está tudo ok .. Obrigado @bmewburn
Tariqul Islam
11
Obrigado pela configuração separada, por enquanto eu desativei undefinedMethods, pois o intelephense não pode detectar o laravel helper auth()->user()como classe \ App \ User, portanto, chamar o método dentro de \ App \ User de auth()->user()será detectado como erro. Acabei de adicionar use Illuminate\Support\Facades\Route;minhas rotas para corrigir um erro de rota de símbolo indefinido.
Christhofer Natalius 13/12/19
2
Obrigado por isso. Para a minha configuração, apenas diable intelephense.diagnostics.undefinedMethodse intelephense.diagnostics.undefinedTypefunciona.
Kamudrikah
laravel-ide-helpercorrigiu o aviso. Obrigado!
giovannipds
Só era necessário gerar o _ide_helper.phpconforme sugerido nos documentos.
giovannipds
121

A versão 1.3.0 tem falha no IMO.
O downgrade para a versão 1.2.3 corrige meu problema.

Estou dentro

  • Laravel 5.1
  • PHP 5.6.40

Faça o downgrade para a versão 1.2.3

Robin1990
fonte
3
Sim, eu acho que essa é a melhor resposta, o problema é a nova versão
Adrian Edy Pratama
Sim! Eu tive exatamente esse mesmo problema, que começou há uma hora quando o Intelephense foi atualizado para a 1.3.0 - a atualização para a 1.2.3 corrigiu.
Leo
11
O mesmo para mim. Estou trabalhando em um projeto no PHP 5.3.3. Uma vez que 1.3 foi instalado erros em todos os lugares. Definir a versão do PHP para 5.3.3 na configuração da extensão Intelephense ("intelephense.environment.phpVersion": "5.3.3") não fez nada. A reversão para a versão 1.2.3 corrigiu.
Ben
2
@ Alex Existem outros problemas. Você receberá erros nos escopos de consulta, etc. Isso não é apenas fachadas.
Miloslav Milo Janoušek,
2
O Intelephense 1.3.3 adiciona mais opções de configuração para se adequar ao seu espaço de trabalho e estilo de codificação. Agora, cada categoria de diagnóstico indefinido pode ser ativada / desativada para se adequar.
bmewburn
19

Você não precisa fazer o downgrade, você pode:

Desative o diagnóstico de símbolo indefinido nas configurações - "intelephense.diagnostics.undefinedSymbols": false.

Ou use um auxiliar de ide que adicione stubs para fachadas de laravel. Consulte https://github.com/barryvdh/laravel-ide-helper

Nacho
fonte
3
IDE Helper não resolve os problemas com fecho de rota ou outros dispositivos de fecho, mas você vai se deparar outros erros ao usar eloquente escopos etc.
Miloslav Milo Janoušek
3
Portanto, para resolver um problema, precisamos perder diagnósticos verdadeiros. De jeito nenhum Josei!
Carlos Mora
Eu instalei o IDE Helper e gerei o arquivo conforme as instruções .. isso está em um projeto do Laravel. Parecia não mudar nada e ainda tinha símbolos indefinidos em todo o lugar. Então, eu
rebaixei
15
use Illuminate\Support\Facades\Route;

Aviso Desapareceu após a importação do espaço para nome correspondente.

Versão

  • Larvel 6+
  • vscode versão 1.40.2
  • php intelephense 1.3.1
user12483351
fonte
Isso realmente resolve o problema. Para comandos dentro do console.php, ele também funciona com: use Illuminate \ Support \ Facades \ Artisan;
Alex
Isso não é recomendado. laravel-ide-helperconfiguração é
giovannipds
Adicionar isso resolveu o problema de Route, mas eu tive o mesmo erro de Auth, então adicionei use Illuminate\Support\Facades\Auth;também. Problema resolvido.
Daydah 28/01
13

1.3.1 corrigiu.

Basta atualizar sua extensão e você deve estar pronto

Souljacker
fonte
22
Já estou na v1.3.1, mas o erro continua aparecendo.
ultrasamad
Eu também, há uma correção ou devemos fazer o downgrade?
tonix
3
Para mim, isso não resolve nada. Voltando à 1.2.3, tudo bem!
Carlos Mora
11
1.3.1 ainda tem esse problema para mim. 1.2.3 corrigido
ponteiro NULL
2
Estou no 1.3.2 e ainda não corrigido. Redefinido para 1.2.3.
Alex
12

Esta solução pode ajudá-lo se você souber que seus problemas estão limitados a Fachadas e estiver executando o Laravel 5.5 ou superior.

Instale laravel-ide-helper

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

Adicione esta instrução condicional ao seu AppServiceProviderregistro da classe auxiliar.

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

Em seguida, execute php artisan ide-helper:generatepara gerar um arquivo para ajudar o IDE a entender Fachadas. Você precisará reiniciar o Visual Studio Code.

Referências

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

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

AC Patrice
fonte
11
O probelm com este é que você começa duplicado definições
Carlos Mora
@CarlosMora não parece para mim. Eu não entendi o que você quis dizer ...
giovannipds
Estou usando o laravel 6.xe funciona.
hakiko 19/02
o laravel 7 também funciona
alfian5229 8/04
O intelephense parou de destacar Authapós reiniciar o VS Code. Eu fiz exatamente as etapas mostradas nesta resposta. Após reiniciar o VS Code, aguarde um ou dois minutos e os erros devem ser resolvidos.
agm1984
6

Este é realmente um conjunto de configurações para o seu editor entender o Laravel.

Se você deseja configurar tudo manualmente, aqui está o repo . Isso é para o código VS e o PhpStorm.

Ou, se você quiser, pode baixar este pacote . (Eu criei) recomendado para instalá-lo globalmente.

E então apenas corra andylaravel setupIDE. isso configurará tudo para você de acordo com o primeiro repositório.

Andy Song
fonte
5

Não, os erros ocorrem somente depois que a extensão Intelephense é atualizada automaticamente.

Para resolver o problema, você pode fazer o downgrade para a versão anterior clicando em "Instalar outra versão" na extensão Intelephense. Não há erros na versão 1.2.3.

exyna
fonte
11
O downgrade para a versão 1.2.3 resolveu o problema.
Julitillo #
2

Se você vir isso imediatamente após adicionar uma nova classe de fornecedores, execute o comando VScode (control-shift-P) Index Workspace

Snapey
fonte
1

Aqui está eu resolvido:

Abra as configurações de extensão:

insira a descrição da imagem aqui

E procure a variável que você deseja alterar e desmarcou / marcou

insira a descrição da imagem aqui

As variáveis ​​que você deve considerar são:

intelephense.diagnostics.undefinedTypes 
intelephense.diagnostics.undefinedFunctions         
intelephense.diagnostics.undefinedConstants         
intelephense.diagnostics.undefinedClassConstants 
intelephense.diagnostics.undefinedMethods 
intelephense.diagnostics.undefinedProperties 
intelephense.diagnostics.undefinedVariables
Elia Weiss
fonte
1

Para aqueles que preferem manter as coisas simples, estúpidas; Se você preferir se livrar dos avisos em vez de instalar um auxiliar ou fazer um downgrade, simplesmente desative o erro settings.jsonadicionando o seguinte:

"intelephense.diagnostics.undefinedTypes": false
Conrad Warhol
fonte
0

1.3.3 corrigiu. Atualize sua extensão.

Hossein
fonte
não apenas atualizá-lo, mas você deve desabilitar alguns recursos como o que resposta @bmewburn disse
Adrian Edy Pratama
0

Eu tive o mesmo problema e o seguinte parecia ter resolvido o problema.

a) Atualizado para a versão mais recente 1.3.5 e reativou todas as configurações de diagnóstico.

Eu ainda estava recebendo as mensagens

b) Adicionada a pasta do fornecedor com as bibliotecas dependentes ao espaço de trabalho

Isso parece ter resolvido o problema.

anoopjohn
fonte
Você poderia usarlaravel-ide-helper
giovannipds
Obrigado pela dica. Estou usando o Symfony dentro do Drupal. O laravel-ide-helper ajudaria?
anoopjohn
0

Para quem passa por esses problemas e se sente desconfortável em desabilitar todo um conjunto de verificações, existe uma maneira de passar suas próprias assinaturas personalizadas para o Intelephense (eu uso o VSCode, mas deve funcionar da mesma forma para o Visual Studio Code).

Copiado do comentário do Intelephese repo (por @KapitanOczywisty):
https://github.com/bmewburn/vscode-intelephense/issues/892#issuecomment-565852100

Para um espaço de trabalho único, é muito simples, você precisa criar um .phparquivo com todas as assinaturas e o intelephense as indexará.

Se você deseja adicionar stubs globalmente, ainda pode, mas não tenho certeza se é o recurso pretendido . Mesmo que seja intelephense.stubsemitido um aviso sobre valor incorreto, você poderá colocar qualquer nome de pasta .

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

Nota: os stubs são atualizados com esta alteração de configuração.

Você pode dar uma olhada nos stubs incorporados aqui: https://github.com/JetBrains/phpstorm-stubs

No meu caso, eu precisava de dspec describe, beforeEach, it... para não ser destacados como erros, então eu só incluiu o arquivo com as assinaturas /directories_and_paths/app/vendor/bin/dspecem minhas configurações de espaço de trabalho do VSCode, que tinham as declarações de função que eu precisava:

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

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

// ... and so on
jpenna
fonte