GitHub Copilot non “conosce” magicamente il tuo progetto: costruisce un prompt effimero a partire da segnali di contesto raccolti al momento della richiesta. Capire da dove arrivano questi segnali è la chiave per ottenere suggerimenti pertinenti e, in sede d’esame, per distinguere ciò che Copilot vede da ciò che gli resta invisibile.
Le fonti del contesto
Il file corrente e la posizione del cursore
La fonte primaria è il file attivo: il codice sopra e sotto il cursore (prefix e suffix), il linguaggio, i nomi di funzioni e variabili, i commenti. Un commento descrittivo ben scritto o una firma di funzione chiara orientano fortemente il completamento inline, perché diventano parte del prompt inviato al modello.
I neighboring tabs
Copilot analizza anche gli altri file aperti nell’editor (i cosiddetti neighboring tabs / open tabs). Il completamento nel file A può quindi riflettere tipi, interfacce o helper definiti nel file B semplicemente perché B è aperto in una scheda. È il motivo pratico per cui aprire i file giusti migliora i risultati: se stai implementando contro un’interfaccia, tenerne aperto il file mette quella definizione a portata del modello senza doverla incollare.
L’indicizzazione del workspace via @workspace
In Copilot Chat, il participant @workspace (e la sua variante agentica in VS Code) estende il contesto oltre i file aperti: interroga un indice del repository — struttura delle cartelle, codice, testo — per rispondere a domande su porzioni di progetto che non hai mai aperto. Su repository grandi l’indice può essere remoto (indicizzazione lato GitHub, più veloce e completa) o locale; scegliere @workspace è la mossa corretta quando la domanda riguarda “dov’è definito X” o “come è organizzato il progetto”, mentre per un file specifico conviene un riferimento diretto con #file.
Custom instructions
Le custom instructions iniettano contesto persistente e non ripetitivo. Il file di repository .github/copilot-instructions.md viene aggiunto automaticamente al contesto di Chat per tutti i collaboratori, ed è il posto giusto per convenzioni di stile, framework in uso, vincoli architetturali. Esistono inoltre istruzioni personali (a livello utente) e, in VS Code, file *.instructions.md con applyTo per mirare a determinati path. Non modificano il modello: arricchiscono ogni prompt, riducendo la necessità di ripetere lo stesso preambolo.
Perché il contesto pertinente conta
Il principio operativo è: più contesto rilevante fornisci, migliori sono i suggerimenti. “Rilevante” è la parola chiave — riempire l’editor di file scollegati non aiuta e può diluire il segnale. Le leve pratiche a disposizione dello sviluppatore sono quattro: scrivere buoni commenti/naming, tenere aperti i file correlati, usare i riferimenti espliciti in Chat (@workspace, #file, #selection), e centralizzare le convenzioni nelle custom instructions.
Il limite: content exclusions
Le fonti di contesto hanno un confine invisibile: le content exclusions, configurate da amministratori di repository o organizzazione. Un file coperto da un pattern di esclusione non entra affatto nel contesto: niente completamenti inline dentro quel file, e — punto cruciale — il suo contenuto non viene usato come contesto nemmeno quando lavori altrove o lo interroghi via @workspace. Le esclusioni si propagano con un ritardo (non sono istantanee al 100%) e agiscono a monte, indipendentemente da quanto il file sarebbe “rilevante”.
Trappole tipiche d’esame
- Scenario: i suggerimenti nel file corrente ignorano un’interfaccia definita altrove nel progetto. → Risposta giusta: aprire il file dell’interfaccia in una scheda (neighboring tabs) o referenziarlo in Chat; il modello considera i file aperti, non l’intero disco.
- Scenario: serve una risposta su codice sparso in file mai aperti. → Risposta giusta: usare
@workspace, che interroga l’indice del repository, non i soli open tabs. - Scenario: un file è coperto da una content exclusion ma sembra comunque “molto rilevante” per il task. → Risposta giusta: resta escluso dal contesto ovunque; la rilevanza non lo reintroduce. Più contesto aiuta solo per i file non esclusi.
- Scenario: vuoi che tutto il team riceva suggerimenti coerenti con le convenzioni del progetto senza ripeterle a ogni prompt. → Risposta giusta:
.github/copilot-instructions.mdnel repository, non istruzioni personali. - Scenario: un file appena aggiunto alle content exclusions genera ancora completamenti. → Risposta giusta: normale ritardo di propagazione, non un malfunzionamento; l’esclusione non è garantita istantanea.