- hotspots.md: Added specific dependent file lists for each hotspot - hotspots.md: Added cross-crate coupling points table - hotspots.md: Added crate-level coupling scores - limitations.md: Expanded coverage of unobservable patterns - limitations.md: Added confidence levels for inferences - limitations.md: Added extraction method details table Agent: euler
3.8 KiB
Analysis Limitations
Generated: 2025-02-02
What Could Not Be Observed
1. Dynamic/Runtime Dependencies
- Plugin loading: Any runtime module loading via
dlopenor similar - Reflection-based imports: Dependencies resolved at runtime
- Configuration-driven imports: Modules loaded based on config values
2. Macro-Generated Code
- Procedural macros: Code generated by
#[derive(...)]and custom proc macros - Declarative macros:
macro_rules!expansions that generateusestatements - Build script outputs: Code generated by
build.rsfiles
3. Conditional Compilation
- Platform-specific code:
#[cfg(target_os = "...")]blocks are included regardless of target - Feature flags:
#[cfg(feature = "...")]gated code is included unconditionally - Test-only code:
#[cfg(test)]modules are excluded from analysis
4. Re-exports and Transitive Dependencies
pub usechains: Transitive re-exports are not fully traced- Glob imports:
use module::*does not enumerate specific items - Prelude imports: Implicit prelude items are not tracked
5. External Crate Dependencies
- Third-party crates: Only internal g3 workspace crates are analyzed
- Workspace dependency versions: Version constraints not analyzed
- Optional dependencies: Not distinguished from required dependencies
What Was Inferred
1. Module Hierarchy
Module parent-child relationships inferred from:
moddeclarations inlib.rsandmod.rsfiles- File system structure (
foo/mod.rsimpliesfoomodule)
Confidence: High - Rust module system is deterministic
2. Crate Dependencies
Crate-level dependencies extracted from:
Cargo.toml[dependencies]sectionspath = "..."declarations for workspace crates
Confidence: High - Cargo.toml is authoritative
3. File-Level Imports
File imports extracted via regex pattern matching:
^use (g3_|crate::)for internal imports^(pub )?modfor module declarations
Confidence: Medium-High - May miss unusual import patterns
4. Fan-In/Fan-Out Counts
Coupling metrics derived from edge counts in dependency graph.
Confidence: Medium - Depends on completeness of edge extraction
What May Invalidate Conclusions
1. Code Changes
This analysis reflects the codebase state at generation time. Any of the following invalidate the analysis:
- New files added
- Import statements changed
- Module structure reorganized
- Cargo.toml dependencies modified
2. Incomplete Extraction
The regex-based extraction may miss:
- Multi-line
usestatements with unusual formatting - Imports inside function bodies
- Imports in macro invocations
extern cratedeclarations (deprecated but valid)
3. Test Code Exclusion
Test files (tests/*.rs, #[cfg(test)] modules) are excluded. Test-only dependencies and coupling patterns are not reflected.
4. Example Code Exclusion
Example files (examples/*.rs) are excluded from the graph.
5. Build Script Dependencies
build.rs files may introduce compile-time dependencies not reflected in the import graph.
Extraction Method Details
| Aspect | Method | Tool |
|---|---|---|
| Crate dependencies | Cargo.toml parsing | Manual inspection |
| Module declarations | Regex: ^(pub )?mod |
ripgrep |
| Internal imports | Regex: ^use (g3_|crate::) |
ripgrep |
| File enumeration | find crates -name "*.rs" |
find |
| Cycle detection | Manual graph traversal | N/A |
Recommendations for Future Analysis
- Use cargo metadata:
cargo metadata --format-version 1provides authoritative dependency information - Use rust-analyzer: LSP-based analysis would capture macro expansions
- Use cargo-depgraph: Specialized tool for Rust dependency visualization
- Include test coverage: Analyze test files separately for test-specific coupling