Codebase organization for pikru. Use when you need to find where specific functionality lives.
Scanned 2/12/2026
Install via CLI
openskills install majiayu000/claude-skill-registry---
name: codebase-layout
description: Codebase organization for pikru. Use when you need to find where specific functionality lives.
---
# Pikru Codebase Organization
## Top-Level Structure
- `src/` - Main pikru library (parsing and rendering)
- `crates/` - Supporting crates
- `vendor/pikchr-c/` - Original C implementation and test files
- `examples/` - Example programs
- `tests/` - Integration tests
## Main Library (`src/`)
### Entry Point
- `src/lib.rs` - Public API, exports key types and functions
### Parsing
- `src/parse.rs` - **Parser implementation** (statement parsing, token handling)
- `src/ast.rs` - **AST types** (Statement, Expr, ObjectClass, etc.)
- `src/types.rs` - **Core types** (ClassName, Direction, EdgePoint, etc.)
### Rendering
- `src/render/mod.rs` - **Main renderer logic**
- Object placement and geometry
- Text positioning (**ljust/rjust logic at lines 1265-1550**)
- Variable scope and context management
- `src/render/eval.rs` - **Expression evaluation** (positions, scalars, variables)
- `src/render/svg.rs` - **SVG generation** (converts shapes to SVG elements)
- `src/render/geometry.rs` - **Shape geometry** (boxes, circles, paths, files)
- `src/render/shapes.rs` - **Shape rendering** (specific shape implementations)
- `src/render/types.rs` - **Render types** (PObject, Style, PositionedText, etc.)
- `src/render/path_builder.rs` - **Path construction** (line/arrow building)
- `src/render/context.rs` - **Render context** (variable scopes, state)
- `src/render/defaults.rs` - **Default values** (line width, font size, etc.)
### Error Handling
- `src/errors.rs` - Error types and reporting
- `src/macros.rs` - Helper macros
## Supporting Crates
### `crates/pikru-compare/`
**SVG comparison utilities for testing**
- `src/lib.rs` - Core comparison logic
- `compare_outputs()` - **Main comparison function**
- `CompareResult::is_match()` - Determines if test passes
- Handles error matching, SVG parsing, tolerance
- Used by: test harness, MCP server
### `crates/pikru-mcp/`
**MCP server for test running**
- `src/tools.rs` - MCP tool implementations
- `run_pikru_test()` - Run single test, returns comparison
- `list_pikru_tests()` - List available tests
- `debug_pikru_test()` - Run with trace output
- `src/main.rs` - MCP server entry point
## Test Files
### Location
`vendor/pikchr-c/tests/*.pikchr` - Test input files from C implementation
### Categories
- `test01`-`test81` - Numbered feature tests
- `autochop*.pikchr` - Arrow chopping tests
- Other specialized tests
## Common Debugging Paths
### Text Positioning Issues
1. Check `src/render/mod.rs:1265-1550` - ljust/rjust calculation
2. Check `src/render/svg.rs:294` - Text anchor assignment
3. Check `src/render/types.rs` - PositionedText structure
### Rendering Issues
1. Check `src/render/shapes.rs` - Shape-specific rendering
2. Check `src/render/geometry.rs` - Geometric calculations
3. Check `src/render/svg.rs` - SVG element generation
### Parsing Issues
1. Check `src/parse.rs` - Parser logic
2. Check `src/ast.rs` - AST node definitions
### Test Comparison Issues
1. Check `crates/pikru-compare/src/lib.rs` - Comparison logic
2. Check tolerance constants (FLOAT_TOLERANCE, SIMILARITY_THRESHOLD)
## Key Code References (cref comments)
Many functions include `// cref:` comments pointing to the original C implementation:
- Format: `// cref: function_name (pikchr.c:line_number)`
- Use these to cross-reference with C implementation when debugging
No comments yet. Be the first to comment!