Vai al contenuto
cd /languages
  • Desktop longevo
  • Programmazione
  • Supporto AST e simboli

Pascal e Delphi in Maguyva: grafi di unit e classi

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.

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, poi consulta la matrice di supporto nella pagina di compatibilità. Se l’applicazione collega librerie C, leggi anche la guida a C.

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.

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".