Pular para o conteúdo
cd /languages
  • Desktop de longa vida
  • Programação
  • Suporte a AST e símbolos

Pascal e Delphi no Maguyva: grafos de units e classes

O Maguyva oferece suporte a units Pascal e Delphi com AST, símbolos e grafo, para que agentes de IA mapeiem cláusulas uses, classes e procedimentos antes de mudá-los.

Por que bases de código Pascal precisam primeiro de um mapa

Aplicações Delphi e Free Pascal costumam crescer em torno de algumas units grandes que todo o resto usa. Formulários herdam de formulários base, componentes de componentes base, e as regras de negócio ficam em procedimentos chamados por uma dúzia de telas. O código se lê bem arquivo por arquivo, mas é nas dependências que as mudanças dão errado.

O Maguyva entrega primeiro ao agente a estrutura de units e classes, para que ele diga o que uma mudança toca antes de escrever qualquer coisa.

O que o Maguyva extrai em Pascal

O Maguyva cobre as units-fonte .pas e .pp. Definições de procedimentos e funções são extraídas como símbolos chamáveis, com as palavras-chave procedure, function, var e const removidas dos nomes de definição. Classes e interfaces podem ser selecionadas como definições de tipo na busca estrutural.

As importações vêm das cláusulas uses, e a palavra-chave é removida para que o grafo guarde nomes de units. As chamadas são normalizadas com a remoção de prefixos de membro, argumentos e parênteses externos, então uma chamada escrita como Self.Save(x) é armazenada como Save.

O grafo registra chamadas, herança, implementação de interfaces, sobrescritas, instanciação, referências de tipo, leituras e escritas, e arestas de lançamento e tratamento de exceções. Cerca de 107 rotinas da biblioteca de runtime (WriteLn, ReadLn, Inc, Dec, Ord e semelhantes) ficam fora das relações.

Exemplos de prompts para agentes

  • “Quais units usam DataModuleMain e o que elas chamam dela?” (dependency_search incoming)
  • “Quais formulários herdam de TBaseEditForm e quais métodos sobrescrevem?” (find_symbol, depois dependency_search)
  • “Explique como uma fatura é lançada, do handler do botão até a unit de banco de dados.” (get_task_context)

Limitações conhecidas

  • Apenas .pas e .pp são mapeados para Pascal. Arquivos de projeto e de formulário do Delphi como .dpr e .dfm não estão na lista de extensões, então o layout dos formulários e a configuração do projeto ficam fora do grafo.
  • Métodos usam a mesma sintaxe de procedimentos livres, então o preset methods de structural_search não seleciona nada. Use o preset functions.
  • Chamadas a rotinas filtradas da biblioteca de runtime não aparecem como arestas do grafo. Use text_pattern_search para encontrá-las.

Próximos passos

Conecte um repositório pelo início rápido e depois confira a matriz de suporte na página de compatibilidade. Se a aplicação liga bibliotecas em C, leia também o guia de C.

Uso ideal

  • > Equipes que mantêm aplicações Delphi ou Lazarus/Free Pascal cujos autores originais já seguiram em frente.
  • > Bases de código Object Pascal com hierarquias de classes profundas, interfaces e grandes units compartilhadas.
  • > Trabalhos de modernização ou portabilidade cuja primeira entrega é um mapa das units e de suas dependências.

Fluxos de trabalho de agente

  • > Listar todas as units que citam uma unit compartilhada na cláusula `uses` antes de mudá-la.
  • > Encontrar as classes que herdam de um formulário ou componente base e os métodos que elas sobrescrevem.
  • > Rastrear quais procedimentos chamam uma rotina antes de mudar seus parâmetros.

Detalhes do motor

  • > O suporte a Pascal cobre as units `.pas` e `.pp`. Arquivos de projeto e de formulário do Delphi como `.dpr` e `.dfm` não estão na lista de extensões.
  • > Cláusulas `uses` viram relações de importação, e as chamadas são normalizadas com a remoção de prefixos de membro, argumentos e parênteses externos.
  • > Cerca de 107 rotinas da biblioteca de runtime como `WriteLn`, `Inc` e `Ord` são filtradas das relações para que o código da aplicação se destaque.

Pontos de entrada MCP úteis

  • find_symbol

    Use com o nome de uma classe, formulário ou procedimento quando precisar da definição e das referências.

  • dependency_search

    Use a travessia incoming em uma unit compartilhada ou classe base para ver quais units e descendentes dependem dela.

  • get_task_context

    Use para prompts como "explique como uma fatura é lançada, do handler do botão até a unit de banco de dados".