72 lines
2.7 KiB
Markdown
72 lines
2.7 KiB
Markdown
# PR-13.2 - Flow Body Analyzer Callable Body and Completion Decomposition
|
|
|
|
## Briefing
|
|
|
|
As regras de entrada de callable e de completion/fallthrough em `PbsFlowBodyAnalyzer` formam um cluster coeso, mas hoje ficam misturadas com statement analysis e assignment resolution.
|
|
|
|
Esta PR extrai essa superficie para colaboradores dedicados, sem alterar funcionalidade.
|
|
|
|
## Motivation
|
|
|
|
### Dor atual que esta PR resolve
|
|
|
|
1. `validateCallableBody`, `validateCallableCompletion`, `blockAlwaysReturns`, `statementAlwaysReturns`, `expressionAlwaysReturns`, `switchAlwaysReturns` e `handleAlwaysReturns` concentram regras de completion com alto branching.
|
|
2. Completion analysis e statement analysis sao preocupacoes diferentes e hoje dividem a mesma classe.
|
|
3. Essa parte e muito sensivel e merece uma fronteira estrutural propria.
|
|
|
|
## Target
|
|
|
|
Separar a camada de body entry/completion:
|
|
|
|
1. bootstrap de callable body,
|
|
2. validacao de fallthrough/completion,
|
|
3. regras de `always returns`,
|
|
4. exaustividade relevante para completion.
|
|
|
|
## Dependencies
|
|
|
|
Prerequisito direto:
|
|
|
|
1. `PR-13.1`
|
|
|
|
## Scope
|
|
|
|
1. Extrair `validateCallableBody`.
|
|
2. Extrair `validateCallableCompletion`, `blockAlwaysReturns`, `statementAlwaysReturns`, `expressionAlwaysReturns`.
|
|
3. Extrair `switchAlwaysReturns`, `switchIsExhaustive`, `handleAlwaysReturns`, `handleArmAlwaysReturns`, `isKnownErrorPath`.
|
|
|
|
## Non-Goals
|
|
|
|
1. Nao alterar as regras atuais de fallthrough para result/plain non-unit.
|
|
2. Nao alterar a semantica de exaustividade usada apenas para completion.
|
|
3. Nao alterar statement analysis ou assignment checks.
|
|
|
|
## Method
|
|
|
|
### O que deve ser feito explicitamente
|
|
|
|
1. Introduzir um analisador de completion ou divisao equivalente.
|
|
2. Manter `PbsFlowBodyAnalyzer` como orquestrador do processo.
|
|
3. Preservar rigorosamente a ordem atual de checks e codigos de diagnostico.
|
|
|
|
## Acceptance Criteria
|
|
|
|
1. A logica de completion/fallthrough deixa de ficar centralizada em `PbsFlowBodyAnalyzer`.
|
|
2. As regras de `always returns` permanecem equivalentes.
|
|
3. Nenhum teste de fallthrough, control flow ou result flow muda comportamento esperado.
|
|
|
|
## Tests
|
|
|
|
1. `:prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsSemanticsFallthroughTest*`
|
|
2. `:prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsSemanticsControlFlowTest*`
|
|
3. `:prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsSemanticsResultFlowRulesTest*`
|
|
4. `:prometeu-compiler:frontends:prometeu-frontend-pbs:test`
|
|
|
|
## Affected Documents
|
|
|
|
1. Nenhum documento normativo.
|
|
|
|
## Open Questions
|
|
|
|
1. `switch`/`handle` completion deve ficar junto do completion analyzer ou reaproveitar colaboradores do expression analyzer. A recomendacao e manter local ao completion analyzer para evitar acoplamento indevido entre analise de tipo e analise de terminacao.
|