firedbg_rust_debugger/
version.rs1pub fn rustc_version() -> String {
3 let rustc = std::env::var("RUSTC").unwrap_or_else(|_| "rustc".to_string());
4 let output = std::process::Command::new(rustc)
5 .arg("--version")
6 .output()
7 .unwrap();
8 let stdout = std::str::from_utf8(&output.stdout).unwrap();
9 parse_rustc_version(stdout)
10}
11
12fn parse_rustc_version(line: &str) -> String {
13 let full_version = line.split_whitespace().nth(1).expect("full version");
14 let mut version_parts: Vec<_> = full_version.split('.').rev().collect();
15 assert!(version_parts.len() > 2);
16 let major = version_parts.pop().expect("major version");
17 let minor = version_parts.pop().expect("minor version");
18 format!("{major}.{minor}")
19}
20
21#[cfg(test)]
22mod tests {
23 use super::*;
24
25 #[test]
26 fn test_parse_rustc_version() {
27 assert_eq!(
28 parse_rustc_version("rustc 1.73.0 (cc66ad468 2023-10-03)"),
29 "1.73"
30 );
31 assert_eq!(
32 parse_rustc_version("rustc 1.72.1 (xxxxxxxxx 2023-09-19)"),
33 "1.72"
34 );
35 assert_eq!(
36 parse_rustc_version("rustc 1.72.0 (xxxxxxxxx 2023-08-24)"),
37 "1.72"
38 );
39 assert_eq!(
40 parse_rustc_version("rustc 1.71.1 (xxxxxxxxx 2023-08-03)"),
41 "1.71"
42 );
43 assert_eq!(
44 parse_rustc_version("rustc 1.71.0 (xxxxxxxxx 2023-07-13)"),
45 "1.71"
46 );
47 assert_eq!(
48 parse_rustc_version("rustc 1.70.0 (xxxxxxxxx 2023-06-01)"),
49 "1.70"
50 );
51 }
52}