Refatorar código Python no Visual Studio
A reutilização de código existente e a atualização de código são tarefas comuns para desenvolvedores. Talvez você queira refatorar um código existente para dar outra finalidade a ele e economizar tempo por não precisar escrever um código novo do zero. Talvez você queira limpar um código com o intuito de retirar itens não usados ou atualizar importações e métodos para que sejam atualizados com as versões recentes.
O Visual Studio fornece vários comandos para ajudar a transformar e limpar código-fonte Python automaticamente:
- Renomear altera o nome de uma classe, um método ou uma variável.
- Adicionar importação fornece uma marcação inteligente para adicionar uma importação ausente.
- Remover importações não utilizadas exclui importações não utilizadas.
Pré-requisitos
- Visual Studio. Para instalar o produto, siga as etapas em Instalar o Visual Studio.
- Acesso a um projeto com código Python existente.
Renomear uma classe, um método ou uma variável
Use o comando Renomear para modificar o nome de um identificador, incluindo uma classe, um método ou uma variável. O Visual Studio é compatível tanto com a atualização de todas as instâncias do identificador quanto com a atualização de instâncias específicas que você indicar.
As etapas a seguir mostram como utilizar o comando Renomear em um código.
No código, clique com o botão direito do mouse no identificador que deseja renomear e escolha Renomear. Também é possível posicionar o cursor em um identificador e escolher Editar>Refatorar>Renomear no menu ou utilizar o atalho do teclado F2.
Na caixa de diálogo Renomear, insira o novo nome do identificador e selecione OK:
Na caixa de diálogo seguinte, escolha os arquivos e as instâncias do código que devem usar o novo nome. É possível selecionar uma instância para pré-visualizar uma alteração específica:
Selecione Aplicar para fazer as alterações nos arquivos de código-fonte.
No código, clique com o botão direito do mouse no identificador que deseja renomear e escolha Renomear. Também é possível posicionar o cursor em um identificador e escolher Editar>Refatorar>Renomear no menu ou utilizar o atalho do teclado Ctrl+R..
Na caixa de diálogo Renomear, digite o novo nome do identificador e pressione Enter:
Adicionar uma instrução de importação
Caso existam identificadores sem definições ou informações complementares sobre tipo no código, o Visual Studio poderá ajudar você a corrigir o problema. Posicione o cursor em um identificador sem informações para que o Visual Studio mostre uma marcação inteligente (lâmpada) à esquerda do código. A marcação lista comandos para adicionar as instruções import
ou from ... import
necessárias para o identificador correspondente.
As etapas a seguir mostram como usar a marcação inteligente a fim de adicionar importações ao código.
No código, posicione o cursor em um identificador para o qual o Visual Studio exibe a marcação inteligente (lâmpada). Nesse exemplo, a marcação inteligente é exibida para a chamada do módulo math:
No menu da marcação inteligente, escolha o comando para adicionar o módulo necessário ou digite informações no arquivo do código. Nesse exemplo, o comando para adicionar a instrução
import math
é selecionado.O Visual Studio oferece conclusões
import
para módulos e pacotes de nível superior no projeto atual e na biblioteca padrão. O Visual Studio também oferece conclusõesfrom ... import
para submódulos e subpacotes, bem como para membros do módulo. As conclusões incluem funções, classes e dados exportados.Após selecionar uma opção, confirme se a alteração esperada acontece no arquivo.
O Visual Studio adiciona a instrução
import
no topo do arquivo de código após outras importações ou em uma instruçãofrom ... import
existente se o mesmo módulo já foi importado. Nesse exemplo, a instruçãoimport math
é adicionada no topo do arquivo, depois das outras importações:
O Visual Studio tenta filtrar os membros que não estão definidos em nenhum módulo. Um exemplo é um módulo importado em outro módulo que não é filho do módulo importador. Vários módulos utilizam a instrução import sys
em vez de from xyz import sys
. Você não vê a conclusão da importação do módulo sys
de outros módulos, mesmo que os módulos não tenham um membro __all__
que exclua o módulo sys
.
Da mesma forma, o Visual Studio filtra funções importadas de outros módulos ou do namespace interno. Se um módulo importa a função settrace
do módulo sys
, em teoria, é possível importá-la desse módulo. Entretanto, a melhor abordagem é utilizar a instrução import settrace from sys
diretamente, por isso o Visual Studio oferece especificamente essa instrução.
Por fim, suponha que um módulo normalmente é excluído, mas ele tem outros valores que são incluídos, como um nome atribuído com um valor no módulo. O Visual Studio exclui a importação mesmo assim. Esse comportamento pressupõe que o valor não deve ser exportado porque outro módulo o define. É provável que outra atribuição seja um valor fictício que também não é exportado.
Remover importações não utilizadas
Ao escrever código, é fácil acabar tendo instruções import
para módulos que não estão sendo usadas. Como o Visual Studio analisa o código, ele pode determinar automaticamente se uma instrução import
é necessária, observando se o nome importado é usado dentro do escopo abaixo, no qual a instrução ocorre.
As etapas a seguir mostram como eliminar importações não usadas no código.
Clique com o botão direito do mouse em qualquer lugar do editor e escolha Remover Importações. É possível remover a importação de Todos os Escopos ou somente do Escopo Atual.
O Visual Studio determina se há módulos não usados no código e remove as instruções
import
correspondentes.Após selecionar uma opção, confirme se as alterações esperadas acontecem no arquivo. Nesse exemplo, o Visual Studio elimina os três módulos não usados: binascii, array e glob.
No código, posicione o cursor em uma instrução
import
para a qual o Visual Studio exibe a marcação inteligente (lâmpada). Nesse exemplo, a marcação inteligente é exibida para os módulos não usados binascii, array e glob:Escolha as opções Excluir todas as importações não usadas ou Remover importação não usada para eliminar apenas o módulo selecionado.
Após selecionar uma opção, confirme se as alterações acontecem no arquivo. Nesse exemplo, o Visual Studio elimina os três módulos não usados: binascii, array e glob.
Considerações a respeito do uso dos comandos de refatoração
Antes de usar os comandos de refatoração, examine as seguintes considerações.
Após a execução de um comando de refatoração, é possível reverter as alterações usando o comando Editar>Desfazer. O comando Renomear oferece um recurso Pré-visualizar, para que você possa ver as alterações antes que elas sejam aplicadas.
O Visual Studio não considera o fluxo de controle no código. Se você utilizar um identificador antes que a definição complementar exista no código, como uma instrução
import
, o Visual Studio processará o identificador como utilizado mesmo assim. O Visual Studio espera encontrar definições complementares para os identificadores antes que você faça chamadas e atribuições.O Visual Studio ignora todas as instruções de importação
from __future__
. Essas instruções são importações executadas dentro de uma definição de classe ou por meio de instruçõesfrom ... import *
.