PhpStorm 2020.3: PHP 8, Attributes, PHPStan e Psalm, Xdebug 3, Tailwind CSS e Co-desenvolvimento





Temos o prazer de apresentar o lançamento final principal do PhpStorm este ano! Abaixo do corte está uma análise detalhada de todas as mudanças e novos recursos.







PHP 8



PHP 8.0 lançado. Muito obrigado a todos os contribuidores e gerentes de lançamento!



PhpStorm 2020.3 suporta todas as últimas alterações de idioma. Vamos dar uma olhada no que está disponível e como usá-lo no IDE.



Versão do idioma na barra de status



Agora, a barra de status sempre exibe a versão PHP atual do projeto. Você também pode mudar a versão a partir daí.







Se o botão de rádio não estiver ativo, significa que o limite da versão do PHP está definido em composer.json.



Argumentos nomeados



No PHP 8, argumentos para funções e métodos podem ser passados ​​especificando um nome de parâmetro. As chamadas agora são documentadas automaticamente e os parâmetros opcionais são opcionais no sentido completo da palavra.



Usando a correção rápida Adicionar identificadores de nome , você pode adicionar nomes aos argumentos:







Erros de digitação ou nomes errados de argumentos são destacados:







Se o valor passado corresponder ao valor do parâmetro padrão, você pode removê-lo com segurança: em







vez da matriz de opções, você pode usar argumentos nomeados para passar um conjunto de parâmetros, apenas passando apenas os necessários. Os argumentos passados ​​dessa maneira são seguros para o tipo, ao contrário dos elementos da matriz.







Atributos



Os atributos são uma forma nova e estruturada de especificar metadados em PHP em vez de comentários PHPDoc.



Para criar um atributo, você deve declarar uma classe e adicionar um marcador #[Attribute]



. Aqui o PhpStorm o ajudará com realce, autocompletar código, busca por usos, refatorações e mais.







O próprio PHP apenas verifica a validade dos atributos quando chamado ReflectionAttribute::newInstance()



. E se você não acessar os atributos através do Reflection, eles serão completamente ignorados, para não carregar classes desnecessárias e não criar objetos.



Mas o PhpStorm validará tudo no editor sem executar o Reflection API. As seguintes regras são verificadas:



  • A classe especificada pode realmente ser um atributo.





  • Este atributo se aplica apenas nos locais permitidos: classe, propriedade, método, parâmetro, função ou constante de classe.





  • O atributo é repetido apenas se for declarado com um sinalizador Attribute::IS_REPEATABLE



    .







Aqui estão os atributos em ação com o Symfony:










Atributos do PHP 8 Storm



Vários atributos estão disponíveis no PhpStorm 2020.3 fora da caixa no namespace \JetBrains\PhpStorm\



.



Você pode usá-los imediatamente em sua base de código sem conectar nada.



Mas se você usar outras ferramentas de análise estática e não quiser receber erros de Classe não encontrada , pode valer a pena adicionar o pacote de atributos JetBrains / phpstorm-attribute como uma dependência do composer.json



.





# [Descontinuada]



Use este atributo como uma tag PHPDoc @deprecated para marcar métodos, classes ou constantes de classe que serão removidos no futuro.



A vantagem aqui é que você pode especificar uma substituição para o código obsoleto e será mais fácil para o usuário atualizar.



Vamos dar uma olhada em um exemplo do mundo real. No Symfony 5.2 lançado recentemente , o método está \Symfony\Component\DependencyInjection\Alias::setPrivate()



obsoleto . Se você adicionar um atributo lá #[Deprecated]



, você pode simplificar a migração.



#[Deprecated(
   reason: 'since Symfony 5.2, use setPublic() instead',
   replacement: '%class%->setPublic(!%parameter0%)'
)]

      
      













# [ArrayShape]



Este atributo é útil para trabalhar com estruturas de dados simples ou matrizes semelhantes a objetos quando uma classe não pode ser declarada por algum motivo.



A sintaxe é assim:

