deps_core/lib.rs
1//! Core abstractions for deps-lsp.
2//!
3//! This crate provides the foundational traits and utilities used across
4//! all ecosystem-specific implementations (Cargo, npm, PyPI, etc.).
5//!
6//! # Architecture
7//!
8//! deps-core defines:
9//! - **Traits**: `PackageRegistry`, `ManifestParser`, `VersionInfo`, `PackageMetadata`
10//! - **HTTP Cache**: Shared caching layer with ETag/Last-Modified validation
11//! - **Error Types**: Unified error handling across all ecosystems
12//!
13//! # Examples
14//!
15//! Implementing a registry for a new ecosystem:
16//!
17//! ```no_run
18//! use deps_core::{PackageRegistry, VersionInfo, PackageMetadata};
19//! use async_trait::async_trait;
20//!
21//! #[derive(Clone)]
22//! struct MyVersion {
23//! version: String,
24//! deprecated: bool,
25//! }
26//!
27//! impl VersionInfo for MyVersion {
28//! fn version_string(&self) -> &str {
29//! &self.version
30//! }
31//!
32//! fn is_yanked(&self) -> bool {
33//! self.deprecated
34//! }
35//! }
36//!
37//! #[derive(Clone)]
38//! struct MyMetadata {
39//! name: String,
40//! latest: String,
41//! }
42//!
43//! impl PackageMetadata for MyMetadata {
44//! fn name(&self) -> &str {
45//! &self.name
46//! }
47//!
48//! fn description(&self) -> Option<&str> {
49//! None
50//! }
51//!
52//! fn repository(&self) -> Option<&str> {
53//! None
54//! }
55//!
56//! fn documentation(&self) -> Option<&str> {
57//! None
58//! }
59//!
60//! fn latest_version(&self) -> &str {
61//! &self.latest
62//! }
63//! }
64//!
65//! struct MyRegistry;
66//!
67//! #[async_trait]
68//! impl PackageRegistry for MyRegistry {
69//! type Version = MyVersion;
70//! type Metadata = MyMetadata;
71//! type VersionReq = String;
72//!
73//! async fn get_versions(&self, _name: &str) -> deps_core::error::Result<Vec<Self::Version>> {
74//! Ok(vec![])
75//! }
76//!
77//! async fn get_latest_matching(
78//! &self,
79//! _name: &str,
80//! _req: &Self::VersionReq,
81//! ) -> deps_core::error::Result<Option<Self::Version>> {
82//! Ok(None)
83//! }
84//!
85//! async fn search(&self, _query: &str, _limit: usize) -> deps_core::error::Result<Vec<Self::Metadata>> {
86//! Ok(vec![])
87//! }
88//! }
89//! ```
90
91pub mod cache;
92pub mod error;
93pub mod handler;
94pub mod lockfile;
95pub mod macros;
96pub mod parser;
97pub mod registry;
98pub mod version_matcher;
99
100// Re-export commonly used types
101pub use cache::{CachedResponse, HttpCache};
102pub use error::{DepsError, Result};
103pub use handler::{
104 DiagnosticsConfig, EcosystemHandler, InlayHintsConfig, VersionStringGetter, YankedChecker,
105 generate_code_actions, generate_diagnostics, generate_hover, generate_inlay_hints,
106};
107pub use lockfile::{LockFileProvider, ResolvedPackage, ResolvedPackages, ResolvedSource};
108pub use parser::{DependencyInfo, DependencySource, ManifestParser, ParseResultInfo};
109pub use registry::{PackageMetadata, PackageRegistry, VersionInfo};
110pub use version_matcher::{
111 Pep440Matcher, SemverMatcher, VersionRequirementMatcher, extract_pypi_min_version,
112 normalize_and_parse_version,
113};