DEV Community

CrabPascal
CrabPascal

Posted on

Sprint 1 Review: Real Diagnostic Spans | Review Sprint 1: diagnósticos reais

Bilingual post · Post bilíngue

Jump to: English · Português


English {#english}

Sprint 1 Review: Real Diagnostic Spans

Phase 2 walked Mintlify docs, IDE integration, architecture, and dual-mode builds. We end this arc where the sprint discipline started: Sprint 1, release v2.9.9, the first time check reported errors at the line you actually typo'd.

Full ceremony notes: sprint-1-review. Release notes: release-v2-9-9. After post 040 on build modes, this connects back to why diagnostics had to come first.

The before picture

Parser errors printed as:

bad_begin_line.pas:1:1: error: Expected 'begin'
Enter fullscreen mode Exit fullscreen mode

The mistake was on line 3. Developers ignored Problems panel squiggles. IDE integration (post 034) was useless without trustworthy coordinates.

What Sprint 1 delivered

ID Deliverable Status
S1-01–S1-07 Spans, check pipeline, golden tests Done
S1-08 Tag v2.9.9 + docs Done

Technical pieces:

  • src/span.rs — UTF-8 offset to 1-based line/column
  • Lexerlast_token_span on emitted token, not peek cursor
  • ParserParseError { line, column }, quiet_diagnostics for IDE mode
  • Teststests/check_diagnostics.rs + fixtures in tests/fixtures/syntax/

Demo fixture:

crab-pascal check tests\fixtures\syntax\bad_begin_line.pas
# bad_begin_line.pas:3:1: error: ...
Enter fullscreen mode Exit fullscreen mode

Lessons captured in review

The squad documented four takeaways in sprint-1-review:

  1. Peek vs current — logos advances cursor; store span on the token already consumed.
  2. Windows paths — parse : error: suffix, don't split C:\ on every colon.
  3. Quiet check — stderr for IDE, no chatty println! during check.
  4. Semantic spans next — don't wait until Sprint 8; S2/S3 extended coverage.

These decisions still govern every diagnostics PR today.

Validate like QA Marina

cargo test
cargo test --test check_diagnostics
Enter fullscreen mode Exit fullscreen mode

Ten-case matrix in check_diagnostics.rs must stay green before any release tag. Adding a parser regression? Drop a .pas fixture + expected line/col — not a screenshot.

Explicit non-goals (accepted debt)

Sprint 1 review acknowledged:

  • Horse example smoke 0/9 in local CI — environment, not span logic
  • Semantic errors still 1:1 — fixed incrementally in S2+
  • One ignored shadowing test deferred to Sprint 2

Honest scope let the sprint close on time. Same policy as Sprint 13 build-exe honesty (post 039).

Why this matters for Phase 2 readers

Every doc tour post assumed check you can click on:

  • Marketplace extension problem matcher (035)
  • Postman doesn't help if Pascal won't compile (036)
  • Dual-mode parity tests fail loudly with readable paths (040)

Sprint 1 was small on feature count, huge on trust infrastructure.

Squad decision

Review vote (Rafael): v2.9.9 approved; Sprint 2 (System namespaces) started immediately. That rhythm — one sprint, one tag, one review doc — continues through v2.22.0.

If you contribute diagnostics now, read Sprint 1 fixtures first. Don't reintroduce 1:1 placeholders "temporarily."

Connecting to the sprint roadmap

Sprint 1 sits at the base of roadmap/sprints-overview — every later review assumes diagnostics you can click. When reading Sprint 2–19 reviews in upcoming Phase 2 posts, notice how acceptance criteria always include cargo test and a check fixture with line numbers.

Tag v2.9.9 in git matches release-v2-9-9. Diff your local branch against that tag if Problems panel behavior regresses — often a merge dropped quiet_diagnostics or reverted last_token_span.

Next in series

Post 042 — Sprint 2 Review: System.* Namespaces picks up where Sprint 1 left off — uses System.SysUtils resolving like Delphi, RTL shims under rtl/sys/, and semantic spans for undefined symbols.


Português {#portugus}

Review Sprint 1: diagnósticos reais

A Fase 2 percorreu docs Mintlify, integração IDE, arquitetura e dual-mode build. Fechamos este arco onde a disciplina de sprint começou: Sprint 1, release v2.9.9, primeira vez que check reportou erros na linha onde você realmente errou.

Ata completa: sprint-1-review. Notas de release: release-v2-9-9. Depois do post 040 sobre modos de build, isto conecta por que diagnósticos tinham que vir primeiro.

O cenário anterior

Erros de parser saíam assim:

bad_begin_line.pas:1:1: error: Expected 'begin'
Enter fullscreen mode Exit fullscreen mode

O erro estava na linha 3. Desenvolvedores ignoravam squiggles no Problems. Integração IDE (post 034) era inútil sem coordenadas confiáveis.

O que o Sprint 1 entregou

ID Entrega Status
S1-01–S1-07 Spans, pipeline check, testes golden Feito
S1-08 Tag v2.9.9 + docs Feito

Peças técnicas:

  • src/span.rs — offset UTF-8 para linha/coluna 1-based
  • Lexerlast_token_span no token emitido, não no peek
  • ParserParseError { line, column }, quiet_diagnostics para modo IDE
  • Testestests/check_diagnostics.rs + fixtures em tests/fixtures/syntax/

Fixture de demo:

crab-pascal check tests\fixtures\syntax\bad_begin_line.pas
# bad_begin_line.pas:3:1: error: ...
Enter fullscreen mode Exit fullscreen mode

Lições registradas no review

A squad documentou quatro takeaways em sprint-1-review:

  1. Peek vs current — logos avança cursor; guarde span no token já consumido.
  2. Paths Windows — parse sufixo : error:, não split C:\ em todo colon.
  3. Check silencioso — stderr para IDE, sem println! barulhento no check.
  4. Spans semânticos em seguida — não esperar Sprint 8; S2/S3 estenderam cobertura.

Essas decisões ainda governam todo PR de diagnósticos.

Valide como QA Marina

cargo test
cargo test --test check_diagnostics
Enter fullscreen mode Exit fullscreen mode

Matriz de dez casos em check_diagnostics.rs deve ficar verde antes de tag de release. Regressão de parser? Fixture .pas + linha/col esperada — não screenshot.

Non-goals explícitos (débito aceito)

O review Sprint 1 reconheceu:

  • Smoke Horse 0/9 no CI local — ambiente, não lógica de span
  • Erros semânticos ainda 1:1 — corrigidos incrementalmente em S2+
  • Um teste de shadowing ignorado — deferido ao Sprint 2

Escopo honesto permitiu fechar no prazo. Mesma política de honestidade do build-exe Sprint 13 (post 039).

Por que importa para leitores da Fase 2

Cada post do tour assumiu check clicável:

  • Problem matcher da extensão Marketplace (035)
  • Postman não ajuda se Pascal não compila (036)
  • Testes paridade dual-mode falham alto com paths legíveis (040)

Sprint 1 foi pequeno em features, enorme em infraestrutura de confiança.

Decisão da squad

Voto review (Rafael): v2.9.9 aprovada; Sprint 2 (namespaces System) iniciado na hora. Esse ritmo — um sprint, uma tag, um doc de review — continua até v2.22.0.

Se contribuir com diagnósticos hoje, leia fixtures Sprint 1 primeiro. Não reintroduza placeholders 1:1 "temporários".

Conexão com o roadmap de sprints

Sprint 1 fica na base de roadmap/sprints-overview — todo review posterior assume diagnósticos clicáveis. Ao ler reviews Sprint 2–19 nos próximos posts Fase 2, note como critérios de aceitação sempre incluem cargo test e fixture check com números de linha.

Tag v2.9.9 no git bate com release-v2-9-9. Diff branch local contra essa tag se Problems regredir — merge often dropou quiet_diagnostics ou reverteu last_token_span.

Próximo da série

Post 042 — Review Sprint 2: namespaces System.* continua onde Sprint 1 parou — uses System.SysUtils resolvendo como Delphi, shims RTL em rtl/sys/ e spans semânticos para símbolos indefinidos.


Published on dev.to/@crabpascal · Código em CrabPascal

Top comments (0)