use a few agents to review the laburnum crate
they are looking for duplicated structs and functions
places where code is performing the same purpose
areas where code could be merged or simplified
/// Ariadne sources for error reporting with pretty-printed code snippets.
ariadne_sources: Arc<DashMap<SourceKey, ariadne::Source<String>>>,
pub(super) ariadne_fetch_cache: Option<ariadne::Source<String>>,
│ 1 │ Replace line-index with crop's native line tracking │ "Replaces line-index" │ Medium │
├──────────┼─────────────────────────────────────────────────────┼─────────────────────────┼────────────┤
│ 2 │ Content-version mapping (hash → version ID) │ "Content-Version Map" │ Medium │
├──────────┼─────────────────────────────────────────────────────┼─────────────────────────┼────────────┤
│ 3 │ File View (per-client view tracking) │ "File View" │ Medium │
├──────────┼─────────────────────────────────────────────────────┼─────────────────────────┼────────────┤
│ 4 │ Eviction logic + reload-and-verify │ "File State" │ High │
├──────────┼─────────────────────────────────────────────────────┼─────────────────────────┼────────────┤
│ 5 │ UTF-16 offset conversion via crop │ "LSP offset conversion" │ Low │
8. Create ADR 0002 compliance test suite - Tests explicitly linked to ADR sections
Immediate (Critical for ADR 0002 compliance)
☐ Phase 6: Fix parser tests broken by Option-returning APIs
1. Add SpanCache tests - intern(), lookup(), boundary conditions, saturation
2. Add restore_evicted integration test - Hash match/mismatch, disk read failure
3. Add version wraparound tests - 1023→0 with active references
Short-term
4. Add to_lsp_range tests - Critical for IDE features
5. Strengthen weak assertions - Replace <= 3 with exact counts
6. Add error type assertions - Verify specific error variants
write up a new plan to fix all of these
the following repos use symbolique:
- /Users/ojkelly/Code/src/github.com/gold-build/patina/crates/patina/ir
The following need to have first-class support in symbolique:
- imports
- types
We need to enforce a specific heirachy of composition
Base
Linked
Merged
Resolved
Typed
Formalise the following behaviours in code and with tests
- Base table
- declares
- Definitions
- Values
- UnresolvedReferences
- Scopes
Add to Symbol enum:
- Import
- path ident
- optional alias
- optional resolves_to
- resolution stored later, and added when needed
[x] Merge UnresolvedReference with Reference
- add optional resolves_to
[ ] Both import and reference have resolves_to: None in the Base table
In the ResolvedSymbolTable the resolutions are stored, and added
when the symbol it retrieved.
MergedSymbolTable
- all top level scopes are merged only
- get symbol searchs all tables
TypedSymbolTable
---
then update Patina with an explicit import syntax