deps_lsp/
lib.rs

1pub mod config;
2pub mod document;
3pub mod file_watcher;
4pub mod handlers;
5pub mod progress;
6pub mod server;
7
8#[cfg(test)]
9mod test_utils;
10
11use std::sync::Arc;
12
13pub use deps_core::{DepsError, EcosystemRegistry, HttpCache, Result};
14pub use server::Backend;
15
16/// Declares an ecosystem: re-exports types and registers at runtime.
17macro_rules! ecosystem {
18    ($feature:literal, $crate_name:ident, $ecosystem:ident, [$($types:ident),* $(,)?]) => {
19        #[cfg(feature = $feature)]
20        pub use $crate_name::{$ecosystem, $($types),*};
21    };
22}
23
24/// Registers ecosystem if feature is enabled.
25macro_rules! register {
26    ($feature:literal, $ecosystem:ident, $registry:expr, $cache:expr) => {
27        #[cfg(feature = $feature)]
28        $registry.register(Arc::new($ecosystem::new(Arc::clone($cache))));
29    };
30}
31
32// =============================================================================
33// Ecosystems — to add new: 1) feature in Cargo.toml  2) add ecosystem!() + register!()
34// =============================================================================
35
36ecosystem!(
37    "cargo",
38    deps_cargo,
39    CargoEcosystem,
40    [
41        CargoParser,
42        CargoVersion,
43        CrateInfo,
44        CratesIoRegistry,
45        DependencySection,
46        DependencySource,
47        ParseResult,
48        ParsedDependency,
49        parse_cargo_toml,
50    ]
51);
52
53ecosystem!(
54    "npm",
55    deps_npm,
56    NpmEcosystem,
57    [
58        NpmDependency,
59        NpmDependencySection,
60        NpmPackage,
61        NpmParseResult,
62        NpmRegistry,
63        NpmVersion,
64        parse_package_json,
65    ]
66);
67
68ecosystem!(
69    "pypi",
70    deps_pypi,
71    PypiEcosystem,
72    [
73        PypiDependency,
74        PypiDependencySection,
75        PypiParser,
76        PypiRegistry,
77        PypiVersion,
78    ]
79);
80
81ecosystem!(
82    "go",
83    deps_go,
84    GoEcosystem,
85    [
86        GoDependency,
87        GoDirective,
88        GoParseResult,
89        GoRegistry,
90        GoVersion,
91        parse_go_mod,
92    ]
93);
94
95/// Registers all enabled ecosystems.
96pub fn register_ecosystems(registry: &EcosystemRegistry, cache: Arc<HttpCache>) {
97    register!("cargo", CargoEcosystem, registry, &cache);
98    register!("npm", NpmEcosystem, registry, &cache);
99    register!("pypi", PypiEcosystem, registry, &cache);
100    register!("go", GoEcosystem, registry, &cache);
101}
102
103#[cfg(test)]
104mod tests {
105    use super::*;
106
107    #[test]
108    fn test_register_ecosystems() {
109        let registry = Arc::new(EcosystemRegistry::new());
110        let cache = Arc::new(HttpCache::new());
111        register_ecosystems(&registry, Arc::clone(&cache));
112
113        #[cfg(feature = "cargo")]
114        assert!(registry.get("cargo").is_some());
115        #[cfg(feature = "npm")]
116        assert!(registry.get("npm").is_some());
117        #[cfg(feature = "pypi")]
118        assert!(registry.get("pypi").is_some());
119        #[cfg(feature = "go")]
120        assert!(registry.get("go").is_some());
121    }
122}