Modificare ed effettuare il refactoring del codice C++ in Visual Studio

Visual Studio offre diversi strumenti che consentono di scrivere, modificare ed effettuare il refactoring del codice.

IntelliSense

IntelliSense è uno strumento di completamento codice avanzato che suggerisce automaticamente simboli e frammenti di codice durante la digitazione. IntelliSense C++ in Visual Studio viene eseguito in tempo reale e analizza la codebase aggiornata fornendo raccomandazioni. L'inserimento di un maggior numero di caratteri riduce l'elenco dei risultati raccomandati.

Screenshot dell'elenco a discesa C più membri che mostra i metodi disponibili per la stringa, ad esempio append, assign e così via.

Alcuni simboli vengono omessi automaticamente per limitare i risultati. Ad esempio, quando si accede ai membri di un oggetto classe dall'esterno della classe, non sarà possibile visualizzare i membri privati per impostazione predefinita o i membri protetti (se non si è nel contesto di una classe figlio). È possibile modificare il filtro usando i pulsanti nella parte inferiore.

Dopo aver scelto il simbolo dall'elenco a discesa, è possibile completare automaticamente il simbolo con Tab, Invio o uno degli altri caratteri di commit (per impostazione predefinita: { } [ ] ( ) . , : ; + - * / % & | ^ ! = ? @ # \). Per aggiungere o rimuovere caratteri da questo elenco, cercare "IntelliSense" in Avvio rapido (CTRL+Q) e scegliere l'opzione Editor > di testo C/C++ > Avanzate . L'opzione Caratteri commit elenco membri consente di personalizzare l'elenco apportando le modifiche desiderate.

L'opzione Modalità filtro elenchi di membri controlla il tipo di suggerimenti del completamento automatico di IntelliSense visualizzati. Per impostazione predefinita, è impostato su Fuzzy. In una ricerca fuzzy se è presente un simbolo denominato MyAwesomeClass, è possibile digitare "MAC" e trovare la classe nei suggerimenti del completamento automatico. L'algoritmo fuzzy imposta una soglia minima che i simboli devono soddisfare per essere visualizzati nell'elenco. Il filtro Intelligenti visualizza tutti i simboli che contengono sottostringhe corrispondenti a quanto digitato. Il filtro Prefisso esegue la ricerca di stringhe che iniziano con quanto digitato.

Per altre informazioni su IntelliSense C++, vedere IntelliSense Visual C++ e Configurare un progetto C++ per IntelliSense.

IntelliCode

IntelliCode è IntelliSense con il supporto per l'intelligenza artificiale. Inserisce il candidato più probabile nella parte superiore dell'elenco di completamento. I suggerimenti di IntelliCode si basano su migliaia di progetti open source in GitHub, ciascuno con più di 100 stelle. Con l'aggiunta del contesto del codice, l'elenco di completamento viene adattato per promuovere le procedure comuni.

Durante la scrittura di codice C++, IntelliCode è utile quando si usano librerie comuni, ad esempio la libreria standard C++. Il contesto del codice viene usato per offrire i suggerimenti più utili per primi. Nell'esempio seguente la size funzione membro viene comunemente usata con la sort funzione , quindi viene visualizzato all'inizio dell'elenco risultati.

Screenshot dell'elenco a discesa C più IntelliCode che mostra i membri della classe vector ordinata in base ai quali vengono usati più comunemente nel codice.

In Visual Studio 2022 e Visual Studio 2019, IntelliCode è disponibile come componente facoltativo nel carico di lavoro Sviluppo di applicazioni desktop C++ . Per assicurarsi che IntelliCode sia attivo per C++, passare a Strumenti>Opzioni>IntelliCode>Generale e impostare il modello di base C++ su Abilitato.

In Visual Studio 2017 IntelliCode è disponibile come estensione in Visual Studio Marketplace.

IntelliSense predittivo (sperimentale)

IntelliSense predittivo è una funzionalità sperimentale che usa il riconoscimento del contesto per limitare il numero di risultati visualizzati nell'elenco a discesa di IntelliSense. L'algoritmo applica la corrispondenza di tipo in modo da visualizzare solo i risultati che corrispondono al tipo previsto. Nel caso più semplice se si digita int x = e si richiama l'elenco a discesa di IntelliSense, vengono visualizzati solo numeri interi o funzioni che restituiscono numeri interi. Questa funzionalità è disattivata per impostazione predefinita perché è ancora in fase di sviluppo. Funziona meglio con i simboli globali; le funzioni membro non sono ancora supportate. È possibile attivarla digitando "Predittivo" in Avvio veloce o scegliendo Strumenti>Opzioni>Editor di testo>C/C++>Sperimentale> Abilita IntelliSense predittivo.

Per eseguire l'override di Predictive IntelliSense e visualizzare l'elenco più lungo, premere CTRL+J. Se IntelliSense predittivo è attivato, richiamare CTRL+J rimuove il filtro predittivo. Premendo di nuovo CTRL+J si rimuove il filtro di accessibilità dai risultati Elenco membri dove pertinente. Il pulsante ([+]) nell'elenco a discesa IntelliSense equivale a CTRL+J. Passare il puntatore del mouse sul pulsante per visualizzare le informazioni sulla descrizione comando su ciò che viene visualizzato.

