# Pascal e Delphi no Maguyva: grafos de units e classes

Canonical source: https://maguyva.ai/pt-br/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).

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.

## Panorama de suporte

- Nível: Suporte a AST e símbolos
- Programação
- Extensões: .pas, .pp
- Parsing real de AST para busca com consciência de sintaxe e contexto estrutural.
- Símbolos nomeados alimentam a busca semântica e as referências cruzadas. A navegação por grafo fica disponível quando a extração de relações está habilitada.
- Esta linguagem fornece símbolos e relações para a busca orientada por grafo; os tipos de aresta compatíveis variam de acordo com seus construtos nativos.
- A análise de AST e a extração de símbolos estão disponíveis.

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

## 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](/pt-br/docs/quickstart) e depois confira a matriz de suporte na [página de compatibilidade](/pt-br/docs/compatibility). Se a aplicação liga bibliotecas em C, leia também o [guia de C](/pt-br/languages/c).

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