# Ada no Maguyva: especificações, corpos e grafos de pacotes

Canonical source: https://maguyva.ai/pt-br/languages/ada

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 Ada com AST, símbolos e grafo, para que agentes de IA sigam especificações, corpos, tasks e tipos etiquetados em sistemas Ada de longa vida.

## Panorama de suporte

- Nível: Suporte a AST e símbolos
- Programação
- Extensões: .ada, .adb, .ads
- 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 Ada de longa data em aeroespacial, defesa, ferrovias ou outros domínios de alta integridade em que toda mudança é revisada.
- Bases de código divididas entre especificações `.ads` e corpos `.adb`, com interface e implementação em arquivos diferentes.
- Engenheiros que usam agentes de IA para análise de impacto e preparação de revisões, não para gerar código sem revisão.

## Fluxos de trabalho de agente

- Encontrar todas as unidades que fazem `with` de um pacote antes de mudar sua especificação.
- Rastrear quais subprogramas chamam uma rotina através das fronteiras de pacotes.
- Mapear tipos task, tipos protegidos e hierarquias de tipos etiquetados antes de uma mudança de concorrência ou de design.

## Por que repositórios Ada precisam de um mapa de dependências

Ada separa o que um pacote promete (`.ads`) de como ele cumpre (`.adb`). É boa engenharia e também significa que uma única mudança toca vários arquivos que uma busca textual não vai conectar para você. Sistemas Ada de longa vida acrescentam outra camada: genéricos, tipos etiquetados, tasks e objetos protegidos, cujas relações importam mais do que qualquer arquivo isolado.

O Maguyva entrega esse mapa de dependências ao agente antes que ele proponha uma edição, que é exatamente a ordem esperada por uma revisão de alta integridade.

## O que o Maguyva extrai em Ada

O Maguyva cobre `.ads`, `.adb` e `.ada`. Corpos de subprogramas e especificações de procedimentos e funções são extraídos como símbolos chamáveis, então tanto a especificação quanto o corpo de uma rotina podem ser buscados. A correspondência de símbolos não diferencia maiúsculas de minúsculas, assim como o próprio Ada.

As importações vêm das cláusulas `with` e `use`, e a palavra-chave é removida para que o grafo guarde o nome do pacote. O grafo também registra chamadas, herança e sobrescritas em tipos etiquetados, instanciação, referências de tipo, leituras e escritas, e arestas de lançamento e tratamento de exceções.

Na busca estrutural, tipos task, tipos protegidos, tipos registro e tipos interface podem ser selecionados como definições de tipo, e corpos de entrada como métodos.

## Exemplos de prompts para agentes

- "Quais unidades dependem de `Flight_Control.Sensors` e quais dos seus subprogramas elas chamam?" (`dependency_search` incoming)
- "Mostre a especificação e o corpo de `Compute_Trajectory` e todos os chamadores." (`find_symbol`)
- "Explique como a task de telemetria entrega dados ao objeto protegido de log." (`get_task_context`)

## Limitações conhecidas

- Ada usa a mesma sintaxe para algumas chamadas, acesso a campos de registros e indexação. O Maguyva filtra tipos predefinidos, pacotes da biblioteca padrão, funções de atributo e operadores (cerca de 113 padrões) para manter o grafo de chamadas limpo, então chamadas à biblioteca padrão não são arestas do grafo. O acesso a campos de registros e a indexação são diferenciados das chamadas pela posição na gramática, não por uma lista de nomes de campo. Chamadas comuns de E/S de texto como `Put_Line`, `Put` e `Get` são mantidas de propósito.
- Cláusulas `use` mudam a visibilidade, mas não são selecionadas como importações na busca estrutural; cláusulas `with` são.
- Nós de tipos registro e interface podem ser fragmentos anônimos, então consultas estruturais por nome podem deixá-los passar. Use `find_symbol` para tipos nomeados.

## 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 o seu código Ada se liga a C, leia também o [guia de C](/pt-br/languages/c).

## Detalhes do motor

- O suporte a Ada cobre especificações `.ads`, corpos `.adb` e `.ada`. Corpos e especificações de subprogramas são ambos símbolos chamáveis.
- A correspondência de símbolos não diferencia maiúsculas de minúsculas, e as cláusulas `with` e `use` viram relações de importação depois que a palavra-chave é removida.
- Cerca de 113 tipos predefinidos, pacotes da biblioteca padrão, funções de atributo e operadores são filtrados das chamadas; o acesso a campos de registros e a indexação são diferenciados das chamadas pela posição na gramática, e `Put_Line`, `Put` e `Get` são mantidos de propósito.

## Pontos de entrada MCP úteis

- `find_symbol`: Use para encontrar juntos a especificação e o corpo de um subprograma, com as referências.
- `dependency_search`: Use a travessia incoming em um pacote antes de mudar sua especificação para ver todas as unidades que dependem dele.
- `get_task_context`: Use para prompts como "explique como a task de telemetria entrega dados ao objeto protegido de log".