#[ArrayShape([
// ‘key’ => ’type’,
   ‘key1’ => ‘int’,
   ‘key2’ => ‘string’,
   ‘key3’ => ‘Foo’,
   ‘key3’ => App\PHP 8\Foo::class,
])]
function functionName(...): array

      
      







O tipo pode ser especificado como string ou como referência de classe na forma de string FQN ou constante ::class



.







A matriz que define a "forma" pode ser colocada em uma constante e reutilizada:



const  MY_ARRAY_SHAPE = [];
#[ArrayShape(MY_ARRAY_SHAPE)]

      
      











No PhpStorm já anotamos #[ArrayShape]



algumas funções padrão do PHP com um atributo , por exemplo parse_url()



.



Felizmente, a sintaxe do atributo de linha única é compatível com versões anteriores. Ou seja, se você escrever #[ArrayShape]



em uma linha em um projeto PHP 7, o interpretador PHP interpretará esta linha como um comentário.



Ao contrário do interpretador PHP, PhpStorm irá analisar os atributos de qualquer maneira! Portanto, mesmo se seu projeto estiver executando PHP 7.4 ou inferior, você ainda se beneficiará com a adição #[ArrayShape]



.





# [Imutável]



Objetos imutáveis ​​não podem ser modificados após a inicialização ou criação. Seu uso torna o estado do programa mais previsível e fácil de depurar.



Um atributo #[Immutable]



pode ser usado para marcar uma classe inteira ou propriedades específicas para indicar que elas não podem ser alteradas.



O PhpStorm verificará o uso de tais objetos e propriedades e destacará as tentativas de modificação.







Alterar uma propriedade por padrão é permitido no construtor, mas também pode ser permitido em métodos privados / protegidos. Isso é feito usando as constantes CONSTRUCTOR_WRITE_SCOPE



, PRIVATE_WRITE_SCOPE



, PROTECTED_WRITE_SCOPE



passado para o construtor #[Immutable]



.









# [Puro]



Este atributo marca funções puras, ou seja, aquelas que não produzem efeitos colaterais. Essas funções podem ser removidas com segurança se o resultado de sua execução não for usado posteriormente.







Se a função estiver marcada como limpa, mas houver uma tentativa de alterar algo fora do escopo externo em seu corpo, o PhpStorm destacará o código não seguro.







Todas as funções padrão do PHP puro já estão marcadas com este atributo no PhpStorm.





# [ExpectedValues]



Usando este atributo, você pode especificar quais valores a função assume como parâmetros e quais valores ela pode retornar.



É praticamente a mesma coisa que acontece expectedArguments()



em .phpstorm.meta.php



. A única diferença é que a metaversão é bastante auxiliar, e o atributo indica rigidamente que não há outros valores possíveis.



Por exemplo, considere a função de contagem:

count ( array|Countable $array_or_countable [, int $mode = COUNT_NORMAL ] ) : int
      
      





Seu segundo argumento é um inteiro, mas na verdade não é um inteiro arbitrário, mas uma das constantes COUNT_NORMAL



ou COUNT_RECURSIVE



.



Veja como o atributo #[ExpectedValues]



vai melhorar a situação:







Ou seja, o preenchimento automático apareceu e, se algo mais for aprovado, o erro é destacado.



Como especificar valores possíveis ou máscaras de bits
:

  • : #[ExpectedValues(values: [1,2,3])]





  • : #[ExpectedValues(values: [‘red’, ‘black’, ‘green’])]





  • : #[ExpectedValues(values: [COUNT_NORMAL, COUNT_RECURSIVE])]





  • : #[ExpectedValues(values: [Code::OK, Code::ERROR])]









:

  • #[ExpectedValues(values: [1,2,3])]



    , .

  • #[ExpectedValues(flags: [1, 2, 3])]



    , , 1 | 3



    .

  • #[ExpectedValues(valuesFromClass: MyClass::class)]



    , `MyClass



    `.

  • #[ExpectedValues(flagsFromClass: ExpectedValues::class)]



    , `MyClass`.







