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'
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 -
Lexer —
last_token_spanon emitted token, not peek cursor -
Parser —
ParseError { line, column },quiet_diagnosticsfor IDE mode -
Tests —
tests/check_diagnostics.rs+ fixtures intests/fixtures/syntax/
Demo fixture:
crab-pascal check tests\fixtures\syntax\bad_begin_line.pas
# bad_begin_line.pas:3:1: error: ...
Lessons captured in review
The squad documented four takeaways in sprint-1-review:
- Peek vs current — logos advances cursor; store span on the token already consumed.
-
Windows paths — parse
: error:suffix, don't splitC:\on every colon. -
Quiet check — stderr for IDE, no chatty
println!duringcheck. - 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
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'
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 -
Lexer —
last_token_spanno token emitido, não no peek -
Parser —
ParseError { line, column },quiet_diagnosticspara modo IDE -
Testes —
tests/check_diagnostics.rs+ fixtures emtests/fixtures/syntax/
Fixture de demo:
crab-pascal check tests\fixtures\syntax\bad_begin_line.pas
# bad_begin_line.pas:3:1: error: ...
Lições registradas no review
A squad documentou quatro takeaways em sprint-1-review:
- Peek vs current — logos avança cursor; guarde span no token já consumido.
-
Paths Windows — parse sufixo
: error:, não splitC:\em todo colon. -
Check silencioso — stderr para IDE, sem
println!barulhento nocheck. - 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
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)