Skip to main content

cargo_coupling/
lib.rs

1//! # cargo-coupling - Coupling Analysis Tool
2//!
3//! A tool for measuring and analyzing coupling in Rust projects,
4//! based on Vlad Khononov's "Balancing Coupling in Software Design".
5//!
6//! ## Overview
7//!
8//! cargo-coupling measures coupling across three dimensions:
9//!
10//! 1. **Integration Strength** - How much knowledge is shared between components
11//! 2. **Distance** - How far apart components are in the module hierarchy
12//! 3. **Volatility** - How frequently components change
13//!
14//! ## Usage
15//!
16//! ```bash
17//! # Analyze current project (as cargo subcommand)
18//! cargo coupling ./src
19//!
20//! # Generate detailed report
21//! cargo coupling -o report.md ./src
22//!
23//! # Show summary only
24//! cargo coupling --summary ./src
25//! ```
26//!
27//! ## Balance Equation
28//!
29//! The balance score is calculated as:
30//! ```text
31//! BALANCE = (STRENGTH XOR DISTANCE) OR NOT VOLATILITY
32//! ```
33//!
34//! - Strong coupling + close distance = Good (locality)
35//! - Weak coupling + far distance = Good (loose coupling)
36//! - Strong coupling + far distance = Bad (global complexity)
37//! - High volatility + strong coupling = Bad (cascading changes)
38
39pub mod analyzer;
40pub mod balance;
41mod classification;
42pub mod cli_output;
43pub mod config;
44pub mod design;
45pub mod diff;
46mod discovery;
47pub mod external;
48pub mod history;
49pub mod manifest;
50pub mod metrics;
51pub mod report;
52pub mod volatility;
53pub mod web;
54pub mod workspace;
55
56pub use analyzer::{
57    AnalyzedFileResult, AnalyzerError, CouplingAnalyzer, Dependency, DependencyKind, ItemDepType,
58    ItemDependency, ItemKind, analyze_project, analyze_project_parallel_with_config,
59    analyze_rust_file, analyze_rust_file_full, analyze_workspace, analyze_workspace_with_config,
60};
61pub use balance::action::RefactoringAction;
62pub use balance::grade::{HealthGrade, ProjectBalanceReport};
63pub use balance::issue::CouplingIssue;
64pub use balance::issue::IssueKey;
65pub use balance::issue_type::IssueType;
66pub use balance::project::{
67    analyze_project_balance, analyze_project_balance_with_thresholds, calculate_project_score,
68};
69pub use balance::rationale::{GradeDimension, GradeRationale, IssueTypeContribution};
70pub use balance::score::{BalanceInterpretation, BalanceScore, IssueThresholds};
71pub use balance::severity::Severity;
72pub use config::{
73    AnalysisConfig, CompiledConfig, ConfigError, CouplingConfig, DeadConfigPattern,
74    ThresholdsConfig, VolatilityConfig, load_compiled_config, load_config,
75};
76pub use diff::{BaselineDiff, diff_ref_analysis, diff_reports};
77pub use external::{
78    ExternalDependencyReport, ExternalDependencyUsage, SCATTERED_EXTERNAL_BREADTH_THRESHOLD,
79    analyze_external_dependencies, detect_scattered_external_coupling, load_lock_versions_near,
80};
81pub use history::{
82    HistoryError, HistoryPoint, HistoryReport, RefAnalysis, SkippedRevision, analyze_history,
83    analyze_ref,
84};
85pub use manifest::{AnalysisManifest, BlindSpot, ManifestContext, build_manifest};
86pub use metrics::coupling::{CouplingLocation, CouplingMetrics};
87pub use metrics::dimensions::{
88    Distance, IntegrationStrength, MetricsConfig, Subdomain, Visibility,
89};
90pub use metrics::module::{
91    BalanceClassification, BalanceCounts, DimensionStats, DistanceCounts, FunctionDefinition,
92    ModuleMetrics, StrengthCounts, TypeDefinition, VolatilityCounts,
93};
94pub use metrics::project::{CircularDependencySummary, ProjectMetrics};
95pub use report::{
96    TextReportOptions, generate_ai_output, generate_ai_output_with_thresholds, generate_report,
97    generate_report_with_options, generate_report_with_thresholds, generate_summary,
98    generate_summary_with_options, generate_summary_with_thresholds,
99};
100pub use volatility::Volatility;
101pub use volatility::{VolatilityAnalyzer, VolatilityError, VolatilityStats};
102pub use workspace::{CrateInfo, WorkspaceError, WorkspaceInfo};