Create AGENTS.md
This commit is contained in:
122
AGENTS.md
Normal file
122
AGENTS.md
Normal file
@@ -0,0 +1,122 @@
|
||||
# Agent Guidelines for opencode-testing
|
||||
|
||||
This is a Rust project using Edition 2024.
|
||||
|
||||
## Build/Test Commands
|
||||
|
||||
```bash
|
||||
# Build the project
|
||||
cargo build
|
||||
|
||||
# Build for release
|
||||
cargo build --release
|
||||
|
||||
# Run the application
|
||||
cargo run
|
||||
|
||||
# Run all tests
|
||||
cargo test
|
||||
|
||||
# Run a specific test (e.g., test named `test_calculate_area`)
|
||||
cargo test test_calculate_area
|
||||
|
||||
# Run tests in a specific module
|
||||
cargo test module_name::
|
||||
|
||||
# Run with output visible
|
||||
cargo test -- --nocapture
|
||||
|
||||
# Check for compilation errors without building
|
||||
cargo check
|
||||
|
||||
# Watch mode for development (requires cargo-watch)
|
||||
cargo watch -x "run"
|
||||
```
|
||||
|
||||
## Code Quality Commands
|
||||
|
||||
```bash
|
||||
# Format code (rustfmt)
|
||||
cargo fmt
|
||||
|
||||
# Check formatting without making changes
|
||||
cargo fmt -- --check
|
||||
|
||||
# Run clippy lints
|
||||
cargo clippy
|
||||
|
||||
# Run clippy with all features and warnings as errors
|
||||
cargo clippy --all-features -- -D warnings
|
||||
```
|
||||
|
||||
## Code Style Guidelines
|
||||
|
||||
### Formatting
|
||||
- Use `cargo fmt` with default settings
|
||||
- Max line width: 100 characters (default)
|
||||
- Use 4 spaces for indentation (default)
|
||||
- Trailing commas in multi-line lists
|
||||
|
||||
### Naming Conventions
|
||||
- Variables, functions, modules: `snake_case`
|
||||
- Types (structs, enums, traits): `CamelCase`
|
||||
- Constants, statics: `SCREAMING_SNAKE_CASE`
|
||||
- Lifetimes: `'lowercase`
|
||||
- Generic type parameters: `CamelCase` (single uppercase letter preferred: `T`, `K`, `V`)
|
||||
- Macros: `snake_case!`
|
||||
|
||||
### Import Organization
|
||||
Group imports in this order, separated by blank lines:
|
||||
1. Standard library imports (`std::`, `core::`, `alloc::`)
|
||||
2. External crate imports
|
||||
3. Internal crate imports (`crate::`)
|
||||
4. Super module imports (`super::`)
|
||||
5. Current module imports (`self::`)
|
||||
|
||||
Use `use` statements not `extern crate`.
|
||||
|
||||
### Types and Type Safety
|
||||
- Prefer explicit types over `impl Trait` in public APIs
|
||||
- Use `Option<T>` and `Result<T, E>` for fallible operations
|
||||
- Avoid `unwrap()` and `expect()` in production code; handle errors properly
|
||||
- Use `?` operator for error propagation
|
||||
- Prefer `&str` over `&String`, `&[T]` over `&Vec<T>` for function parameters
|
||||
|
||||
### Error Handling
|
||||
- Define custom error types using `thiserror` or `enum` for complex error cases
|
||||
- Use `anyhow` for application code error handling
|
||||
- Propagate errors with `?` operator
|
||||
- Provide context with `map_err()` when needed
|
||||
|
||||
### Functions
|
||||
- Keep functions small and focused on a single task
|
||||
- Max 5-7 parameters; use structs for more complex parameter sets
|
||||
- Document public functions with `///` doc comments
|
||||
- Use early returns to reduce nesting
|
||||
|
||||
### Comments and Documentation
|
||||
- Use `//` for inline comments
|
||||
- Use `///` for public API documentation
|
||||
- Use `//!` for module-level documentation
|
||||
- Document panics, unsafe code, and complex algorithms
|
||||
|
||||
### Unsafe Code
|
||||
- Avoid unsafe code unless absolutely necessary
|
||||
- Document all safety invariants with `// SAFETY:` comments
|
||||
- Keep unsafe blocks as small as possible
|
||||
|
||||
### Testing
|
||||
- Write unit tests in the same file as the code: `#[cfg(test)]` module
|
||||
- Use descriptive test names: `test_<scenario>_<expected_behavior>`
|
||||
- Use `assert!`, `assert_eq!`, `assert_ne!` for assertions
|
||||
- Organize tests with submodules for different scenarios
|
||||
|
||||
### Memory Management
|
||||
- Prefer ownership and borrowing over cloning when possible
|
||||
- Use `.clone()` explicitly when needed
|
||||
- Consider `Cow<'_, T>` for data that may be borrowed or owned
|
||||
|
||||
### Performance
|
||||
- Avoid premature optimization; write clear code first
|
||||
- Use iterators instead of loops when appropriate
|
||||
- Profile before optimizing
|
||||
Reference in New Issue
Block a user