Migration vers Rust 2021, ajout de la documentation en français, mise à jour des dépendances et suppression des crates inutilisées. - Mise à jour de l'édition Rust à 2021 - Ajout de commentaires de documentation en français - Suppression des dépendances `quick-xml` et `xmltree` - Ajout de nouvelles dépendances : `get_if_addrs`, `os_info`, `netstat2`, `sysinfo`, `users` - Mise à jour du fichier README.md et LICENSE - Correction de l'ordre des imports dans `src/process.rs`
3.5 KiB
3.5 KiB
pmoutils - Agent Guidelines
Build & Test Commands
# Navigate to the utils directory first
cd pmoutils
# Build the library
cargo build
# Run all tests (unit + doctests)
cargo test
# Run a single unit test
cargo test --lib ip_utils::tests::test_guess_local_ip
# Run tests for a specific module
cargo test --lib ip_utils::tests
# Run only doctests
cargo test --doc
# Lint with clippy
cargo clippy --all-targets -- -D warnings
# Format code
cargo fmt
Code Style Guidelines
General
- Rust 2021 edition
- Follow official Rust style guide and Clippy recommendations
- All code must be documented with Rustdoc comments (triple slash
///) - Prefer
&stroverStringfor function parameters when possible - Use French documentation comments (match project convention)
Imports
- Group imports by source: std → external crates → crate modules
- Use
usestatements at the top of each module - Import specific items, not glob imports (
use std::net::IpAddr, notuse std::net::*)
Naming Conventions
- Types:
PascalCase(e.g.,ProcessPortInfo,TransportProtocol) - Functions/methods:
snake_case(e.g.,guess_local_ip,find_process_using_port) - Constants:
SCREAMING_SNAKE_CASE - Tests:
test_functionality_what_it_doesformat
Error Handling
- Use
Optionfor operations that may not return a value (e.g.,find_process_using_portreturnsOption<ProcessPortInfo>) - Use
?operator for propagating errors from fallible functions - Return default values (like
"127.0.0.1") only when appropriate fallback exists - Document error conditions in function documentation
Dependencies
get_if_addrs: Network interface address detectionos_info: Cross-platform OS version detectionnetstat2: Network socket and process port mappingsysinfo: Process and system informationusers: User lookup by UID
Platform Support
- Currently targets Unix-like systems (macOS, Linux)
- Socket info retrieval uses netstat2 which may have limited Windows support
- OS detection is cross-platform via os_info crate
Types
- Prefer concrete types over generics unless abstraction is needed
- Use
u32for PIDs,u16for ports - Use
Stringfor process names and owners (owned, mutable) - Derive
DebugandClonefor data structures
Documentation
- All public items require Rustdoc comments
- Include
# Examplessection when useful - Document return values and error conditions
- Use triple slashes
///for module-level documentation
Formatting
- Run
cargo fmtbefore committing - Use 4 spaces for indentation (default Rust formatter)
- Keep lines under 100 characters when possible
Testing
- Unit tests in same file as code (in
mod tests {}block) - Test names follow pattern:
test_<function>_<condition> - Include tests for edge cases (e.g., fallback to localhost)
- Verify return value formats and constraints
- Test filtering:
cargo test --lib ip_utils::tests::test_list_all_ips_no_loopback
Module Organization
ip_utils.rs: Network IP address utilities (detection, listing)process.rs: Process and port information utilities- Export public functions at crate root in
lib.rs - Group related functionality into modules with clear responsibilities
Additional Notes
- The project uses French documentation comments throughout
- Doctests are included and tested via
cargo test --doc - Test helper functions (like
is_private_ip) can be included in the tests module - Prefer explicit error handling with clear fallback behavior