mirror of
https://github.com/rustfs/rustfs.git
synced 2026-01-16 17:20:33 +00:00
190 lines
3.8 KiB
Markdown
190 lines
3.8 KiB
Markdown
# RustFS Development Guide
|
|
|
|
## 📋 Code Quality Requirements
|
|
|
|
### 🔧 Code Formatting Rules
|
|
|
|
**MANDATORY**: All code must be properly formatted before committing. This project enforces strict formatting standards to maintain code consistency and readability.
|
|
|
|
#### Pre-commit Requirements
|
|
|
|
Before every commit, you **MUST**:
|
|
|
|
1. **Format your code**:
|
|
|
|
```bash
|
|
cargo fmt --all
|
|
```
|
|
|
|
2. **Verify formatting**:
|
|
|
|
```bash
|
|
cargo fmt --all --check
|
|
```
|
|
|
|
3. **Pass clippy checks**:
|
|
|
|
```bash
|
|
cargo clippy --all-targets --all-features -- -D warnings
|
|
```
|
|
|
|
4. **Ensure compilation**:
|
|
|
|
```bash
|
|
cargo check --all-targets
|
|
```
|
|
|
|
#### Quick Commands
|
|
|
|
We provide convenient Makefile targets for common tasks:
|
|
|
|
```bash
|
|
# Format all code
|
|
make fmt
|
|
|
|
# Check if code is properly formatted
|
|
make fmt-check
|
|
|
|
# Run clippy checks
|
|
make clippy
|
|
|
|
# Run compilation check
|
|
make check
|
|
|
|
# Run tests
|
|
make test
|
|
|
|
# Run all pre-commit checks (format + clippy + check + test)
|
|
make pre-commit
|
|
|
|
# Setup git hooks (one-time setup)
|
|
make setup-hooks
|
|
```
|
|
|
|
### 🔒 Automated Pre-commit Hooks
|
|
|
|
This project includes a pre-commit hook that automatically runs before each commit to ensure:
|
|
|
|
- ✅ Code is properly formatted (`cargo fmt --all --check`)
|
|
- ✅ No clippy warnings (`cargo clippy --all-targets --all-features -- -D warnings`)
|
|
- ✅ Code compiles successfully (`cargo check --all-targets`)
|
|
|
|
#### Setting Up Pre-commit Hooks
|
|
|
|
Run this command once after cloning the repository:
|
|
|
|
```bash
|
|
make setup-hooks
|
|
```
|
|
|
|
Or manually:
|
|
|
|
```bash
|
|
chmod +x .git/hooks/pre-commit
|
|
```
|
|
|
|
### 📝 Formatting Configuration
|
|
|
|
The project uses the following rustfmt configuration (defined in `rustfmt.toml`):
|
|
|
|
```toml
|
|
max_width = 130
|
|
fn_call_width = 90
|
|
single_line_let_else_max_width = 100
|
|
```
|
|
|
|
### 🚫 Commit Prevention
|
|
|
|
If your code doesn't meet the formatting requirements, the pre-commit hook will:
|
|
|
|
1. **Block the commit** and show clear error messages
|
|
2. **Provide exact commands** to fix the issues
|
|
3. **Guide you through** the resolution process
|
|
|
|
Example output when formatting fails:
|
|
|
|
```
|
|
❌ Code formatting check failed!
|
|
💡 Please run 'cargo fmt --all' to format your code before committing.
|
|
|
|
🔧 Quick fix:
|
|
cargo fmt --all
|
|
git add .
|
|
git commit
|
|
```
|
|
|
|
### 🔄 Development Workflow
|
|
|
|
1. **Make your changes**
|
|
2. **Format your code**: `make fmt` or `cargo fmt --all`
|
|
3. **Run pre-commit checks**: `make pre-commit`
|
|
4. **Commit your changes**: `git commit -m "your message"`
|
|
5. **Push to your branch**: `git push`
|
|
|
|
### 🛠️ IDE Integration
|
|
|
|
#### VS Code
|
|
|
|
Install the `rust-analyzer` extension and add to your `settings.json`:
|
|
|
|
```json
|
|
{
|
|
"rust-analyzer.rustfmt.extraArgs": ["--config-path", "./rustfmt.toml"],
|
|
"editor.formatOnSave": true,
|
|
"[rust]": {
|
|
"editor.defaultFormatter": "rust-lang.rust-analyzer"
|
|
}
|
|
}
|
|
```
|
|
|
|
#### Other IDEs
|
|
|
|
Configure your IDE to:
|
|
|
|
- Use the project's `rustfmt.toml` configuration
|
|
- Format on save
|
|
- Run clippy checks
|
|
|
|
### ❗ Important Notes
|
|
|
|
- **Never bypass formatting checks** - they are there for a reason
|
|
- **All CI/CD pipelines** will also enforce these same checks
|
|
- **Pull requests** will be automatically rejected if formatting checks fail
|
|
- **Consistent formatting** improves code readability and reduces merge conflicts
|
|
|
|
### 🆘 Troubleshooting
|
|
|
|
#### Pre-commit hook not running?
|
|
|
|
```bash
|
|
# Check if hook is executable
|
|
ls -la .git/hooks/pre-commit
|
|
|
|
# Make it executable if needed
|
|
chmod +x .git/hooks/pre-commit
|
|
```
|
|
|
|
#### Formatting issues?
|
|
|
|
```bash
|
|
# Format all code
|
|
cargo fmt --all
|
|
|
|
# Check specific issues
|
|
cargo fmt --all --check --verbose
|
|
```
|
|
|
|
#### Clippy issues?
|
|
|
|
```bash
|
|
# See detailed clippy output
|
|
cargo clippy --all-targets --all-features -- -D warnings
|
|
|
|
# Fix automatically fixable issues
|
|
cargo clippy --fix --all-targets --all-features
|
|
```
|
|
|
|
---
|
|
|
|
Following these guidelines ensures high code quality and smooth collaboration across the RustFS project! 🚀
|