Outro exemplo # [ExpectedValues]



Vamos pegar um ajudante response()



do Laravel. Ele usa o código de status HTTP como o segundo parâmetro.



Existem dois problemas

  • Sem preenchimento automático com códigos possíveis

  • Sem validação de valor no editor









Vamos corrigir isso adicionando o atributo #[ExpectedValues(valuesFromClass: Response::class)]













# [NoReturn]



Algumas funções podem interromper a execução do script. Marcar funções como pontos de saída com um atributo #[NoReturn]



melhora a análise do fluxo de controle.









# [Língua]



Este atributo pode ser adicionado a parâmetros de string que esperam texto em qualquer idioma, como RegExp, SQL, DQL e assim por diante.



Para argumentos, opções de destaque e adicionais serão exibidas.












Vamos voltar aos novos recursos do PHP 8.



Declaração de propriedades no construtor



As propriedades regulares podem ser convertidas em promovidas ou vice-versa usando a correção rápida Converter em propriedade promovida .







PhpStorm garante que as propriedades sejam usadas apenas da maneira permitida no PHP 8:

  • Você só pode declarar propriedades no construtor.

  • Não pode ser declarado em um construtor abstrato.

  • Você não pode declarar uma propriedade variadic dessa maneira.

  • A propriedade não pode ser do tipo 'Callable'.

  • Substituições de propriedade não são permitidas.











Se a propriedade for declarada de uma nova maneira, mas a inicialização permanecer no corpo do construtor, o PhpStorm se oferecerá para excluí-la.







Expressão de correspondência



A nova expressão é semelhante a, switch



mas usa comparação estrita e pode ser atribuída a uma variável ou retornada.



O PhpStorm detecta se um bloco pode switch



ser reescrito match



e fará isso automaticamente com uma correção rápida pressionando Alt + Enter:







Pode ser difícil ver o uso incorreto de uma nova expressão, então o PhpStorm destacará todos os erros.









Valores duplicados serão encontrados nas condições: Uma







expressão de correspondência com uma única ramificação e uma ramificação padrão pode ser substituída com segurança por uma expressão ternária.







E se apenas o branch padrão for deixado, a correspondência não será necessária.







Finalmente, se os corpos forem iguais em ramos diferentes, eles podem ser mesclados.







Operador Nullsafe



Em vez de um monte de condições com uma verificação de nulo, agora você pode usar uma cadeia de chamadas com um novo operador ?->



.



O PhpStorm verificará o uso correto do operador:







Vírgula pendurada



Agora é permitido adicionar uma vírgula após o último argumento ao chamar funções e em uma lista de encerramento use



.







Capturas não capturadas



No PHP 8, você pode capturar uma exceção em um bloco catch sem uma variável.







Jogue expressão



As exceções agora podem ser lançadas em funções de seta e operadores curtos ??



, bem como em ternário ? :



.







Você pode usar uma abreviação thr



e pressionar tab - este é um modelo dinâmico .







Constant :: class em objetos



Anteriormente, para obter o FQN de um objeto, você tinha que usar uma função get_class()



. No PHP 8, a chamada get_class($object)



pode ser substituída com segurança por $object::class



.



Na verdade, pressionando Alt + Enter, essa substituição pode ser feita. O uso incorreto da constante ::class



PhpStorm será destacado.







Novas funções para strings: str_contains (), str_starts_with (), str_ends_with ()



Como posso verificar se uma string contém uma palavra específica? É a pergunta sobre PHP mais vista no Stack Overflow. O PHP 8 tem uma resposta clara para esta pergunta: use uma função str_contains()



.



PhpStorm 2020.3 todas as chamadas strpos()



que podem ser substituídas por str_contains()



:







Existem também novas str_starts_with()



, e str_ends_with()



para determinar se a substring específica da linha inicial ou final. O PhpStorm destaca onde as chamadas substr()



podem ser substituídas por novas alternativas:







Avisos de motor reclassificado



