mirror of
https://github.com/starship/starship.git
synced 2025-01-13 18:08:19 +01:00
fix(elixir): correctly parse dev and rc versions (#2573)
This commit is contained in:
parent
f765ca3b3f
commit
51c2ae0a28
@ -4,12 +4,7 @@ use crate::configs::elixir::ElixirConfig;
|
|||||||
use crate::formatter::StringFormatter;
|
use crate::formatter::StringFormatter;
|
||||||
|
|
||||||
use once_cell::sync::Lazy;
|
use once_cell::sync::Lazy;
|
||||||
use regex::Regex;
|
|
||||||
use std::ops::Deref;
|
use std::ops::Deref;
|
||||||
const ELIXIR_VERSION_PATTERN: &str = "\
|
|
||||||
Erlang/OTP (?P<otp>\\d+)[^\\n]+
|
|
||||||
|
|
||||||
Elixir (?P<elixir>\\d[.\\d]+).*";
|
|
||||||
|
|
||||||
/// Create a module with the current Elixir version
|
/// Create a module with the current Elixir version
|
||||||
pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> {
|
pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> {
|
||||||
@ -73,13 +68,15 @@ fn get_elixir_version(context: &Context) -> Option<(String, String)> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn parse_elixir_version(version: &str) -> Option<(String, String)> {
|
fn parse_elixir_version(version: &str) -> Option<(String, String)> {
|
||||||
let version_regex = Regex::new(ELIXIR_VERSION_PATTERN).ok()?;
|
let mut lines = version.lines();
|
||||||
let captures = version_regex.captures(version)?;
|
// split line into ["Erlang/OTP", "22", "[erts-10.5]", ...], take "22"
|
||||||
|
let otp_version = lines.next()?.split_whitespace().nth(1)?;
|
||||||
|
// skip empty line
|
||||||
|
let _ = lines.next()?;
|
||||||
|
// split line into ["Elixir", "1.10", "(compiled", ...], take "1.10"
|
||||||
|
let elixir_version = lines.next()?.split_whitespace().nth(1)?;
|
||||||
|
|
||||||
let otp_version = captures["otp"].to_owned();
|
Some((otp_version.to_string(), elixir_version.to_string()))
|
||||||
let elixir_version = captures["elixir"].to_owned();
|
|
||||||
|
|
||||||
Some((otp_version, elixir_version))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
@ -92,15 +89,32 @@ mod tests {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_parse_elixir_version() {
|
fn test_parse_elixir_version() {
|
||||||
const OUTPUT: &str = "\
|
let stable_input = "\
|
||||||
Erlang/OTP 22 [erts-10.5] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [hipe]
|
Erlang/OTP 23 [erts-11.1.7] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1]
|
||||||
|
|
||||||
Elixir 1.10 (compiled with Erlang/OTP 22)
|
Elixir 1.11.3 (compiled with Erlang/OTP 21)
|
||||||
";
|
";
|
||||||
|
let rc_input = "\
|
||||||
|
Erlang/OTP 23 [erts-11.1.7] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1]
|
||||||
|
|
||||||
|
Elixir 1.12.0-rc.0 (31d2b99) (compiled with Erlang/OTP 21)
|
||||||
|
";
|
||||||
|
let dev_input = "\
|
||||||
|
Erlang/OTP 23 [erts-11.1.7] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1]
|
||||||
|
|
||||||
|
Elixir 1.13.0-dev (compiled with Erlang/OTP 23)
|
||||||
|
";
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
parse_elixir_version(OUTPUT),
|
parse_elixir_version(stable_input),
|
||||||
Some(("22".to_owned(), "1.10".to_owned()))
|
Some(("23".to_string(), "1.11.3".to_string()))
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
parse_elixir_version(rc_input),
|
||||||
|
Some(("23".to_string(), "1.12.0-rc.0".to_string()))
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
parse_elixir_version(dev_input),
|
||||||
|
Some(("23".to_string(), "1.13.0-dev".to_string()))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user