deps_cargo/
formatter.rs

1use deps_core::lsp_helpers::EcosystemFormatter;
2
3pub struct CargoFormatter;
4
5impl EcosystemFormatter for CargoFormatter {
6    fn format_version_for_code_action(&self, version: &str) -> String {
7        format!("\"{version}\"")
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!(
23            formatter.format_version_for_code_action("1.0.214"),
24            "\"1.0.214\""
25        );
26        assert_eq!(
27            formatter.format_version_for_code_action("0.1.0"),
28            "\"0.1.0\""
29        );
30    }
31
32    #[test]
33    fn test_package_url() {
34        let formatter = CargoFormatter;
35        assert_eq!(
36            formatter.package_url("serde"),
37            "https://crates.io/crates/serde"
38        );
39        assert_eq!(
40            formatter.package_url("tokio-util"),
41            "https://crates.io/crates/tokio-util"
42        );
43    }
44
45    #[test]
46    fn test_default_normalize_is_identity() {
47        let formatter = CargoFormatter;
48        assert_eq!(formatter.normalize_package_name("serde"), "serde");
49        assert_eq!(formatter.normalize_package_name("tokio-util"), "tokio-util");
50    }
51
52    #[test]
53    fn test_default_yanked_message() {
54        let formatter = CargoFormatter;
55        assert_eq!(formatter.yanked_message(), "This version has been yanked");
56        assert_eq!(formatter.yanked_label(), "*(yanked)*");
57    }
58
59    #[test]
60    fn test_version_satisfies_requirement() {
61        let formatter = CargoFormatter;
62
63        assert!(formatter.version_satisfies_requirement("1.2.3", "1.2.3"));
64        assert!(formatter.version_satisfies_requirement("1.2.3", "^1.2"));
65        assert!(formatter.version_satisfies_requirement("1.2.3", "~1.2"));
66        assert!(formatter.version_satisfies_requirement("1.2.3", "1"));
67        assert!(formatter.version_satisfies_requirement("1.2.3", "1.2"));
68
69        assert!(!formatter.version_satisfies_requirement("1.2.3", "2.0.0"));
70        assert!(!formatter.version_satisfies_requirement("1.2.3", "1.3"));
71    }
72}