# Pascal e Delphi in Maguyva: grafi di unit e classi

Canonical source: https://maguyva.ai/it/languages/pascal

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

Maguyva supporta le unit Pascal e Delphi con AST, simboli e grafo, così gli agenti IA mappano clausole uses, classi e procedure prima di modificarle.

## Istantanea del supporto

- Livello: Supporto AST e simboli
- Programmazione
- Estensioni: .pas, .pp
- Analisi AST reale per ricerca sintattica e contesto strutturale.
- I simboli nominati alimentano la ricerca semantica e i riferimenti incrociati. La navigazione del grafo è disponibile quando è abilitata l’estrazione delle relazioni.
- Questo linguaggio contribuisce con simboli e relazioni alla ricerca basata sul grafo; i tipi di arco supportati variano in base ai suoi costrutti nativi.
- Sono disponibili sia l’analisi AST sia l’estrazione dei simboli.

## Il più adatto per

- Team che mantengono applicazioni Delphi o Lazarus/Free Pascal i cui autori originali sono andati via.
- Basi di codice Object Pascal con gerarchie di classi profonde, interfacce e grandi unit condivise.
- Lavori di modernizzazione o porting il cui primo risultato è una mappa delle unit e delle loro dipendenze.

## Workflow degli agenti

- Elencare tutte le unit che citano una unit condivisa nella clausola `uses` prima di modificarla.
- Trovare le classi che ereditano da una form o da un componente base e i metodi che ridefiniscono.
- Tracciare quali procedure chiamano una routine prima di cambiarne i parametri.

## Perché le basi di codice Pascal hanno bisogno prima di una mappa

Le applicazioni Delphi e Free Pascal crescono spesso attorno a poche grandi unit che tutto il resto usa. Le form ereditano da form base, i componenti da componenti base, e le regole di business vivono in procedure chiamate da una dozzina di schermate. Il codice si legge bene file per file, ma è nelle dipendenze che le modifiche vanno storte.

Maguyva fornisce prima all'agente la struttura di unit e classi, così può dire cosa tocca una modifica prima di scrivere qualsiasi cosa.

## Cosa estrae Maguyva in Pascal

Maguyva copre le unit sorgente `.pas` e `.pp`. Le definizioni di procedure e funzioni vengono estratte come simboli invocabili, con le parole chiave `procedure`, `function`, `var` e `const` rimosse dai nomi delle definizioni. Classi e interfacce si possono selezionare come definizioni di tipo nella ricerca strutturale.

Gli import derivano dalle clausole `uses`, con la parola chiave rimossa così che il grafo memorizzi i nomi delle unit. Le chiamate vengono normalizzate rimuovendo prefissi di membro, argomenti e parentesi esterne, quindi una chiamata scritta come `Self.Save(x)` viene memorizzata come `Save`.

Il grafo registra chiamate, ereditarietà, implementazione di interfacce, override, istanziazione, riferimenti di tipo, letture e scritture, e archi di sollevamento e gestione delle eccezioni. Circa 107 routine della libreria di runtime (`WriteLn`, `ReadLn`, `Inc`, `Dec`, `Ord` e simili) vengono escluse dalle relazioni.

## Esempi di prompt per agenti

- "Quali unit usano `DataModuleMain` e cosa chiamano da essa?" (`dependency_search` incoming)
- "Quali form ereditano da `TBaseEditForm` e quali metodi ridefiniscono?" (`find_symbol`, poi `dependency_search`)
- "Spiega come viene registrata una fattura, dal gestore del pulsante fino alla unit del database." (`get_task_context`)

## Limiti noti

- Solo `.pas` e `.pp` sono associati a Pascal. I file di progetto e di form Delphi come `.dpr` e `.dfm` non sono nell'elenco delle estensioni, quindi layout delle form e configurazione del progetto restano fuori dal grafo.
- I metodi usano la stessa sintassi delle procedure libere, quindi il preset `methods` di `structural_search` non seleziona nulla. Usa il preset `functions`.
- Le chiamate alle routine filtrate della libreria di runtime non compaiono come archi del grafo. Usa `text_pattern_search` per trovarle.

## Prossimi passi

Collega un repository con la [guida rapida](/it/docs/quickstart), poi consulta la matrice di supporto nella [pagina di compatibilità](/it/docs/compatibility). Se l'applicazione collega librerie C, leggi anche la [guida a C](/it/languages/c).

## Dettagli del motore

- Il supporto a Pascal copre le unit `.pas` e `.pp`. I file di progetto e di form Delphi come `.dpr` e `.dfm` non sono nell'elenco delle estensioni.
- Le clausole `uses` diventano relazioni di import, e le chiamate vengono normalizzate rimuovendo prefissi di membro, argomenti e parentesi esterne.
- Circa 107 routine della libreria di runtime come `WriteLn`, `Inc` e `Ord` vengono filtrate dalle relazioni, così il codice applicativo risalta.

## Punti di ingresso MCP utili

- `find_symbol`: Usalo con il nome di una classe, form o procedura quando ti servono definizione e riferimenti.
- `dependency_search`: Usa la navigazione incoming su una unit condivisa o una classe base per vedere quali unit e discendenti ne dipendono.
- `get_task_context`: Usalo per prompt come "spiega come viene registrata una fattura, dal gestore del pulsante fino alla unit del database".
