Skip to main content

deps_cargo/
formatter.rs

1use deps_core::lsp_helpers::EcosystemFormatter;
2
3pub struct CargoFormatter;
4
5impl EcosystemFormatter for CargoFormatter {
6    fn format_version_for_text_edit(&self, version: &str) -> String {
7        version.to_string()
8    }
9
10    fn package_url(&self, name: &str) -> String {
11        format!("https://crates.io/crates/{name}")
12    }
13}
14
15#[cfg(test)]
16mod tests {
17    use super::*;
18
19    #[test]
20    fn test_format_version() {
21        let formatter = CargoFormatter;
22        assert_eq!(formatter.format_version_for_text_edit("1.0.214"), "1.0.214");
23        assert_eq!(formatter.format_version_for_text_edit("0.1.0"), "0.1.0");
24    }
25
26    #[test]
27    fn test_package_url() {
28        let formatter = CargoFormatter;
29        assert_eq!(
30            formatter.package_url("serde"),
31            "https://crates.io/crates/serde"
32        );
33        assert_eq!(
34            formatter.package_url("tokio-util"),
35            "https://crates.io/crates/tokio-util"
36        );
37    }
38
39    #[test]
40    fn test_default_normalize_is_identity() {
41        let formatter = CargoFormatter;
42        assert_eq!(formatter.normalize_package_name("serde"), "serde");
43        assert_eq!(formatter.normalize_package_name("tokio-util"), "tokio-util");
44    }
45
46    #[test]
47    fn test_default_yanked_message() {
48        let formatter = CargoFormatter;
49        assert_eq!(formatter.yanked_message(), "This version has been yanked");
50        assert_eq!(formatter.yanked_label(), "*(yanked)*");
51    }
52
53    #[test]
54    fn test_version_satisfies_requirement() {
55        let formatter = CargoFormatter;
56
57        assert!(formatter.version_satisfies_requirement("1.2.3", "1.2.3"));
58        assert!(formatter.version_satisfies_requirement("1.2.3", "^1.2"));
59        assert!(formatter.version_satisfies_requirement("1.2.3", "~1.2"));
60        assert!(formatter.version_satisfies_requirement("1.2.3", "1"));
61        assert!(formatter.version_satisfies_requirement("1.2.3", "1.2"));
62
63        assert!(!formatter.version_satisfies_requirement("1.2.3", "2.0.0"));
64        assert!(!formatter.version_satisfies_requirement("1.2.3", "1.3"));
65    }
66}