74 lines
2.5 KiB
Markdown
74 lines
2.5 KiB
Markdown
# PR-12.4 - Flow Expression Analyzer Switch and Handle Decomposition
|
|
|
|
## Briefing
|
|
|
|
`switch` e `handle` sao as maiores superfices especializadas restantes em `PbsFlowExpressionAnalyzer`, com regras de exaustividade, pattern typing, matching de erro e arm typing.
|
|
|
|
Esta PR separa essas construcoes em analisadores dedicados, mantendo exatamente o comportamento atual.
|
|
|
|
## Motivation
|
|
|
|
### Dor atual que esta PR resolve
|
|
|
|
1. `analyzeSwitchExpression` e `analyzeHandleExpression` concentram regras de alto branching e recovery semantico.
|
|
2. Essas regras sao semanticamente coesas e merecem fronteiras proprias.
|
|
3. Sem esse corte, a classe principal continua com os hotspots mais caros de manutencao.
|
|
|
|
## Target
|
|
|
|
Extrair a analise especializada de:
|
|
|
|
1. `switch expression`,
|
|
2. `switch pattern typing/keying`,
|
|
3. `handle expression`,
|
|
4. `handle block arm` e matching de error targets.
|
|
|
|
## Dependencies
|
|
|
|
Prerequisitos diretos:
|
|
|
|
1. `PR-12.1`
|
|
2. `PR-12.2`
|
|
3. `PR-12.3`
|
|
|
|
## Scope
|
|
|
|
1. Extrair `analyzeSwitchExpression`, `switchPatternKey`, `switchPatternType`.
|
|
2. Extrair `analyzeHandleExpression`, `analyzeHandleBlockArm`, `matchesTargetError`, `unwrapGroup`.
|
|
3. Preservar a interacao com `blockAnalyzer`, `typeOps` e `model`.
|
|
|
|
## Non-Goals
|
|
|
|
1. Nao alterar regras de exaustividade de switch em value position.
|
|
2. Nao alterar regras de wildcard/default duplication.
|
|
3. Nao alterar regras de `handle` para `ok(...)` / `err(...)` terminais.
|
|
|
|
## Method
|
|
|
|
### O que deve ser feito explicitamente
|
|
|
|
1. Criar analisadores especializados por construcao.
|
|
2. Preservar ordem de validacoes e diagnosticos.
|
|
3. Reusar o contexto compartilhado para evitar nova explosao de parametros.
|
|
|
|
## Acceptance Criteria
|
|
|
|
1. `switch` e `handle` deixam de ficar implementados diretamente na classe principal.
|
|
2. Exaustividade, arm typing e error matching permanecem equivalentes.
|
|
3. Nenhum teste de result flow, control flow ou optional/result muda comportamento esperado.
|
|
|
|
## Tests
|
|
|
|
1. `:prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsSemanticsResultFlowRulesTest*`
|
|
2. `:prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsSemanticsOptionalResultTest*`
|
|
3. `:prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsSemanticsControlFlowTest*`
|
|
4. `:prometeu-compiler:frontends:prometeu-frontend-pbs:test`
|
|
|
|
## Affected Documents
|
|
|
|
1. Nenhum documento normativo.
|
|
|
|
## Open Questions
|
|
|
|
1. `switchPatternKey` e `switchPatternType` devem ficar juntos no mesmo colaborador. A recomendacao e sim, porque ambos definem a semantica da superficie de pattern.
|