Eseguire il refactoring del codice Python in Visual Studio

Il riutilizzo del codice esistente e l'aggiornamento del codice sono attività comuni per gli sviluppatori. È possibile effettuare il refactoring del codice esistente per un altro scopo e risparmiare tempo senza scrivere tutto il nuovo codice. È possibile pulire il codice per rimuovere gli elementi inutilizzati o aggiornare le importazioni e i metodi in modo che siano aggiornati con le versioni recenti.

Visual Studio offre diversi comandi che consentono di trasformare e pulire automaticamente il codice sorgente Python:

Prerequisiti

  • Visual Studio. Per installare il prodotto, seguire la procedura descritta in Installare Visual Studio.
  • Accesso a un progetto di codice Python con codice esistente.

Rinominare una classe, un metodo o una variabile

È possibile usare il comando Rinomina per modificare il nome di un identificatore specifico, tra cui una classe, un metodo o una variabile. Visual Studio supporta l'aggiornamento di tutte le istanze dell'identificatore o solo delle istanze specifiche indicate.

I passaggi seguenti illustrano come usare il comando Rinomina nel codice.

  1. Nel codice fare clic con il pulsante destro del mouse sull'identificatore da rinominare e scegliere Rinomina. È anche possibile posizionare il cursore su un identificatore e selezionare Modifica>refactoring>Rinomina dal menu oppure usare il tasto di scelta rapida F2.

  2. Nella finestra di dialogo Rinomina immettere il nuovo nome per l'identificatore e selezionare OK:

    Screenshot that shows how to specify a different name for an identifier in Visual Studio 2019.

  3. Nella finestra di dialogo successiva selezionare i file e le istanze nel codice che devono usare il nuovo nome. È possibile selezionare una singola istanza per visualizzare in anteprima la modifica specifica:

    Screenshot that shows how to apply the new name to specific instances of an identifier and preview the changes in Visual Studio 2019.

  4. Selezionare Applica per apportare le modifiche nei file di codice sorgente.

  1. Nel codice fare clic con il pulsante destro del mouse sull'identificatore da rinominare e scegliere Rinomina. È anche possibile posizionare il cursore su un identificatore e selezionare Modifica>refactoring>Rinomina dal menu oppure usare il tasto di scelta rapida CTRL+R.

  2. Nella finestra di dialogo Rinomina digitare il nuovo nome per l'identificatore seguito da Invio:

    Screenshot that shows how to specify a different name for an identifier in Visual Studio 2022.

Aggiungere un'istruzione import

Se nel codice sono presenti identificatori mancanti o informazioni sul tipo di supporto, Visual Studio può aiutare a risolvere il problema. Quando si posiziona il cursore su un identificatore che non contiene informazioni, Visual Studio mostra uno smart tag (lampadina) a sinistra del codice. Il tag elenca i comandi per aggiungere le istruzioni o from ... import necessarie import per l'identificatore corrispondente.

I passaggi seguenti illustrano come usare lo smart tag per aggiungere importazioni nel codice.

  1. Nel codice posizionare il cursore su un identificatore per il quale Visual Studio visualizza lo smart tag (lampadina). In questo esempio, lo smart tag viene visualizzato per la chiamata al modulo matematico:

    Screenshot that shows the smart tag for an identifier that needs an import statement added in Visual Studio 2019.

    Screenshot that shows the smart tag for an identifier that needs an import statement added in Visual Studio 2022.

  2. Nel menu smart tag selezionare il comando per aggiungere il modulo o le informazioni sul tipo necessarie al file di codice. In questo esempio viene selezionato il comando per aggiungere l'istruzione import math .

    Visual Studio offre la funzione di completamento di import per i pacchetti e i moduli di primo livello nel progetto corrente e nella libreria standard. Visual Studio offre from ... import anche completamenti per sottomoduli e sottopacchetto e membri del modulo. I completamenti includono funzioni, classi o dati esportati.

  3. Dopo aver selezionato un'opzione, verificare che la modifica prevista venga apportata al file.

    Visual Studio aggiunge l'istruzione all'inizio import del file di codice dopo altre importazioni o in un'istruzione esistente from ... import se lo stesso modulo è già importato. In questo esempio l'istruzione import math viene aggiunta all'inizio del file dopo le altre importazioni:

    Screenshot that shows the import statement added after running the command from the smart tag in Visual Studio 2019.

    Screenshot that shows the import statement added after running the command from the smart tag in Visual Studio 2022.

