Saltar al contenido
cd /languages
  • Escritorio longevo
  • Programación
  • Soporte de AST y símbolos

Pascal y Delphi en Maguyva: grafos de units y clases

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.

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 y luego revisa la matriz de compatibilidad en la página de compatibilidad. Si la aplicación enlaza bibliotecas de C, lee también la guía de C.

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.

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