adk_doc_audit/
lib.rs

1//! # adk-doc-audit
2//!
3//! Documentation audit system for ADK-Rust that validates documentation against actual crate implementations.
4//!
5//! This crate provides comprehensive documentation validation including:
6//! - API reference validation against actual implementations
7//! - Code example compilation testing
8//! - Version consistency checking
9//! - Cross-reference validation
10//! - Automated fix suggestions
11//! - Comprehensive audit reporting
12//!
13//! ## Features
14//!
15//! - **API Validation**: Ensures all API references match current implementations
16//! - **Code Compilation**: Validates that documentation examples compile
17//! - **Version Consistency**: Checks version references are current
18//! - **Link Validation**: Validates internal documentation links
19//! - **Automated Suggestions**: Provides fix suggestions for issues
20//! - **Multiple Formats**: Supports console, JSON, and Markdown output
21//! - **CI/CD Integration**: Designed for build pipeline integration
22//! - **Incremental Audits**: Supports auditing only changed files
23//!
24//! ## Quick Start
25//!
26//! ```rust,ignore
27//! use adk_doc_audit::{AuditConfig, AuditOrchestrator};
28//!
29//! #[tokio::main]
30//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
31//!     let config = AuditConfig::builder()
32//!         .workspace_path(".")
33//!         .docs_path("docs/official_docs")
34//!         .build()?;
35//!     
36//!     let orchestrator = AuditOrchestrator::new(config).await?;
37//!     let report = orchestrator.run_full_audit().await?;
38//!     
39//!     println!("Audit complete: {} issues found", report.summary.total_issues);
40//!     Ok(())
41//! }
42//! ```
43//!
44//! ## CLI Usage
45//!
46//! The crate also provides a command-line interface:
47//!
48//! ```bash
49//! # Run full audit
50//! adk-doc-audit audit --workspace . --docs docs/official_docs
51//!
52//! # Run incremental audit
53//! adk-doc-audit incremental --workspace . --docs docs/official_docs --changed file1.md file2.md
54//!
55//! # Validate single file
56//! adk-doc-audit validate docs/official_docs/getting-started.md
57//! ```
58
59pub mod analyzer;
60pub mod cli;
61pub mod config;
62pub mod error;
63pub mod orchestrator;
64pub mod parser;
65pub mod reporter;
66pub mod suggestion;
67pub mod validator;
68pub mod version;
69
70// Re-export commonly used types
71pub use analyzer::{
72    CodeAnalyzer, CrateInfo, CrateRegistry, Dependency, PublicApi, ValidationResult,
73};
74pub use cli::{AuditCli, AuditCommand, CliOutputFormat, CliSeverity};
75pub use config::{AuditConfig, AuditConfigBuilder, IssueSeverity, OutputFormat};
76pub use error::{AuditError, Result};
77pub use orchestrator::AuditOrchestrator;
78pub use parser::{
79    ApiItemType, ApiReference, CodeExample, DocumentationParser, FeatureMention, InternalLink,
80    ParsedDocument, VersionReference, VersionType,
81};
82pub use reporter::{
83    AuditIssue, AuditReport, AuditReportConfig, AuditSummary, FileAuditResult, IssueCategory,
84    ProblematicFile, Recommendation, RecommendationType, ReportGenerator,
85};
86pub use suggestion::{Suggestion, SuggestionConfig, SuggestionEngine, SuggestionType};
87pub use validator::{
88    AsyncValidationConfig, CompilationError, ErrorType, ExampleValidator, ValidationMetadata,
89    ValidationResult as ExampleValidationResult,
90};
91pub use version::{
92    DependencySpec, ValidationSeverity, VersionTolerance, VersionValidationConfig,
93    VersionValidationResult, VersionValidator, WorkspaceVersionInfo,
94};
95
96// Placeholder exports for components that will be implemented in later tasks
97// These will be uncommented as the components are implemented
98
99// pub mod orchestrator;
100
101// pub use orchestrator::{AuditOrchestrator};
102
103/// Version information for the crate.
104pub const VERSION: &str = env!("CARGO_PKG_VERSION");
105
106/// Name of the crate.
107pub const CRATE_NAME: &str = env!("CARGO_PKG_NAME");
108
109#[cfg(test)]
110mod tests {
111    use super::*;
112
113    #[test]
114    fn test_version_info() {
115        assert!(!VERSION.is_empty());
116        assert_eq!(CRATE_NAME, "adk-doc-audit");
117    }
118
119    #[test]
120    fn test_config_creation() {
121        // Create temporary directories for testing
122        let temp_dir = std::env::temp_dir();
123        let workspace_path = temp_dir.join("test_workspace_2");
124        let docs_path = temp_dir.join("test_docs_2");
125
126        // Create the directories
127        std::fs::create_dir_all(&workspace_path).unwrap();
128        std::fs::create_dir_all(&docs_path).unwrap();
129
130        let config =
131            AuditConfig::builder().workspace_path(&workspace_path).docs_path(&docs_path).build();
132
133        // This should succeed now that paths exist
134        assert!(config.is_ok());
135
136        // Clean up
137        std::fs::remove_dir_all(&workspace_path).ok();
138        std::fs::remove_dir_all(&docs_path).ok();
139    }
140}