No PHP 8, o tipo de aviso lançado foi revisado para muitos erros. Ou seja, em vez de Aviso em muitos casos, haverá exceção ou erro de tipo.



No PhpStorm, devido a isso, algumas inspeções têm dois níveis de severidade diferentes: para PHP 8 e para versões anteriores.







Esses são todos os mais notáveis ​​do PHP 8. Há um monte de pequenas mudanças que serão visíveis quando você atualizar para o PHP 8.





Suporte de salmos e PHPStan



Ambos os analisadores estáticos podem ser usados ​​no PhpStorm 2020.3 para destacar problemas diretamente no editor.







Se PHPStan ou Salmo forem adicionados como dependências em composer.json



, haverá um ícone de chave inglesa próximo a eles que abre as configurações da ferramenta.







A partir daí, você pode ir para as configurações de inspeção e ativar o realce no editor. Isso é feito selecionando a inspeção apropriada em PHP | Ferramentas de qualidade em Configurações / Preferências | Editor | Inspeções .



️ É melhor ligar apenas um dos instrumentos, em vez de ambos ao mesmo tempo.







Aqui você também pode especificar o caminho para o arquivo de configuração e configurar os argumentos da linha de comando.



️ O PHPStan pode funcionar sem um arquivo de configuração, mas o Salmo o exige. Se houver psalm.xml



ou estiver no diretório raiz phpstan.neon



, o PhpStorm os puxará automaticamente.



Quando tudo estiver configurado, abra qualquer arquivo e você verá um destaque dos analisadores estáticos. Pode haver um pequeno atraso antes que a luz de fundo apareça.







Anotações



Todas as anotações de Salmos @psalm-*



agora estão corretamente destacadas no editor. Mas, em geral, agora você pode remover com segurança o prefixo @psalm-



das tags, ou seja, @psalm-return



-> @return



e @psalm-param



-> @param



.







Suporte de tipo



Adicionamos suporte para alguns tipos de salmos e, com base nas informações das tags, melhoramos nossa inferência de tipo. Isso tornou as verificações, a geração de código e o preenchimento automático mais precisos.



Pseudo-tipos Pseudo-tipos de

salmo são suportados, como escalar, numérico, etc.







Constantes em tipos

Oferece suporte a concatenação e especificação de constantes por meio de *



tagsparam e var...







Dicas de tipo para matrizes Descrições de matrizes também

são array<array-key, Type>



suportadas, incluindo as aninhadas.







Genéricos e @tempate O

suporte genérico é um recurso para usuários avançados que não possui uma especificação correta completa e muitos casos extremos . No entanto, decidimos implementar suporte básico para @template



a sintaxe baseada em Salmos para ver como isso será usado.



Até agora, apenas o caso mais primitivo é suportado, quando a função retorna um de seus parâmetros.







Este suporte genérico é muito básico e experimental. Queremos entender como ele será usado e o que precisa ser implementado primeiro. Adoraríamos ouvir de você, especialmente na forma de casos de uso reais para nosso rastreador .


Xdebug 3



O popular depurador de PHP foi atualizado para torná-lo muito mais rápido e fácil de configurar. Leia mais sobre o Xdebug 3 no guia de atualização .



Para configurar o Xdebug 3, uma opção xdebug.mode agora é suficiente (como esta XDEBUG_MODE=debug



).



Além disso, a porta Xdebug padrão foi alterada: em vez de 9000



agora 9003



. Para simplificar a migração, o PhpStorm escuta em ambas as portas por padrão. As configurações de porta e outras opções do Xdebug podem ser encontradas em Preferências / Configurações | Idiomas e frameworks | PHP | Depurar .









Melhorias no depurador



Os recursos de depuração no PhpStorm foram expandidos com dois novos recursos.



Dicas interativas

Agora no modo de depuração, você pode expandir a saída de variáveis ​​para ver todos os campos. Você também pode alterar os valores ali.







Observações embutidas

Nas versões anteriores, você podia adicionar uma variável ou expressão à lista de observação e observar a mudança de valor passo a passo.



