Files
2025-11-30 08:53:27 +08:00

207 lines
5.3 KiB
Markdown

---
name: code-quality-check
description: This skill should be used before committing code to ensure it meets Breenix quality standards. Use for running clippy checks, fixing compiler warnings, verifying no log side-effects, checking for dead code, and enforcing project coding standards from CLAUDE.md.
---
# Code Quality Checks for Breenix
Pre-commit code quality verification for Breenix kernel development.
## Purpose
Breenix enforces strict code quality standards. This skill provides the checks and fixes required before committing code.
## Core Quality Standards (from CLAUDE.md)
1. **Fix ALL compiler warnings before committing**
2. **Fix ALL clippy warnings**
3. **Use proper patterns** (e.g., `Once`) to avoid unsafe warnings
4. **Only `#[allow(dead_code)]`** for legitimate API functions
## Pre-Commit Checklist
Before every commit:
```bash
# 1. Build kernel and check for warnings
cd kernel
cargo build --target x86_64-unknown-none 2>&1 | grep warning
# 2. Run clippy
cargo clippy --target x86_64-unknown-none
# 3. Run tests (if modifying core subsystems)
cd ..
cargo test
# 4. Check for log side-effects (manual)
grep -R "log::trace!.*(" kernel/src/ | grep -vE '\".*\"' | grep -vE '\.(as_|to_|into_|len|is_|get)'
```
## Clippy Configuration
### Project-Specific Clippy Flags
```bash
cd kernel
RUSTFLAGS="-Aclippy::redundant_closure_for_method_calls" \
cargo clippy --target x86_64-unknown-none \
-- -Dclippy::debug_assert_with_mut_call \
-Dclippy::print_stdout \
-Wclippy::suspicious_operation_groupings
```
### What These Check
- **`debug_assert_with_mut_call`**: Prevent side-effects in debug assertions
- **`print_stdout`**: No print!/println! in kernel (use log! macros)
- **`suspicious_operation_groupings`**: Catch likely logic errors
## Common Issues and Fixes
### Compiler Warnings
**Unused imports**:
```rust
// BAD
use x86_64::{VirtAddr, PageTable, PageTableFlags}; // PageTable unused
// GOOD
use x86_64::{VirtAddr, PageTableFlags};
```
**Unused variables**:
```rust
// BAD
let result = some_function(); // result unused
// GOOD
let _result = some_function(); // Explicitly unused
// OR
some_function(); // Don't capture if not needed
```
**Dead code**:
```rust
// BAD - function never called
fn helper_function() { ... }
// GOOD - remove it
// OR add #[allow(dead_code)] if it's part of a public API
// GOOD - legitimate API function
#[allow(dead_code)] // Part of public allocator API
pub fn dealloc_stack(&mut self, stack_id: usize) { ... }
```
### Clippy Warnings
**Redundant closure**:
```rust
// BAD
items.map(|x| x.to_string())
// GOOD (but we allow this via RUSTFLAGS)
items.map(ToString::to_string)
```
**Debug assert with mutation**:
```rust
// BAD - side effect in assertion
debug_assert!(list.pop().is_some());
// GOOD - separate the effect
let item = list.pop();
debug_assert!(item.is_some());
```
### Log Side-Effects
**Problem**: Function calls in log statements execute even when logging disabled.
```rust
// BAD - get_state() called even if TRACE disabled
log::trace!("State: {:?}", get_state());
// GOOD - only format if needed
let state = get_state();
log::trace!("State: {:?}", state);
// BETTER - for expensive operations
if log::log_enabled!(log::Level::Trace) {
let state = expensive_get_state();
log::trace!("State: {:?}", state);
}
```
## CI Code Quality Workflow
The `.github/workflows/code-quality.yml` runs these checks automatically:
1. **Clippy checks** with project-specific flags
2. **Log side-effects scan** for trace statements with function calls
3. **Complex log expression check** for multi-argument format strings
4. **Log level regression guard** - ensures feature flags control log level
## Quick Reference
### Before Commit
```bash
# Full quality check
cd kernel
cargo build --target x86_64-unknown-none 2>&1 | tee /tmp/build-warnings.txt
cargo clippy --target x86_64-unknown-none 2>&1 | tee /tmp/clippy-warnings.txt
# Review warnings
grep warning /tmp/build-warnings.txt
less /tmp/clippy-warnings.txt
# Fix all warnings before committing!
```
### Common Warning Fixes
| Warning | Fix |
|---------|-----|
| unused import | Remove from use statement |
| unused variable | Prefix with _ or remove |
| dead code | Remove or add #[allow(dead_code)] for API |
| redundant closure | Allow via RUSTFLAGS or fix |
| print_stdout | Replace print! with log::info! |
| debug_assert mutation | Extract to separate statement |
## Integration with Git Workflow
```bash
# Before committing
git status # See what you're about to commit
cd kernel
cargo clippy --target x86_64-unknown-none # Fix all warnings
# Then commit
git add kernel/src/...
git commit -m "Fix: ..."
```
## Best Practices
1. **Fix warnings as you go**: Don't accumulate them
2. **Run clippy frequently**: Catch issues early
3. **Use proper logging**: log! macros, not print!
4. **Avoid side-effects in logs**: Especially in trace/debug
5. **Comment allowed dead code**: Explain why it's part of the API
6. **Use feature flags**: Control debug vs release behavior
7. **Test before committing**: cargo test if touching core code
## Summary
Code quality standards enforce:
- Zero compiler warnings
- Zero clippy warnings
- No side-effects in log statements
- Appropriate use of #[allow] attributes
- Proper logging practices
Run checks before every commit to maintain high code quality.