36 lines
1.8 KiB
Markdown
36 lines
1.8 KiB
Markdown
# PR-007 - PBS Static Semantics Declaration Validation
|
|
|
|
## Briefing
|
|
Depois da cobertura sintatica, falta a camada de semantica estatica para validar declaracoes, namespaces e invariantes de assinatura.
|
|
Este PR entrega a primeira fase semantica: sem resolver `apply` completo ainda.
|
|
|
|
## Target
|
|
- Specs:
|
|
- `docs/pbs/specs/4. Static Semantics Specification.md` (secoes 2, 3.1-3.7, 3.18 subset de declaracao)
|
|
- `docs/pbs/specs/12. Diagnostics Specification.md` (phase = static semantics)
|
|
- Codigo:
|
|
- `prometeu-compiler/frontends/prometeu-frontend-pbs/src/main/java/p/studio/compiler/pbs/PbsFrontendCompiler.java`
|
|
- novo pacote de validadores semanticos em `.../pbs/semantics/`.
|
|
|
|
## Method
|
|
1. Introduzir binder de simbolos por namespace (`type`, `value`, `callable`, `host-owner`).
|
|
2. Validar duplicatas de parametros, labels de retorno, enum/error cases e declaracoes.
|
|
3. Validar invariantes de retorno (`optional` vs `result`, `optional void`, etc.).
|
|
4. Validar superficies de declaracao (`ctor`, `service`, `callback`, `const`) conforme regras de forma.
|
|
5. Emitir diagnosticos deterministas por codigo estavel para cada classe de erro.
|
|
|
|
## Acceptance Criteria
|
|
- Binder constroi tabelas por namespace sem colapsar overload cedo.
|
|
- Erros obrigatorios de declaracao aparecem com spans corretos e codigo estavel.
|
|
- Duplicata de funcao usa identidade por shape (nao por label).
|
|
- Regras de validade de `declare const` (tipo obrigatorio, init quando aplicavel) sao aplicadas.
|
|
- Nenhum arquivo valido passa a falhar por ruido de validacao.
|
|
|
|
## Tests
|
|
- `PbsSemanticsDeclarationsTest` novo com casos positivos/negativos para:
|
|
- duplicatas por namespace;
|
|
- enum/error duplicados;
|
|
- retorno invalido (`optional/result`);
|
|
- declaracoes `const` invalidas;
|
|
- callback/service/ctor shape invalidos.
|