No PhpStorm 2020.3, você pode adicionar relógios diretamente no contexto e eles serão exibidos ao lado do código.



Clique em Adicionar como relógio embutido no pop-up da dica.





Ou clique em Adicionar relógio embutido no menu de contexto do editor.





Ou selecione a variável e selecione Adicionar Observação Inline no menu de contexto .





Destacando e renomeando variáveis ​​no Twig



Selecione uma variável ou coloque o cursor sobre ela e todos os seus usos no modelo serão destacados. E para renomear todas as ocorrências, pressione Shift + F6.









Co-desenvolvimento - Code With Me



PhpStorm 2020.3 vem com o plugin Code With Me , a nova ferramenta de desenvolvimento colaborativo e programação em pares da JetBrains. Com ele, você pode compartilhar um projeto aberto com outros usuários e trabalhar nele em tempo real. Leia mais sobre Code With Me nestas postagens .









Cliente HTTP



Integrando Guzzle com Cliente HTTP em PhpStorm



Guzzle é um dos clientes HTTP mais populares para PHP. Imagine que em algum lugar do código haja uma solicitação HTTP e você queira testá-la sem executar o próprio código. Anteriormente, você teria que copiar todos os parâmetros manualmente.



PhpStorm 2020.3 permite que você converta solicitações simples do Guzzle em arquivos .http. Se a solicitação for compatível, um ícone aparecerá ao lado dela. Ao clicar nele, você abrirá um novo arquivo de trabalho com a URL correta, parâmetros de solicitação, métodos, cabeçalhos, corpo.







Agora, a partir do editor, a consulta pode ser executada e manipulada, e então salva como um arquivo http no projeto.



Mais sobre o cliente HTTP na análise do vídeo .


Copiar solicitação HTTP para cURL



Para exportar a solicitação HTTP para uma string cURL, pressione Alt + Enter na solicitação no editor e selecione Converter em cURL e copiar para a área de transferência . Agora ele pode ser inserido no terminal, documentação ou qualquer ferramenta de teste de API.









editor



Melhorias para Markdown



Você pode usar a sintaxe Mermaid.js em arquivos markdown para descrever tabelas e gráficos . O PhpStorm agora pode renderizar visualizações para eles diretamente no editor. Incluído em Preferências / Configurações | Idiomas e frameworks | Markdown .







Agora também é possível reformatar o conteúdo de arquivos .md de acordo com estilos populares. Feito pressionando ⌘⌥L / Ctrl + Alt + L.



Configurável em Preferências / Configurações | Editor | Estilo de código | Markdown .







Finalmente, se você clicar no botão Visualização de rolagem automática no canto superior direito do editor, a rolagem da visualização e o texto serão sincronizados.



Correção ortográfica e gramatical aprimorada



Erros de digitação e gramática agora podem ser corrigidos muito mais rápido:

  • Primeiro, uma explicação do erro aparecerá em uma janela pop-up.

  • E se você pressionar Alt + Enter no texto destacado, as opções de substituição serão oferecidas na parte superior, e não estarão ocultas em um subitem, como antes.









Divida o editor arrastando e soltando



Para abrir vários arquivos lado a lado, basta arrastar a guia para o canto desejado da tela.







Existe outra maneira de abrir um arquivo no modo dividido - Shift + Enter.

A combinação pode ser clicada no arquivo selecionado na visualização do Projeto ou nos resultados da pesquisa de arquivo.







Guia de visualização



Se você precisa visualizar os arquivos rapidamente, agora não precisa abrir cada um em uma guia separada. Você pode usar a nova guia Visualização .



Para ativá-lo, clique na engrenagem na visualização Projeto e selecione Ativar guia de visualização e Abrir arquivos com um único clique .







Você também pode visualizar os arquivos pressionando a barra de espaço na visualização Projeto sem abri-los.









IDE



Melhorias para pesquisa em todos os lugares





Os resultados são agrupados por relevância:





Você pode fazer operações matemáticas simples sem abrir a calculadora do Google :