Visual Studio tenta di filtrare i membri non definiti in un modulo. Un esempio è quello di un modulo importato in un altro modulo che non è figlio del modulo di importazione. Molti moduli usano l'istruzione import sys anziché from xyz import sys. Non viene visualizzato un completamento per l'importazione del sys modulo da altri moduli anche se manca un __all__ membro che esclude il sys modulo.

Analogamente, Visual Studio filtra le funzioni importate da altri moduli o dallo spazio dei nomi predefinito. Se un modulo importa la settrace funzione dal sys modulo, in teoria, è possibile importare la funzione da tale modulo. Tuttavia, l'approccio migliore consiste nell'usare direttamente l'istruzione import settrace from sys , quindi Visual Studio offre in modo specifico tale istruzione.

Si supponga infine che un modulo venga normalmente escluso, ma che contenga altri valori inclusi come un nome assegnato con un valore nel modulo. Visual Studio esclude comunque l'importazione. Questo comportamento presuppone che il valore non debba essere esportato perché un altro modulo lo definisce. È probabile che un'altra assegnazione sia un valore fittizio che non viene esportato.

Rimuovi importazioni

Quando si scrive codice, è facile finire con import istruzioni per i moduli che non vengono usati affatto. Poiché Visual Studio analizza il codice, può determinare automaticamente se è necessaria un'istruzione import esaminando se il nome importato viene usato all'interno dell'ambito dopo l'esecuzione dell'istruzione.

I passaggi seguenti illustrano come rimuovere le importazioni inutilizzate nel codice.

  1. Usare il pulsante destro del mouse in un punto qualsiasi dell'editor e scegliere Rimuovi importazioni. È possibile rimuovere l'importazione da Tutti gli ambiti o solo dall'ambito corrente.

    Screenshot that shows how to access the Remove Imports menu in Visual Studio 2019.

    Visual Studio determina se nel codice sono presenti moduli inutilizzati e rimuove le istruzioni corrispondenti import .

  2. Dopo aver selezionato un'opzione, verificare che le modifiche previste vengano apportate al file. In questo esempio Visual Studio rimuove i tre moduli inutilizzati: binascii, array e glob.

    Screenshot that shows the results of using the Remove Imports command to remove unused modules from the code in Visual Studio 2019.

  1. Nel codice posizionare il cursore su un'istruzione import per la quale Visual Studio visualizza lo smart tag (lampadina). In questo esempio, lo smart tag viene visualizzato per i moduli inutilizzati binascii, array e glob:

    Screenshot that shows how to access options to remove unused imports in Visual Studio 2022.

  2. Selezionare l'opzione Rimuovi tutte le importazioni inutilizzate o Rimuovi importazione inutilizzata per rimuovere solo il modulo selezionato.

  3. Dopo aver selezionato un'opzione, verificare che le modifiche vengano apportate al file. In questo esempio Visual Studio rimuove i tre moduli inutilizzati: binascii, array e glob.

    Screenshot that shows the results of using the Remove all unused imports command in Visual Studio 2022.

Considerazioni sull'uso dei comandi di refactoring

Prima di usare i comandi di refactoring, esaminare le considerazioni seguenti.

  • Dopo aver eseguito un comando di refactoring, è possibile ripristinare le modifiche usando il comando Modifica>annulla . Il comando Rinomina offre una funzionalità di anteprima , in modo da poter visualizzare le modifiche prima che vengano applicate.

  • Visual Studio non tiene conto del flusso di controllo nel codice. Se si usa un identificatore prima che la definizione di supporto sia presente nel codice, ad esempio un'istruzione import , Visual Studio elabora comunque l'identificatore come usato. Visual Studio prevede di trovare definizioni di supporto per gli identificatori prima di effettuare chiamate e assegnazioni.

  • Visual Studio ignora tutte le from __future__ istruzioni import. Queste istruzioni sono importazioni eseguite all'interno di una definizione di classe o tramite istruzioni using from ... import * .