# Pascal y Delphi en Maguyva: grafos de units y clases

Canonical source: https://maguyva.ai/es/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 admite units de Pascal y Delphi con AST, símbolos y grafo, para que los agentes de IA mapeen cláusulas uses, clases y procedimientos antes de cambiarlos.

## Resumen de soporte

- Nivel: Soporte de AST y símbolos
- Programación
- Extensiones: .pas, .pp
- Análisis AST real para búsqueda con reconocimiento de sintaxis y contexto estructural.
- Los símbolos con nombre alimentan la búsqueda semántica y las referencias cruzadas. La navegación por grafo está disponible cuando la extracción de relaciones está habilitada.
- Este lenguaje aporta símbolos y relaciones a la búsqueda basada en grafos; los tipos de arista disponibles varían según sus construcciones nativas.
- Están disponibles tanto el análisis AST como la extracción de símbolos.

## Mejor uso

- Equipos que mantienen aplicaciones Delphi o Lazarus/Free Pascal cuyos autores originales ya no están.
- Bases de código Object Pascal con jerarquías de clases profundas, interfaces y grandes units compartidas.
- Trabajos de modernización o migración cuyo primer entregable es un mapa de las units y sus dependencias.

## Flujos de trabajo del agente

- Listar todas las units que nombran una unit compartida en su cláusula `uses` antes de cambiarla.
- Encontrar las clases que heredan de un formulario o componente base y los métodos que sobrescriben.
- Rastrear qué procedimientos llaman a una rutina antes de cambiar sus parámetros.

## Por qué las bases de código Pascal necesitan primero un mapa

Las aplicaciones Delphi y Free Pascal suelen crecer alrededor de unas pocas units grandes que usa todo lo demás. Los formularios heredan de formularios base, los componentes de componentes base, y las reglas de negocio viven en procedimientos que llaman una docena de pantallas. El código se lee bien archivo por archivo, pero los cambios se tuercen en las dependencias.

Maguyva entrega primero al agente la estructura de units y clases, para que pueda decir qué toca un cambio antes de escribir nada.

## Qué extrae Maguyva en Pascal

Maguyva cubre las units fuente `.pas` y `.pp`. Las definiciones de procedimientos y funciones se extraen como símbolos invocables, y se eliminan de los nombres de definición las palabras clave `procedure`, `function`, `var` y `const`. Las clases e interfaces se pueden seleccionar como definiciones de tipo en la búsqueda estructural.

Las importaciones provienen de las cláusulas `uses`, y se elimina la palabra clave para que el grafo guarde nombres de units. Las llamadas se normalizan quitando prefijos de miembro, argumentos y paréntesis envolventes, así que una llamada escrita como `Self.Save(x)` se guarda como `Save`.

El grafo registra llamadas, herencia, implementación de interfaces, sobrescrituras, instanciación, referencias de tipo, lecturas y escrituras, y aristas de lanzamiento y manejo de excepciones. Unas 107 rutinas de la biblioteca de tiempo de ejecución (`WriteLn`, `ReadLn`, `Inc`, `Dec`, `Ord` y similares) quedan fuera de las relaciones.

## Ejemplos de prompts para agentes

- "¿Qué units usan `DataModuleMain` y qué llaman de ella?" (`dependency_search` incoming)
- "¿Qué formularios heredan de `TBaseEditForm` y qué métodos sobrescriben?" (`find_symbol` y luego `dependency_search`)
- "Explica cómo se contabiliza una factura, desde el manejador del botón hasta la unit de base de datos." (`get_task_context`)

## Limitaciones conocidas

- Solo `.pas` y `.pp` se asignan a Pascal. Los archivos de proyecto y de formulario de Delphi como `.dpr` y `.dfm` no están en la lista de extensiones, así que el diseño de formularios y la configuración del proyecto quedan fuera del grafo.
- Los métodos usan la misma sintaxis que los procedimientos libres, así que el preset `methods` de `structural_search` no selecciona nada. Usa el preset `functions`.
- Las llamadas a rutinas filtradas de la biblioteca de tiempo de ejecución no aparecen como aristas del grafo. Usa `text_pattern_search` para encontrarlas.

## Próximos pasos

Conecta un repositorio con el [inicio rápido](/es/docs/quickstart) y luego revisa la matriz de compatibilidad en la [página de compatibilidad](/es/docs/compatibility). Si la aplicación enlaza bibliotecas de C, lee también la [guía de C](/es/languages/c).

## Detalles del motor

- La compatibilidad con Pascal cubre las units `.pas` y `.pp`. Los archivos de proyecto y de formulario de Delphi como `.dpr` y `.dfm` no están en la lista de extensiones.
- Las cláusulas `uses` se convierten en relaciones de importación, y las llamadas se normalizan quitando prefijos de miembro, argumentos y paréntesis envolventes.
- Unas 107 rutinas de la biblioteca de tiempo de ejecución como `WriteLn`, `Inc` y `Ord` se filtran de las relaciones para que destaque el código de la aplicación.

## Puntos de entrada MCP útiles

- `find_symbol`: Úsalo con el nombre de una clase, formulario o procedimiento cuando necesites su definición y sus referencias.
- `dependency_search`: Usa el recorrido incoming sobre una unit compartida o una clase base para ver qué units y descendientes dependen de ella.
- `get_task_context`: Úsalo para prompts como "explica cómo se contabiliza una factura, desde el manejador del botón hasta la unit de base de datos".
