summaryrefslogtreecommitdiffstats
path: root/src/modules/rust.rs
diff options
context:
space:
mode:
authorChris Rose <offby1@offby1.net>2021-04-08 15:37:54 -0700
committerGitHub <noreply@github.com>2021-04-08 18:37:54 -0400
commit6817e7f6981d4cdd16367eec725e75bd6089d3a0 (patch)
tree37740b2c657e1094449010418fcf48af52699d90 /src/modules/rust.rs
parent1ff1f2b5dd4dd96abc16de914c2e4fcbaa41fb57 (diff)
feat: add version format configuration (#2499)
Diffstat (limited to 'src/modules/rust.rs')
-rw-r--r--src/modules/rust.rs43
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]