PhpStorm 2020.2: tipos concatenados PHP 8, novo mecanismo de fluxo de controle, solicitações pull do GitHub, OpenAPI





Olá, Habr! Temos o prazer de apresentar o segundo grande lançamento do PhpStorm este ano!



Abaixo do corte está uma análise detalhada de todas as mudanças notáveis ​​e novos recursos. Cuidado - muitas fotos.



Tipos de união em PHP 8



O PHP 8 terá tantos recursos novos que é até uma nova linguagem até certo ponto. Começamos a implantar o suporte para os oito primeiros e o primeiro grande recurso foram os tipos mesclados.



Tipos concatenados T1|T2|...podem ser usados ​​onde quer que os tipos possam ser especificados agora: em argumentos, propriedades e valores de retorno. Nesse caso, a variável pode assumir um dos tipos listados.



Na verdade, tipos concatenados têm sido usados ​​no PHPDoc por um longo tempo, mas agora o interpretador irá realmente verificá-los em tempo de execução.



Mudando a versão do idioma



Para ver todas as possibilidades, você pode alternar manualmente a versão do idioma para PHP 8 em Languages ​​& Frameworks | PHP | Nível de linguagem PHP .



Ou se o código já tem o uso de novos recursos, então você pode alternar usando a correção rápida (Alt + Enter).



E se a versão do PHP for especificada em composer.json, o PhpStorm a puxará automaticamente.







Convertendo PHPDoc em Tipos Combinados Nativos



Você pode chamar uma correção rápida (Alt + Enter) em uma tag PHPDoc que possui um tipo combinado.







Removendo PHPDoc desnecessário



Se o PHPDoc continha apenas declarações de tipo, agora ele pode ser removido como correção rápida redundante (Alt + Enter).







Essa exclusão sempre pode ser considerada segura e feita automaticamente antes de confirmar? Estamos considerando adicionar esse recurso.


Validação de tipo



O PhpStorm costumava ser capaz de analisar tipos e encontrar violações com base nas informações das tags PHPDoc. Com as declarações nativas, essas possibilidades se expandiram.



As verificações são feitas para tudo: propriedades, argumentos, valores de retorno.







Isso é especialmente útil em código complexo, onde as violações não são imediatamente óbvias.







O pseudo tipo falso



Algumas funções legadas podem retornar falseem caso de erro. Por exemplo, esta é a forma como eles se comportam strpos(), array_search()e 310 outras funções padrão.



Nesse caso, seria possível especificar o tipo de retorno como concatenado, por exemplo int|bool, mas na verdade trueele nunca estará lá.



Para tais casos, um pseudótipo foi introduzido false. Ele só pode ser usado em junções. Caso contrário, o PhpStorm destacará o código inválido.







Tipos duplicados e redundantes



Muitas combinações em uniões de tipo são proibidas ou simplesmente desnecessárias. Por exemplo:



  • bool|false- porque false está incluído em bool;
  • Foo|Fooou int|string|INT- repetição;
  • object|User- objectconscientemente contém tudo o mais;
  • iterable|arrayou iterable|Traversable- iterableinclui array e Traversable;
  • void - só pode ser usado no valor de retorno e apenas por si;
  • falseou null- apenas como parte de uma associação.




PhpStorm irá destacar todas essas violações.







Tipos anuláveis



A sintaxe antiga ?Typeagora é considerada uma abreviação de Type|null.



Mas a abreviação c ?não pode ser usada em junções, porque há uma ambigüidade insolúvel.



Para esses casos, o PhpStorm tem uma solução rápida (Alt + Enter).







Alterando tipos com herança



Existem duas regras para os métodos:



O tipo de parâmetro é contravariante , ou seja, pode ser estendido.







O tipo de retorno é covariante , ou seja, só pode ser reduzido.







Nesse caso, a ordem dos tipos não importa e é Type1|Type2equivalente Type2|Type1.



O tipo de propriedade não pode ser alterado O

tipo de uma propriedade herdada deve ser reduzido ao pai, por exemplo:







Novo mecanismo de controle de fluxo



Uma atualização do mecanismo de fluxo de controle tornou possível adicionar novas inspeções e corrigir muitos bugs antigos. Como resultado, o PhpStorm entende o código ainda melhor.



Em alguns locais será possível perceber realces e avisos de novas inspeções. Alguns deles podem exigir sua atenção como fontes potenciais de bugs. Consertar outros apenas tornará o código mais limpo.



Aqui estão alguns exemplos de inspeções.



A variável é sempre verdadeira ou falsa

Exemplo no arquivo Parser.php de doctrine / orm.







A condição é sempre verdadeira

Exemplo no arquivo FormValidator.php do symfony / form. O







resultado da instância é sempre verdadeiro

Exemplo no arquivo Logger.php do symfony / monolog-bridge.







$thissempre será do tipoResetInterfaceporque aquele é mais alto na hierarquia.







Expression é sempre null

Exemplo no arquivo ProcessUtils.php do symfony / process.







Nova ação: Informações de tipo (⌃⇧P / Ctrl + Shift + P)

