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