diff options
author | Chris Rose <offby1@offby1.net> | 2021-04-08 15:37:54 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-08 18:37:54 -0400 |
commit | 6817e7f6981d4cdd16367eec725e75bd6089d3a0 (patch) | |
tree | 37740b2c657e1094449010418fcf48af52699d90 /src/modules/rust.rs | |
parent | 1ff1f2b5dd4dd96abc16de914c2e4fcbaa41fb57 (diff) |
feat: add version format configuration (#2499)
Diffstat (limited to 'src/modules/rust.rs')
-rw-r--r-- | src/modules/rust.rs | 43 |
1 files changed, 30 insertions, 13 deletions
diff --git a/src/modules/rust.rs b/src/modules/rust.rs index 3f10ee190..963522a9c 100644 --- a/src/modules/rust.rs +++ b/src/modules/rust.rs @@ -7,7 +7,7 @@ use serde::Deserialize; use super::{Context, Module, RootModuleConfig}; use crate::configs::rust::RustConfig; -use crate::formatter::StringFormatter; +use crate::formatter::{StringFormatter, VersionFormatter}; /// Creates a module with the current Rust version pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> { @@ -38,7 +38,7 @@ pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> { .map(|variable| match variable { // This may result in multiple calls to `get_module_version` when a user have // multiple `$version` variables defined in `format`. - "version" => get_module_version(context).map(Ok), + "version" => get_module_version(context, &config).map(Ok), _ => None, }) .parse(None) @@ -55,7 +55,7 @@ pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> { Some(module) } -fn get_module_version(context: &Context) -> Option<String> { +fn get_module_version(context: &Context, config: &RustConfig) -> Option<String> { // `$CARGO_HOME/bin/rustc(.exe) --version` may attempt installing a rustup toolchain. // https://github.com/starship/starship/issues/417 // @@ -77,17 +77,19 @@ fn get_module_version(context: &Context) -> Option<String> { .or_else(|| find_rust_toolchain_file(&context)) { match execute_rustup_run_rustc_version(&toolchain) { - RustupRunRustcVersionOutcome::RustcVersion(stdout) => format_rustc_version(stdout), + RustupRunRustcVersionOutcome::RustcVersion(stdout) => { + format_rustc_version(config, stdout) + } RustupRunRustcVersionOutcome::ToolchainName(toolchain) => 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(execute_rustc_version()?) + format_rustc_version(config, execute_rustc_version()?) } RustupRunRustcVersionOutcome::Err => return None, } } else { - format_rustc_version(execute_rustc_version()?) + format_rustc_version(config, execute_rustc_version()?) }; Some(module_version) @@ -203,11 +205,15 @@ fn execute_rustc_version() -> Option<String> { } } -fn format_rustc_version(mut rustc_stdout: String) -> 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(); - - format!("v{}", formatted_version.replace("rustc", "").trim()) + 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), + } } #[derive(Debug, PartialEq)] @@ -320,17 +326,28 @@ 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)"); - assert_eq!(format_rustc_version(nightly_input), "v1.34.0-nightly"); + assert_eq!( + format_rustc_version(&test_config, nightly_input), + "v1.34.0-nightly" + ); let beta_input = String::from("rustc 1.34.0-beta.1 (2bc1d406d 2019-04-10)"); - assert_eq!(format_rustc_version(beta_input), "v1.34.0-beta.1"); + assert_eq!( + format_rustc_version(&test_config, beta_input), + "v1.34.0-beta.1" + ); let stable_input = String::from("rustc 1.34.0 (91856ed52 2019-04-10)"); - assert_eq!(format_rustc_version(stable_input), "v1.34.0"); + 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(version_without_hash), "v1.34.0"); + assert_eq!( + format_rustc_version(&test_config, version_without_hash), + "v1.34.0" + ); } #[test] |