Screenshot di C più IntelliSense predittivo.

Lo screenshot precedente mostra diversi pulsanti sotto l'elenco a discesa. Questi pulsanti abilitano i filtri di IntelliSense per i diversi tipi di risultati:

  • Variabili e costanti
  • Funzioni
  • Tipi
  • Macro
  • Enumerazioni
  • Spazi dei nomi

Viene visualizzato un pulsante solo se è rilevante per la sessione IntelliSense corrente. In genere non vengono visualizzati tutti i pulsanti contemporaneamente.

IntelliSense per i modelli

La barra del modello è un elemento dell'interfaccia utente visualizzato quando il cursore si trova in una definizione di modello. È utile perché è possibile fornire argomenti modello di esempio per intellisense che verranno visualizzati quando si modifica il corpo del modello. Ad esempio, è possibile specificare che un argomento modello è di tipo std::vector<int>. Quindi, quando si usa tale argomento nel corpo del modello, verranno visualizzati i membri di std::vector<int>intellisense.

Screenshot della barra del modello con l'opzione Aggiungi tutte le istanze esistenti evidenziate.

Fare clic sull'icona <T> per espandere/comprimere la barra dei modelli. Fare clic sull'icona della matita o fare doppio clic sulla barra dei modelli per aprire la finestra Modifica in cui si specificano i tipi di argomento per i parametri.

Screenshot dell'esperienza di modifica all'interno della barra del modello in cui si immette un tipo per ogni parametro di modello.

La barra dei modelli può popolare automaticamente i tipi di parametro in base alle istanze del modello nel codice. Fare clic su Aggiungi tutte le creazioni di istanza esistenti per visualizzare un elenco di tutti gli argomenti concreti usati per creare un'istanza del modello nella codebase.

Screenshot dei risultati di Template IntelliSense che elenca i diversi tipi usati per creare un'istanza del parametro di modello C, ad esempio C = AmbientLight, C = Candela e altri.

Una finestra nella parte inferiore dell'editor visualizza la posizione in cui è stata trovata ogni creazione di istanza con i relativi argomenti. È possibile selezionare una creazione di istanze per passare alla posizione nel codice in cui è stata trovata tale istanza.

Screenshot dell'elenco delle istanze del modello nel codice. Vengono elencati l'istanza, il file, il percorso e gli argomenti.

Le informazioni sulla barra dei modelli sono specifiche dell'utente. Viene archiviato nella .vs cartella e non viene eseguito il commit nel controllo del codice sorgente.

Controllo ortografia e correzioni rapide

Se rileva problemi nel codice, l'editor aggiunge linee a zigzag colorate che indicano la posizione del problema. Le linee a zigzag rosse indicano un codice che non verrà compilato. Le linee a zigzag verdi indicano altri tipi di problemi che potrebbero essere potenzialmente pericolosi. È possibile visualizzare la finestra Elenco errori per ottenere altre informazioni sui problemi.

Per alcuni tipi di errori e modelli di codifica comuni, l'editor offrirà una correzione rapida sotto forma di lampadina visualizzata quando si passa il puntatore del mouse sulla sottolineatura ondulata. Fare clic sulla freccia verso il basso per visualizzare i suggerimenti.

Nell'esempio seguente poiché è stato dichiarato un vector ma non è stata trovata alcuna definizione, l'editor suggerisce di includere il file di intestazione necessario:

Screenshot di un errore e della correzione rapida proposta per #include vector.

L'editor offre anche correzioni rapide per alcune opportunità di refactoring. Ad esempio, se si dichiara una classe in un file di intestazione, Visual Studio suggerisce di creare una definizione in un file separato con estensione cpp.

Screenshot che mostra la correzione rapida con l'opzione Create definition of Channel Route Iterator in channels dot C P P (Crea definizione dell'iteratore di route del canale) evidenziata.

Rilevamento modifiche

Ogni volta che si apporta una modifica in un file, viene visualizzata una barra gialla a sinistra per indicare che sono state apportate modifiche non salvate. Quando si salva il file, la barra diventa verde. Le barre di colore giallo e verde rimangono visualizzate fino a quando il documento rimane aperto nell'editor. Le barre rappresentano le modifiche apportate dall'ultima apertura del documento.

Screenshot di C più rilevamento modifiche. Una barra gialla verso il basso a sinistra sembra indicare le modifiche.

Spostare il codice

È possibile spostare le righe di codice verso l'alto e verso il basso selezionandole, tenendo premuto ALT e premendo i tasti di direzione PGSU/PGGIÙ.

Inserire frammenti di codice

Per frammento si intende una parte predefinita di codice sorgente. Fare clic con il pulsante destro del mouse su un singolo punto o sul testo selezionato e selezionare Frammento per inserire un frammento o racchiudere il testo selezionato con il frammento. Nella figura seguente sono illustrati i tre passaggi per racchiudere un'istruzione selezionata con un ciclo for. Le evidenziazioni gialle nell'immagine finale sono campi modificabili a cui è possibile accedere premendo TAB. Per altre informazioni, vedere Code Snippets (Frammenti di codice).