Você pode pesquisar pelo histórico do Git:





Mudança automática para tema claro ou escuro



Em Preferências / Configurações | Aparência e comportamento | Aparência | Selecione o tema Sincronizar com o sistema operacional .







Novo conjunto de teclas de atalho para macOS



Um layout de atalho de teclado alternativo para macOS minimiza o uso de teclas de função para que você não precise esticar a mão em todo o teclado ao realizar ações básicas. Por exemplo, em vez de Fn + Shift + F6, a refatoração Renomear usa ⌥ + ⌘ + R.







Palavras em vez de ícones para teclas de atalho do macOS



Você pode fazer com que as palavras Alt, Cmd, etc. apareçam em vez de ícones como ⌘ . Habilitado



na seção Registro pela opção ide.macos.disable.native.shortcut.symbols . Para acessar o registro, use Find Action Cmd + Shift + A e escreva Registry.



Definir PhpStorm como aplicativo padrão para diferentes arquivos



As preferências | Configurações / Editor / Tipos de arquivo clique em Associate file types with PhpStorm… . Na caixa de diálogo, selecione as extensões de arquivo e elas serão abertas no PhpStorm.



É necessário reinicializar no macOS.







Os modelos podem gerar vários arquivos



Você pode gerar simultaneamente vários arquivos de uma vez, por exemplo, um esqueleto para um módulo ou uma visualização de controlador de combinação.



Em Preferências / Configurações | Editor | Clique em Arquivo e Modelos de Código para criar um novo modelo e, a seguir, clique no ícone Criar Arquivo de Modelo Filho . Variáveis ​​de tipo



podem ser usadas no campo Nome do arquivo . E aqui está um exemplo de como gerar um controlador e modelo no Symfony:${NAME}





















Suporte de estágio Git



Você pode ativá-lo marcando a caixa de seleção Ativar área de teste em Preferências / Configurações | Controle de versão | Git .



A janela da ferramenta Commit (Cmd + 0 / Alt + 0) mostrará dois grupos de arquivos: testados e não testados.



Para adicionar um arquivo ao teste , clique no + próximo a ele.







Ou você pode selecionar linhas específicas e adicioná-las com um ícone no editor. Neste caso, você pode confirmar algumas das alterações do arquivo e continuar trabalhando no resto.









Ferramentas DB



PhpStorm inclui recursos do DataGrip prontos para uso , que são abordados na visão geral do lançamento do DataGrip 2020.3 de nossos colegas.



SQL para MongoDB



Agora você pode usar consultas SQL no MongoDB. PhpStorm 2020.3 suporta SELECT-



consultas JOIN



, WHERE



, GROUP BY



, HAVING



, ORDER BY



, LIMIT



,OFFSET



e todos os recursos do MongoDB além mapear, reduzir, filtro, e deixe. Leia mais na postagem do blog .







Rede



Como sempre, PhpStorm inclui todas as atualizações do WebStorm 2020.3 . O mais notável é o suporte para Tailwind CSS.



CSS Tailwind



PhpStorm complementa as classes Tailwind em arquivos HTML e após a diretiva @apply. Ele também fornecerá conclusão de pseudo-classe.



tailwind-complete-after-apply



Se você passar o mouse sobre uma classe em arquivos HTML e CSS, uma visualização do CSS resultante será exibida. A visualização também está disponível durante a conclusão do código, na janela pop-up de documentação F1 / Ctrl + Q.



tailwind-complete-for-pseudo-class-variantes



PhpStorm suporta personalizações de tailwind.config.js. Por exemplo, se você definir um tema com novas cores, na janela pop-up de preenchimento automático serão criadas classes com o nome da cor personalizada.



tailwind-personalização-suporte








Você pode baixar o PhpStorm 2020.3 na página “ Novidades ”.



E aqui está um vídeo (em inglês) mostrando as principais características do lançamento:





Isso é todo esse tempo. Teremos o maior prazer em ter perguntas, desejos, relatórios de bugs e apenas ideias nos comentários.



All Articles