Você pode passar o cursor sobre qualquer expressão e chamar esta ação para ver que tipo o PhpStorm inferiu para a expressão. Disponível no menu Exibir | Digite Informações ou pela tecla de atalho ⌃⇧P / Ctrl + Shift + P.







Melhorias no compositor



Desde a versão 2020.1, todas as ações com dependências do Composer podem ser realizadas diretamente no PhpStorm no arquivo composer.json. Existem várias melhorias nesta versão.



Suporte para repositórios personalizados Satis / Packagist

Se você especificar uma fonte personalizada na seção “repositórios”, o auto- completar de código estará disponível para todos os pacotes a partir dele. As informações de pacote e versão serão armazenadas em cache no PhpStorm.







Além disso, quando várias versões são especificadas

Se as versões forem listadas separadas por vírgulas ou ||barra vertical ( ), o PhpStorm agora funcionará corretamente e mostrará as opções disponíveis.







Link para o código e o site

Cada pacote no pop-up com informações possui links para sites.







Configurações de ferramentas de qualidade de código

Se na lista de dependências existem ferramentas de qualidade de código que são suportadas no PhpStorm, então ao lado delas haverá um ícone com uma chave inglesa para ir para as configurações.







Melhorias nas ferramentas de qualidade de código



A propósito, sobre ferramentas de qualidade. PhpStorm 2020.2 tem algumas adições úteis.



Docker Compose

suporta PHP_CodeSniffer, PHP CS Fixer e PHP Mess Detector podem ser executados via docker compose.







Listas de exceções para PHP_CodeSniffer

Se ruleset.xmlhouver uma seção no custom "exclude-pattern", agora ela será levada em consideração e os arquivos nos caminhos especificados não serão analisados ​​no IDE.



A formatação por meio de um intérprete remoto

PHP CS Fixer e PHPCBF pode ser executada com um intérprete via SSH, Docker, Docker Compose, Vagrant e outros.



Ferramentas de linha de comando



Todos os comandos Symfony, Laravel Artisan, Drupal Drush, WP-CLI e scripts do Composer podem ser executados muito rapidamente no PhpStorm sem abrir um terminal.



Para fazer isso, adicione a ferramenta apropriada em Ferramentas | Suporte a ferramenta de linha de comando .



Em seguida, clicando em, a Ctrl-Ctrllinha Executar qualquer coisa aparece , na qual todos os comandos com preenchimento automático estão disponíveis.



A partir desta versão, você nem precisa configurar nada para Symfony, Laravel e Drush. Basta abrir o projeto, clicar Ctrl-Ctrle começar a digitar o comando.







️ Para Laravel no macOS, o arquivo artisandeve ser executável ( chmod +x artisan).



Além disso, as ferramentas agora podem ser executadas por meio de qualquer interpretador remoto (SSH, Docker, Docker Compose, Vagrant). Por exemplo, você pode testar rapidamente seu aplicativo PHP 8 adicionando um interpretador Docker de uma imagem php:rc-cli.



Nova refatoração: extração de classe



As aulas parecem organizadas e limpas no início. Então, mais e mais novos métodos e propriedades são adicionados a eles e, mais cedo ou mais tarde, a classe já está "inchada" e sobrecarregada com responsabilidades de todos os lados.



Alocar vários métodos e propriedades relacionados em uma nova classe pode ajudar aqui. Isso é exatamente o que a nova refatoração Extract Class oferece.



Para experimentar, dentro da classe você precisa clicar Ctrl+Te selecionar Extrair Classe . PhpStorm solicitará que você insira o nome da nova classe, e você pode selecionar imediatamente mais métodos e classes para recuperar.







Essa refatoração também funciona para funções regulares.



E mais para PHP



Nova inspeção: a propriedade digitada pode não estar atribuída



Se uma propriedade digitada for declarada, mas não inicializada, uma tentativa de lê-la resultará em um erro TypeError(a menos que um mágico seja definido __get()). PhpStorm destacará a leitura de propriedades não inicializadas.







Nova inspeção: matriz usada apenas com acesso de gravação



Exemplo do arquivo SchemaTool.php de doctrine / orm.







A matriz $pkColumnsno método é gatherColumns()atualizada, mas nunca lida.



Customizando getters e setters gerados



Agora você pode personalizar a nomenclatura do método escolhendo entre camelCase()e snake_case().



E também personalizar a ordem em que são adicionados à classe.



Ambas as opções estão disponíveis no Editor | Estilo de código | PHP na guia Geração de código .







Resolução correta para muitos projetos em uma janela



Se você abrir vários projetos em uma janela, poderá frequentemente ver erros de que a classe foi definida várias vezes. E ao tentar chegar à definição de uma classe, você ainda tinha que escolher qual.



O PhpStorm 2020.2 não tem esses bugs e a transição funciona conforme o esperado.







Prioridade inferior para classes do fornecedor



Na lista de preenchimento automático, a prioridade será dada às classes diretamente do projeto, e as entidades da pasta vendore arquivos PHAR irão com uma classe inferior .