Screenshot del controllo a discesa Inserisci frammento di codice.

È selezionata una funzione. Nell'elenco a discesa visualizzato dopo un clic con il pulsante destro del mouse sul nome della funzione, Surround With... è evidenziato in giallo. Nell'elenco a discesa Surround With: il frammento di codice per un ciclo "for" è selezionato. Ciò comporta l'inserimento di un ciclo per la funzione. La variabile ciclo e il limite vengono visualizzati in giallo per indicare che sono campi modificabili.

Aggiungi classe

Aggiungere una nuova classe dal menu Progetto o dal menu di scelta rapida in Esplora soluzioni:

Screenshot della finestra di dialogo Aggiungi nuova classe. Contiene campi per il nome della classe, l'accessibilità, i file per inserire la dichiarazione e l'implementazione e così via.

È anche possibile usare la Creazione guidata classe per modificare o esaminare una classe esistente.

Screenshot della Procedura guidata classe con opzioni per l'aggiunta di metodi, variabili membro e molto altro ancora.

Per altre informazioni, vedere Aggiunta di funzionalità con creazioni guidate codice (C++).

Refactoring

I refactoring sono disponibili nel menu di scelta rapida Azioni rapide oppure facendo clic su una lampadina nell'editor. Alcuni sono disponibili anche nel menu Modifica > refactoring . Queste funzionalità includono:

Imposizione dello stile di codice con ClangFormat ed EditorConfig

Visual Studio 2017 e versioni successive include il supporto di ClangFormat, un'utilità di formattazione del codice tra le più diffuse per C++ basata su Clang/LLVM. Digitare "ClangFormat" in Avvio veloce per impostare l'uso di uno dei formati comuni seguenti:

  • LLVM
  • Google
  • Chromium
  • Mozilla
  • WebKit
  • Visual Studio

È anche possibile fornire il proprio .clang-format file o _clang-format per applicare regole personalizzate a tutti i file di codice allo stesso livello o inferiore.

Poiché i file sono facilmente condivisibili tramite il controllo del codice sorgente, è possibile imporre le convenzioni di codifica per l'intero team di sviluppo.

Screenshot che mostra un file con formato clang che include molte opzioni, ad esempio il limite di colonna, la larghezza del rientro, la larghezza della scheda e così via.

Visual Studio 2017 e versioni successive supporta anche EditorConfig che funziona in modo analogo. ClangFormat, tuttavia, include più opzioni di stile rispetto a EditorConfig, incluse le regole specifiche per C++. Con EditorConfig è possibile creare file con estensione editorconfig e inserirli in cartelle diverse della codebase per specificare gli stili di codice per le cartelle e le relative sottocartelle. Un file con estensione editorconfig sostituisce qualsiasi altro file con estensione editorconfig nelle cartelle padre e sovrascrive eventuali impostazioni di formattazione configurate tramite Strumenti>Opzioni. È possibile impostare regole per tabulazioni e spazi, dimensione del rientro e altro ancora. Per altre informazioni, vedere Creare impostazioni personalizzate e portabili per l'editor con EditorConfig.

Altre opzioni di formattazione

La casella di ricerca Avvio veloce offre il modo più rapido per trovare un'impostazione o uno strumento. Si trova nel menu principale. È sufficiente iniziare a digitare. L'elenco di completamento automatico filtrerà i risultati.

Screenshot della casella di ricerca Avvio rapido. Mostra la ricerca di C più avanzate che comporta opzioni per l'editor di testo.

Per impostare le opzioni di formattazione, ad esempio rientri, completamento parentesi graffe e colorazione, digitare "Formattazione C++" nella finestra Avvio veloce.

Screenshot che mostra le opzioni di formattazione C++, ad esempio se inserire automaticamente un rientro quando si digita una scheda.

Altre opzioni di formattazione sono disponibili in Modifica>avanzate nel menu principale.

Screenshot che mostra opzioni di modifica avanzate, ad esempio uno spazio vuoto di visualizzazione, un wrapping delle parole, un commento di una selezione, l'aumento del rientro della riga e altro ancora.

Le opzioni per abilitare e configurare le funzionalità di modifica specifiche di C++si trovano inEditor> di testo opzioni strumenti>>C/C++. Dopo aver scelto l'opzione da impostare, è possibile ottenere ulteriori informazioni premendo il tasto F1 quando la finestra di dialogo è attiva. Per le opzioni di formattazione di codice generali, digitare Editor C++ in Avvio veloce.

Screenshot che mostra la voce di menu strumenti di Visual Studio selezionata e la voce di menu Opzioni evidenziata.

Le funzionalità sperimentali, che possono o non possono essere incluse in una versione futura di Visual Studio, sono nella finestra di dialogo Editor di testo C++ Sperimentale. In Visual Studio 2017 e versioni successive è possibile abilitare IntelliSense predittivo in questa finestra di dialogo.

Vedere anche

Leggere e comprendere il codice
C++ Esplorare la code base C++ in Visual Studio
Collaborare con Live Share per C++