Vai al contenuto

Plugin Elenco delle funzioni

Una struttura filtrabile dei simboli del documento corrente —funzioni, classi, metodi, titoli e altro— in un pannello laterale ancorabile. Attiva un simbolo per portare il cursore dell'editor direttamente su di esso.

Dove trovarlo

Visualizza ▸ Elenco delle funzioni apre il pannello (parte nascosto). L'elenco si aggiorna mentre digiti e segue la scheda attiva.

Usare l'elenco

  • Saltare a un simbolo — fai doppio clic su una voce, oppure selezionala e premi Invio. L'editor scorre fino al simbolo, espandendolo se si trova dentro una riduzione compressa, e vi posiziona il cursore.
  • Filtrare — digita nella casella in alto per restringere l'elenco per nome (senza distinguere maiuscole). In modalità albero, un padre resta visibile quando uno qualsiasi dei suoi figli corrisponde.
  • Seguire il cursore — mentre ti muovi nel documento, il simbolo che contiene il cursore viene evidenziato nell'elenco.

Opzioni di visualizzazione

Il pulsante ⋮ (accanto alla casella di filtro) apre il menu di visualizzazione:

Opzione Effetto
Mostra ad albero Annida i membri sotto il loro contenitore (i metodi sotto una classe, una classe sotto il suo spazio dei nomi). Disattivalo per un elenco piatto.
Ordina per posizione Ordine del documento (predefinito).
Ordina per nome Alfabetico (senza distinguere maiuscole).
Ordina per tipo Raggruppa per tipo di simbolo (classi, funzioni, …), poi per nome.

Le tue scelte vengono ricordate tra le sessioni.

Da dove arriva la struttura

Il pannello attinge i simboli da una di due fonti, indicata nel piè di pagina del pannello:

  • Origine: language server — quando un language server è configurato per il linguaggio del file, il pannello usa i suoi simboli. Questa è la struttura precisa e completa (variabili membro, annidamento esatto classe → metodo, ogni tipo di simbolo che il server riporta).
  • Origine: modelli — altrimenti, il pannello ricade sulle regole a schemi integrate descritte più sotto.

Questo non si configura: la struttura basata su schemi compare all'istante e, se un language server risponde, viene usata automaticamente. Un linguaggio che ha un server ma nessuno schema incluso ottiene comunque una struttura (dal server).

Linguaggi supportati

Le regole a schemi producono una struttura senza alcun language server (e sono la riserva quando non ce n'è uno disponibile):

Linguaggio Simboli riconosciuti
C / C++ spazi dei nomi, classi, struct, enum, #define, funzioni
Python classi, funzioni/metodi (def, async def)
JavaScript / TypeScript classi, funzioni, costanti di funzione freccia, metodi di classe
Markdown titoli (# … ######)

L'elenco riflette il linguaggio che l'editor ha applicato al file (la sua colorazione della sintassi). I file di altri tipi mostrano «Nessuna struttura di simboli per questo tipo di file.»

Gli schemi sono approssimativi

La struttura basata su schemi (Origine: modelli) è un'approssimazione, non un analizzatore completo: ad esempio, una funzione libera scritta dopo il corpo di una classe può risultare annidata sotto quella classe. Per una struttura precisa, configura un language server per il linguaggio: il pannello mostrerà allora i suoi simboli (Origine: language server).

Insiemi di regole personalizzati

Gli insiemi di regole sono semplici file JSON, quindi puoi ritoccarli o aggiungere linguaggi senza ricompilare. L'insieme incluso viene installato accanto all'applicazione in una cartella function-list/ (un *.json per insieme di regole); quei file vengono sovrascritti a ogni aggiornamento, quindi trattali come esempi in sola lettura.

Per personalizzarli, metti i tuoi *.json nella sottocartella rulesets/ della cartella dati del plugin Elenco delle funzioni. Un file dell'utente il cui languageIds include un linguaggio sostituisce l'insieme di regole incluso per quel linguaggio.

Un file di insieme di regole ha questo aspetto:

{
    "languageIds": ["cpp", "c"],
    "caseSensitive": true,
    "rules": [
        { "pattern": "^\\s*class\\s+([A-Za-z_]\\w*)", "kind": "class" },
        { "pattern": "^\\s*(?:async\\s+)?def\\s+([A-Za-z_]\\w*)", "kind": "function" }
    ]
}
Campo Significato
languageIds Uno o più identificatori di linguaggio dell'editor a cui si applica l'insieme (ad es. cpp, python). Un file può servirne più d'uno.
caseSensitive Se gli schemi distinguono maiuscole e minuscole (true per impostazione predefinita).
rules Elenco ordinato di regole; vince la prima regola che corrisponde a una riga, un simbolo per riga.
rules[].pattern Un'espressione regolare ECMAScript confrontata con una singola riga.
rules[].nameGroup Il gruppo di cattura che contiene il nome del simbolo (1 per impostazione predefinita).
rules[].kind Il tipo del simbolo — un nome (class, struct, enum, namespace, function, method, constant, string, …) oppure un numero SymbolKind di LSP. Controlla il raggruppamento e l'ordinamento.
rules[].containerGroup Gruppo di cattura facoltativo usato come dettaglio del contenitore del simbolo (0 = nessuno).