439 lines
8.3 KiB
Markdown
439 lines
8.3 KiB
Markdown
|
|
<div align="center">
|
||
|
|
<img src="../imgs/typedialog_logo_h_s.svg" alt="TypeDialog Logo" width="600" />
|
||
|
|
</div>
|
||
|
|
|
||
|
|
# Development Guide
|
||
|
|
|
||
|
|
Guide for local TypeDialog development using `just` command orchestration.
|
||
|
|
|
||
|
|
## Quick Start
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# See all available commands
|
||
|
|
just --list
|
||
|
|
|
||
|
|
# Show help
|
||
|
|
just help
|
||
|
|
|
||
|
|
# Get help for specific module
|
||
|
|
just help build # Build commands
|
||
|
|
just help test # Test commands
|
||
|
|
just help dev # Development utilities
|
||
|
|
just help ci # CI/CD pipeline
|
||
|
|
just help distro # Distribution & packaging
|
||
|
|
```
|
||
|
|
|
||
|
|
## Common Workflows
|
||
|
|
|
||
|
|
### Setup Development Environment
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# 1. Clone and enter repository
|
||
|
|
git clone https://github.com/anthropics/typedialog.git
|
||
|
|
cd typedialog
|
||
|
|
|
||
|
|
# 2. Verify installation (see INSTALLATION.md)
|
||
|
|
rustc --version && cargo --version && just --version
|
||
|
|
|
||
|
|
# 3. Build project
|
||
|
|
just build::default
|
||
|
|
|
||
|
|
# 4. Run tests
|
||
|
|
just test::all
|
||
|
|
```
|
||
|
|
|
||
|
|
### Format & Lint Code
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Format code
|
||
|
|
just fmt
|
||
|
|
|
||
|
|
# Check formatting (without changes)
|
||
|
|
just fmt-check
|
||
|
|
|
||
|
|
# Run linter
|
||
|
|
just lint
|
||
|
|
|
||
|
|
# Auto-fix linter warnings
|
||
|
|
just lint-fix
|
||
|
|
|
||
|
|
# All checks together
|
||
|
|
just check-all
|
||
|
|
```
|
||
|
|
|
||
|
|
### Run Tests
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# All tests (default features)
|
||
|
|
just test::all
|
||
|
|
|
||
|
|
# All tests with all features
|
||
|
|
just test::all-features
|
||
|
|
|
||
|
|
# Test specific backend
|
||
|
|
just test::cli # CLI backend
|
||
|
|
just test::tui # TUI backend
|
||
|
|
just test::web # Web backend
|
||
|
|
|
||
|
|
# Test specific crate
|
||
|
|
just test::core # typedialog-core
|
||
|
|
|
||
|
|
# Integration tests
|
||
|
|
just test::integration
|
||
|
|
|
||
|
|
# Documentation tests
|
||
|
|
just test::doc
|
||
|
|
```
|
||
|
|
|
||
|
|
### Build Project
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Build with default features
|
||
|
|
just build::default
|
||
|
|
|
||
|
|
# Build specific backend
|
||
|
|
just build::cli # CLI only
|
||
|
|
just build::tui # TUI only
|
||
|
|
just build::web # Web only
|
||
|
|
|
||
|
|
# Build all backends
|
||
|
|
just build::all-backends
|
||
|
|
|
||
|
|
# Release build (optimized)
|
||
|
|
just build::release
|
||
|
|
```
|
||
|
|
|
||
|
|
### Watch for Changes
|
||
|
|
|
||
|
|
Watch for file changes and auto-rebuild:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
just dev::watch
|
||
|
|
```
|
||
|
|
|
||
|
|
Requires: `cargo-watch` (install with `cargo install cargo-watch`)
|
||
|
|
|
||
|
|
### Generate Documentation
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Generate docs
|
||
|
|
just dev::docs-gen
|
||
|
|
|
||
|
|
# Generate and open in browser
|
||
|
|
just dev::docs
|
||
|
|
```
|
||
|
|
|
||
|
|
### Run Examples
|
||
|
|
|
||
|
|
See [../examples/README.md](../examples/README.md) for complete examples.
|
||
|
|
|
||
|
|
Quick examples:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Run basic example
|
||
|
|
cargo run --example form
|
||
|
|
|
||
|
|
# Run with specific backend
|
||
|
|
cargo run -p typedialog-tui --example form_with_autocompletion
|
||
|
|
|
||
|
|
# List available examples
|
||
|
|
just test::list
|
||
|
|
```
|
||
|
|
|
||
|
|
## Just Modules
|
||
|
|
|
||
|
|
### build - Build Recipes
|
||
|
|
|
||
|
|
Compile project for different backends and targets:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
just build::default # Debug build
|
||
|
|
just build::release # Release build (optimized)
|
||
|
|
just build::cli # CLI backend only
|
||
|
|
just build::tui # TUI backend only
|
||
|
|
just build::web # Web backend only
|
||
|
|
just build::all # All variants
|
||
|
|
just build::all-backends # All backends combined
|
||
|
|
just build::full # All features
|
||
|
|
just build::check # Check compilation (no build)
|
||
|
|
```
|
||
|
|
|
||
|
|
### test - Test Suite
|
||
|
|
|
||
|
|
Run tests with various configurations:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
just test::all # All tests
|
||
|
|
just test::all-features # With all features
|
||
|
|
just test::cli # CLI tests
|
||
|
|
just test::tui # TUI tests
|
||
|
|
just test::web # Web tests
|
||
|
|
just test::core # Core library tests
|
||
|
|
just test::bins # Binary tests
|
||
|
|
just test::integration # Integration tests
|
||
|
|
just test::doc # Doc tests
|
||
|
|
just test::verbose # Tests with output
|
||
|
|
just test::list # List tests
|
||
|
|
```
|
||
|
|
|
||
|
|
### dev - Development Tools
|
||
|
|
|
||
|
|
Format, lint, and document code:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
just dev::fmt # Format code
|
||
|
|
just dev::fmt-check # Check format
|
||
|
|
just dev::lint # Lint with clippy
|
||
|
|
just dev::lint-fix # Auto-fix warnings
|
||
|
|
just dev::audit # Audit dependencies
|
||
|
|
just dev::docs-gen # Generate docs
|
||
|
|
just dev::docs # Generate and open
|
||
|
|
just dev::build # Build default
|
||
|
|
just dev::watch # Watch and rebuild
|
||
|
|
just dev::check # Check + fmt + lint
|
||
|
|
just dev::info # Show workspace info
|
||
|
|
just dev::tree # Dependency tree
|
||
|
|
```
|
||
|
|
|
||
|
|
### ci - CI/CD Pipeline
|
||
|
|
|
||
|
|
Validation and build pipeline:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
just ci::fmt-check # Format validation
|
||
|
|
just ci::lint # Linting
|
||
|
|
just ci::check # Format + lint
|
||
|
|
just ci::test-all # Test all features
|
||
|
|
just ci::test-default # Test default
|
||
|
|
just ci::test-integration # Integration tests
|
||
|
|
just ci::build-debug # Debug build
|
||
|
|
just ci::build-release # Release build
|
||
|
|
just ci::full # Complete pipeline
|
||
|
|
```
|
||
|
|
|
||
|
|
### distro - Distribution & Packaging
|
||
|
|
|
||
|
|
Build, package, and release:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Build
|
||
|
|
just distro::build-all # Debug build
|
||
|
|
just distro::build-release # Release build
|
||
|
|
|
||
|
|
# Cross-compile
|
||
|
|
just distro::cross # All targets
|
||
|
|
just distro::cross-docker TGT # Docker build
|
||
|
|
|
||
|
|
# Package
|
||
|
|
just distro::create-package # Create distribution
|
||
|
|
just distro::create-checksums # Generate checksums
|
||
|
|
just distro::package-all # Build + package
|
||
|
|
|
||
|
|
# Release
|
||
|
|
just distro::package-release # Prepare release
|
||
|
|
just distro::package-release-version V # With version
|
||
|
|
|
||
|
|
# Utilities
|
||
|
|
just distro::generate-manifest # Create manifest
|
||
|
|
just distro::list-packages # List packages
|
||
|
|
just distro::clean-distro # Clean directory
|
||
|
|
```
|
||
|
|
|
||
|
|
## Development Workflow Examples
|
||
|
|
|
||
|
|
### Daily Development
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# 1. Start watching
|
||
|
|
just dev::watch
|
||
|
|
|
||
|
|
# 2. In another terminal, work on code
|
||
|
|
# 3. Changes auto-rebuild
|
||
|
|
# 4. Run tests manually
|
||
|
|
just test::all
|
||
|
|
```
|
||
|
|
|
||
|
|
### Adding a Feature
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# 1. Create feature branch
|
||
|
|
git checkout -b feature/my-feature
|
||
|
|
|
||
|
|
# 2. Code and test
|
||
|
|
just check-all
|
||
|
|
|
||
|
|
# 3. Run full validation
|
||
|
|
just ci::full
|
||
|
|
|
||
|
|
# 4. Push and create PR
|
||
|
|
git push origin feature/my-feature
|
||
|
|
```
|
||
|
|
|
||
|
|
### Preparing Release
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# 1. Update version in Cargo.toml
|
||
|
|
nano crates/typedialog-core/Cargo.toml
|
||
|
|
|
||
|
|
# 2. Validate everything
|
||
|
|
just ci::full
|
||
|
|
|
||
|
|
# 3. Build and package
|
||
|
|
just distro::build-release
|
||
|
|
just distro::create-package
|
||
|
|
just distro::create-checksums
|
||
|
|
|
||
|
|
# 4. Prepare release
|
||
|
|
just distro::package-release
|
||
|
|
|
||
|
|
# 5. Create GitHub release (see RELEASE.md)
|
||
|
|
```
|
||
|
|
|
||
|
|
## Examples
|
||
|
|
|
||
|
|
Complete examples organized by category:
|
||
|
|
|
||
|
|
### Basic Examples
|
||
|
|
```bash
|
||
|
|
# Run basic form
|
||
|
|
cargo run --example form
|
||
|
|
|
||
|
|
# With sections
|
||
|
|
cargo run --example form_with_sections
|
||
|
|
|
||
|
|
# With groups
|
||
|
|
cargo run --example form_with_grouped_items
|
||
|
|
```
|
||
|
|
|
||
|
|
### Advanced Examples
|
||
|
|
```bash
|
||
|
|
# Conditional logic
|
||
|
|
cargo run --example conditional_required_demo
|
||
|
|
|
||
|
|
# Autocompletion
|
||
|
|
cargo run --example form_with_autocompletion
|
||
|
|
```
|
||
|
|
|
||
|
|
### Backend-Specific
|
||
|
|
```bash
|
||
|
|
# CLI with autocompletion
|
||
|
|
cargo run --example autocompletion_demo
|
||
|
|
|
||
|
|
# TUI interactive form
|
||
|
|
cargo run -p typedialog-tui --example form_with_autocompletion
|
||
|
|
|
||
|
|
# Web server
|
||
|
|
cargo run -p typedialog-web -- --config config/web/dev.toml
|
||
|
|
```
|
||
|
|
|
||
|
|
See [../examples/README.md](../examples/README.md) for complete guide.
|
||
|
|
|
||
|
|
## Troubleshooting
|
||
|
|
|
||
|
|
### Build errors
|
||
|
|
|
||
|
|
Clear build cache and rebuild:
|
||
|
|
```bash
|
||
|
|
cargo clean
|
||
|
|
just build::default
|
||
|
|
```
|
||
|
|
|
||
|
|
### Test failures
|
||
|
|
|
||
|
|
Run with backtrace for more details:
|
||
|
|
```bash
|
||
|
|
RUST_BACKTRACE=1 cargo test
|
||
|
|
```
|
||
|
|
|
||
|
|
### Format check failing
|
||
|
|
|
||
|
|
Auto-fix formatting:
|
||
|
|
```bash
|
||
|
|
just fmt
|
||
|
|
```
|
||
|
|
|
||
|
|
### "just" not found
|
||
|
|
|
||
|
|
Install or add to PATH:
|
||
|
|
```bash
|
||
|
|
cargo install just
|
||
|
|
export PATH="$HOME/.cargo/bin:$PATH"
|
||
|
|
```
|
||
|
|
|
||
|
|
### cargo-watch not working
|
||
|
|
|
||
|
|
Install it:
|
||
|
|
```bash
|
||
|
|
cargo install cargo-watch
|
||
|
|
```
|
||
|
|
|
||
|
|
### Port already in use (web backend)
|
||
|
|
|
||
|
|
Change port in config:
|
||
|
|
```toml
|
||
|
|
# config/web/dev.toml
|
||
|
|
[server]
|
||
|
|
port = 3001 # Instead of 3000
|
||
|
|
```
|
||
|
|
|
||
|
|
Or override:
|
||
|
|
```bash
|
||
|
|
TYPEDIALOG_WEB_PORT=3001 cargo run -p typedialog-web
|
||
|
|
```
|
||
|
|
|
||
|
|
## Tips & Tricks
|
||
|
|
|
||
|
|
### Faster builds
|
||
|
|
|
||
|
|
Use incremental compilation:
|
||
|
|
```bash
|
||
|
|
export CARGO_BUILD_JOBS=$(nproc)
|
||
|
|
export CARGO_INCREMENTAL=1
|
||
|
|
```
|
||
|
|
|
||
|
|
### Parallel testing
|
||
|
|
|
||
|
|
```bash
|
||
|
|
cargo test -- --test-threads=4
|
||
|
|
```
|
||
|
|
|
||
|
|
### Format all code quickly
|
||
|
|
|
||
|
|
```bash
|
||
|
|
just fmt && just lint-fix
|
||
|
|
```
|
||
|
|
|
||
|
|
### Development script
|
||
|
|
|
||
|
|
Create a development startup script:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
#!/bin/bash
|
||
|
|
# dev.sh
|
||
|
|
|
||
|
|
echo "Installing dependencies..."
|
||
|
|
cargo install just cargo-watch
|
||
|
|
|
||
|
|
echo "Building project..."
|
||
|
|
just build::default
|
||
|
|
|
||
|
|
echo "Running tests..."
|
||
|
|
just test::all
|
||
|
|
|
||
|
|
echo "Watching for changes..."
|
||
|
|
just dev::watch
|
||
|
|
```
|
||
|
|
|
||
|
|
## Next Steps
|
||
|
|
|
||
|
|
- Read [BUILD.md](BUILD.md) for building distributions
|
||
|
|
- Read [CONFIGURATION.md](CONFIGURATION.md) for configuration options
|
||
|
|
- Check [../examples/README.md](../examples/README.md) for examples
|
||
|
|
- See [RELEASE.md](RELEASE.md) for release process
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
**Ready to develop!** 🚀
|
||
|
|
|
||
|
|
Questions? Check the examples or open an issue on GitHub.
|