diff options
author | Dario Vladović <d.vladimyr@gmail.com> | 2021-04-10 19:06:25 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-10 19:06:25 +0200 |
commit | fe030c2064e20f1359ab4844d3b3472a1ed1f6b6 (patch) | |
tree | 076eed69af43236b5000e05b685ad16b8ca89514 /src/modules/rust.rs | |
parent | 436eb61efd57a9e76131fc293486ef562e2b1f79 (diff) |
refactor: propagate version formatting errors (#2566)
* refactor: propagate version formatting errors
* refactor: trim version formatting boilerplate
* refactor(node): unwrap version formatting
* docs: fix typo
* docs: remove dots after `version_format`
* feat: lazy version parsing
* refactor(version-formatter): collect segments into string
Diffstat (limited to 'src/modules/rust.rs')
-rw-r--r-- | src/modules/rust.rs | 69 |
1 files changed, 35 insertions, 34 deletions
diff --git a/src/modules/rust.rs b/src/modules/rust.rs index 963522a9c..a465d9798 100644 --- a/src/modules/rust.rs +++ b/src/modules/rust.rs @@ -72,27 +72,25 @@ fn get_module_version(context: &Context, config: &RustConfig) -> Option<String> // - `rustup show` // - `rustup show active-toolchain` // - `rustup which` - let module_version = if let Some(toolchain) = env_rustup_toolchain(context) + if let Some(toolchain) = env_rustup_toolchain(context) .or_else(|| execute_rustup_override_list(&context.current_dir)) .or_else(|| find_rust_toolchain_file(&context)) { match execute_rustup_run_rustc_version(&toolchain) { - RustupRunRustcVersionOutcome::RustcVersion(stdout) => { - format_rustc_version(config, stdout) + RustupRunRustcVersionOutcome::RustcVersion(rustc_version) => { + format_rustc_version(&rustc_version, config.version_format) } - RustupRunRustcVersionOutcome::ToolchainName(toolchain) => toolchain, + RustupRunRustcVersionOutcome::ToolchainName(toolchain) => Some(toolchain), RustupRunRustcVersionOutcome::RustupNotWorking => { // If `rustup` is not in `$PATH` or cannot be executed for other reasons, we can // safely execute `rustc --version`. - format_rustc_version(config, execute_rustc_version()?) + format_rustc_version(&execute_rustc_version()?, config.version_format) } - RustupRunRustcVersionOutcome::Err => return None, + RustupRunRustcVersionOutcome::Err => None, } } else { - format_rustc_version(config, execute_rustc_version()?) - }; - - Some(module_version) + format_rustc_version(&execute_rustc_version()?, config.version_format) + } } fn env_rustup_toolchain(context: &Context) -> Option<String> { @@ -205,14 +203,19 @@ fn execute_rustc_version() -> Option<String> { } } -fn format_rustc_version(config: &RustConfig, mut rustc_stdout: String) -> String { - let offset = &rustc_stdout.find('(').unwrap_or_else(|| rustc_stdout.len()); - let formatted_version: String = rustc_stdout.drain(..offset).collect(); - let full_version_string = formatted_version.replace("rustc", ""); - let version_string = full_version_string.trim(); - match VersionFormatter::new(config.version_format) { - Ok(formatter) => formatter.format_version(&version_string), - _ => format!("v{}", version_string), +fn format_rustc_version(rustc_version: &str, version_format: &str) -> Option<String> { + let version = rustc_version + // split into ["rustc", "1.34.0", ...] + .split_whitespace() + // get down to "1.34.0" + .nth(1)?; + + match VersionFormatter::format_version(version, version_format) { + Ok(formatted) => Some(formatted), + Err(error) => { + log::warn!("Error formating `rust` version:\n{}", error); + Some(format!("v{}", version)) + } } } @@ -326,27 +329,25 @@ mod tests { #[test] fn test_format_rustc_version() { - let test_config: RustConfig = RustConfig::default(); - - let nightly_input = String::from("rustc 1.34.0-nightly (b139669f3 2019-04-10)"); + let config = RustConfig::default(); + let rustc_stable = "rustc 1.34.0 (91856ed52 2019-04-10)"; + let rustc_beta = "rustc 1.34.0-beta.1 (2bc1d406d 2019-04-10)"; + let rustc_nightly = "rustc 1.34.0-nightly (b139669f3 2019-04-10)"; assert_eq!( - format_rustc_version(&test_config, nightly_input), - "v1.34.0-nightly" + format_rustc_version(rustc_nightly, config.version_format), + Some("v1.34.0-nightly".to_string()) ); - - let beta_input = String::from("rustc 1.34.0-beta.1 (2bc1d406d 2019-04-10)"); assert_eq!( - format_rustc_version(&test_config, beta_input), - "v1.34.0-beta.1" + format_rustc_version(rustc_beta, config.version_format), + Some("v1.34.0-beta.1".to_string()) + ); + assert_eq!( + format_rustc_version(rustc_stable, config.version_format), + Some("v1.34.0".to_string()) ); - - let stable_input = String::from("rustc 1.34.0 (91856ed52 2019-04-10)"); - assert_eq!(format_rustc_version(&test_config, stable_input), "v1.34.0"); - - let version_without_hash = String::from("rustc 1.34.0"); assert_eq!( - format_rustc_version(&test_config, version_without_hash), - "v1.34.0" + format_rustc_version("rustc 1.34.0", config.version_format), + Some("v1.34.0".to_string()) ); } |