Skip to main content

ryo_metadata/
lib.rs

1#![warn(missing_docs)]
2//! ryo-metadata: Cargo workspace and crate metadata resolution
3//!
4//! This crate provides accurate crate name resolution for Rust projects,
5//! solving the "crate::" vs actual crate name problem.
6//!
7//! # Problem
8//!
9//! When analyzing Rust source code, internal references like `crate::config`
10//! need to be resolved to their actual crate names like `ryo_app::config`.
11//!
12//! # Solution
13//!
14//! Use `cargo metadata` to:
15//! 1. Discover workspace members
16//! 2. Map file paths to crate names
17//! 3. Provide accurate SymbolPath resolution
18//!
19//! # Example
20//!
21//! ```ignore
22//! use ryo_metadata::WorkspaceResolver;
23//!
24//! let resolver = WorkspaceResolver::from_manifest("Cargo.toml")?;
25//!
26//! // Get crate name for a file
27//! let crate_name = resolver.crate_for_file("crates/ryo-app/src/lib.rs");
28//! assert_eq!(crate_name, Some("ryo_app"));
29//!
30//! // Get all workspace members
31//! for member in resolver.members() {
32//!     println!("{}: {}", member.name, member.manifest_path);
33//! }
34//! ```
35
36mod error;
37mod resolved;
38mod resolver;
39
40pub use error::MetadataError;
41pub use resolved::{ResolvedCrateName, ResolvedFile, ResolvedModulePath};
42pub use resolver::{CrateInfo, WorkspaceResolver};
43
44// Re-export cargo_metadata for downstream crates
45pub use cargo_metadata;
46pub use cargo_metadata::{Metadata, MetadataCommand, Package};
47
48/// Result type for ryo-metadata operations
49pub type Result<T> = std::result::Result<T, MetadataError>;