Adicionar cursor a todas as linhas selecionadas



A nova ação Adicionar acento circunflexo por linha selecionada adiciona um cursor no final de cada linha selecionada e o desmarca. Pode ser invocado usando as teclas ⌥⇧G / Alt + Shift + G.







Suporte total para solicitações pull do GitHub



O suporte à solicitação básica de pull apareceu no PhpStorm 2018.3. Houve atualizações desde então, mas muitas ações ainda exigiam a mudança para o navegador.



No PhpStorm 2020.2, todo o trabalho de solicitação de pull pode ser feito diretamente no IDE!







Você pode acessar solicitações pull do VCS | Git | Veja as solicitações pull , na barra de ferramentas ou clicando em Alt+7. O primeiro será uma lista de solicitações disponíveis com opções de pesquisa e filtragem.



Clicar em uma solicitação de pull abrirá informações detalhadas sobre ela: revisores, tags, arquivos alterados, linha do tempo.



Todo o fluxo da revisão pode ser feito ali mesmo. Inicie e solicite uma revisão, comente sobre as mudanças na linha ou no nível de confirmação, envie uma revisão, mescle.



Os resultados das verificações, incluindo aqueles do IC, serão exibidos na linha do tempo.



Anteriormente, para mesclar uma solicitação pull, você precisava criar um branch local. Agora não é necessário e você pode mesclar pressionando um botão.



Suporte OpenAPI



O plugin de especificações OpenAPI está disponível para todos os IDEs JetBrains e funciona desde 2020.2. Nos arquivos de especificação Open API ( openapi.yaml/ openapi.jsone swagger.yaml/ swagger.json), ele fornece destaque, aumento, validação e navegação.



Além disso, as seguintes opções estão disponíveis:



  • Integração com Swagger UI - renderiza diretamente na janela IDE.
  • Geração de código.
  • Diferença estrutural para especificações OpenAPI - permite detectar rapidamente mudanças significativas.
  • Ícones Gatter para criar solicitações rapidamente em um cliente HTTP.
  • Conclusão de endpoints no cliente HTTP.
  • Renomear refatoração - se você renomear um endpoint em uma especificação, ele será automaticamente renomeado na solicitação do cliente HTTP.








Novo widget de inspeção



O canto superior direito do editor agora exibe um widget com o número de problemas no arquivo atual.



Usando as setas, você pode pular rapidamente para o próximo problema / anterior (anteriormente, isso poderia ser feito com as teclas F2/ Shift+F2).



No widget, você pode escolher qual nível de problema será mostrado, por exemplo, apenas erros de sintaxe ou todos os problemas.



E clicando no widget, uma nova janela de Problemas será aberta com uma lista de todos os problemas detectados no arquivo.







Controle de versão



Git do WSL 2



PhpStorm agora é capaz de usar o binário WSL Git. Além disso, o próprio IDE determina se WSL está instalado e se o Git está disponível nele.



As configurações estão disponíveis em Preferências | Controle de versão | Git .



️ Git funcionará apenas com WSL2, porque Git de WSL1 é instável e pode levar a resultados incorretos de comandos Git.



IU aprimorada para comparar branches



PhpStorm permite que você compare quaisquer branches e veja quais commits foram para um ou outro. Para fazer isso, selecione qualquer ramificação disponível no pop-up VCS | Ramificações e selecione Comparar com a atual no menu de contexto .



No PhpStorm 2020.2, os logs e diferenças de commits serão exibidos diretamente no editor. Isso permite que mais informações sejam exibidas na tela.







Diálogos de comando atualizados



Os diálogos para os comandos Git Merge, Pull e Rebase foram reprojetados e unificados. Adicionadas opções ausentes e agora você pode ver o comando Git completo que será executado.



Todos os comandos estão disponíveis no VCS | Git .







Nova ação: remover commit



Um commit local extra ou temporário agora pode ser removido diretamente do log no PhpStorm. Para fazer isso, selecione Abandonar commit no menu de contexto no commit .







Nova ação: mesclar commits em um (squash)



Você também pode combinar vários commits em um. Por exemplo, pode ser conveniente limpar o histórico antes de criar uma solicitação pull ou antes de enviar alterações. Selecione



vários commits no log e selecione Squash Commits ... no menu de contexto.







Para ambas as ações, os bastidores estão prontos git rebase.



Ferramentas DB



O PhpStorm pronto para uso inclui quase todos os recursos do DataGrip que são abordados na visão geral do lançamento do DataGrip 2020.2 de nossos colegas.



Rede



E, como sempre, todas as atualizações do WebStorm 2020.2 estão incluídas no PhpStorm também. Por exemplo, usando um plug - in , o Prettier também pode ser usado como o formatador padrão para arquivos PHP.






Você pode baixar o PhpStorm 2020.2 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. Obrigado por ler até o fim! Teremos o maior prazer em ter perguntas, desejos, relatórios de bugs e apenas ideias nos comentários.



Sua equipe JetBrains PhpStorm



All Articles