prometeu-studio/docs/compiler/pbs/pull-requests/PR-12.4-flow-expression-analyzer-switch-and-handle-decomposition.md
2026-03-24 13:42:37 +00:00

2.5 KiB

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.