starship/src/modules/mod.rs

213 lines
8.4 KiB
Rust
Raw Normal View History

// While adding out new module add out module to src/module.rs ALL_MODULES const array also.
mod aws;
2019-04-05 01:35:24 +00:00
mod character;
mod cmake;
mod cmd_duration;
2019-10-05 18:25:25 +00:00
mod conda;
mod crystal;
2020-04-11 16:37:24 +00:00
pub(crate) mod custom;
2020-07-29 15:38:23 +00:00
mod dart;
2019-04-05 00:35:35 +00:00
mod directory;
mod docker_context;
mod dotnet;
2020-03-02 03:29:27 +00:00
mod elixir;
mod elm;
mod env_var;
mod erlang;
mod gcloud;
mod git_branch;
2019-12-06 16:57:42 +00:00
mod git_commit;
mod git_state;
2019-05-14 04:43:11 +00:00
mod git_status;
mod golang;
mod helm;
2019-12-02 22:37:18 +00:00
mod hg_branch;
mod hostname;
mod java;
mod jobs;
mod julia;
mod kotlin;
mod kubernetes;
2019-04-05 00:35:35 +00:00
mod line_break;
mod lua;
mod memory_usage;
mod nim;
2019-08-25 15:41:20 +00:00
mod nix_shell;
2019-04-10 13:22:11 +00:00
mod nodejs;
mod ocaml;
mod openstack;
2019-05-01 14:45:56 +00:00
mod package;
mod perl;
2019-12-05 18:04:27 +00:00
mod php;
mod purescript;
2019-04-25 15:06:18 +00:00
mod python;
2019-08-13 22:43:29 +00:00
mod ruby;
2019-04-21 23:37:34 +00:00
mod rust;
mod scala;
mod shell;
mod shlvl;
2020-02-26 16:18:19 +00:00
mod singularity;
mod status;
2020-07-29 15:36:49 +00:00
mod swift;
mod terraform;
mod time;
mod username;
mod utils;
mod vagrant;
mod vcsh;
2020-05-21 16:49:49 +00:00
mod zig;
2019-04-04 00:14:26 +00:00
#[cfg(feature = "battery")]
mod battery;
use crate::config::RootModuleConfig;
use crate::context::{Context, Shell};
2019-05-01 20:34:24 +00:00
use crate::module::Module;
use std::time::Instant;
2019-04-04 16:18:02 +00:00
pub fn handle<'a>(module: &str, context: &'a Context) -> Option<Module<'a>> {
let start: Instant = Instant::now();
let mut m: Option<Module> = {
match module {
// Keep these ordered alphabetically.
// Default ordering is handled in configs/starship_root.rs
"aws" => aws::module(context),
#[cfg(feature = "battery")]
"battery" => battery::module(context),
"character" => character::module(context),
"cmake" => cmake::module(context),
"cmd_duration" => cmd_duration::module(context),
"conda" => conda::module(context),
"dart" => dart::module(context),
"directory" => directory::module(context),
"docker_context" => docker_context::module(context),
"dotnet" => dotnet::module(context),
"elixir" => elixir::module(context),
"elm" => elm::module(context),
"erlang" => erlang::module(context),
"env_var" => env_var::module(context),
"gcloud" => gcloud::module(context),
"git_branch" => git_branch::module(context),
"git_commit" => git_commit::module(context),
"git_state" => git_state::module(context),
"git_status" => git_status::module(context),
"golang" => golang::module(context),
"helm" => helm::module(context),
"hg_branch" => hg_branch::module(context),
"hostname" => hostname::module(context),
"java" => java::module(context),
"jobs" => jobs::module(context),
"julia" => julia::module(context),
"kotlin" => kotlin::module(context),
"kubernetes" => kubernetes::module(context),
"line_break" => line_break::module(context),
"lua" => lua::module(context),
"memory_usage" => memory_usage::module(context),
"nim" => nim::module(context),
"nix_shell" => nix_shell::module(context),
"nodejs" => nodejs::module(context),
"ocaml" => ocaml::module(context),
"openstack" => openstack::module(context),
"package" => package::module(context),
"perl" => perl::module(context),
"php" => php::module(context),
"purescript" => purescript::module(context),
"python" => python::module(context),
"ruby" => ruby::module(context),
"rust" => rust::module(context),
"scala" => scala::module(context),
"shell" => shell::module(context),
"shlvl" => shlvl::module(context),
"singularity" => singularity::module(context),
"swift" => swift::module(context),
"status" => status::module(context),
"terraform" => terraform::module(context),
"time" => time::module(context),
"crystal" => crystal::module(context),
"username" => username::module(context),
"vagrant" => vagrant::module(context),
"vcsh" => vcsh::module(context),
"zig" => zig::module(context),
_ => {
eprintln!("Error: Unknown module {}. Use starship module --list to list out all supported modules.", module);
None
}
}
};
let elapsed = start.elapsed();
log::trace!("Took {:?} to compute module {:?}", elapsed, module);
if elapsed.as_millis() < 1 {
// If we take less than 1ms to compute a None, then we will not return a module at all
// if we have a module: default duration is 0 so no need to change it
m
} else {
// if we took more than 1ms we want to report that and so--in case we have None currently--
// need to create an empty module just to hold the duration for that case
m.get_or_insert_with(|| context.new_module(module)).duration = elapsed;
m
2019-04-04 00:14:26 +00:00
}
}
pub fn description(module: &str) -> &'static str {
match module {
"aws" => "The current AWS region and profile",
"battery" => "The current charge of the device's battery and its current charging status",
"character" => {
"A character (usually an arrow) beside where the text is entered in your terminal"
}
"cmake" => "The currently installed version of CMake",
"cmd_duration" => "How long the last command took to execute",
"conda" => "The current conda environment, if $CONDA_DEFAULT_ENV is set",
"crystal" => "The currently installed version of Crystal",
2020-07-29 15:38:23 +00:00
"dart" => "The currently installed version of Dart",
"directory" => "The current working directory",
"docker_context" => "The current docker context",
"dotnet" => "The relevant version of the .NET Core SDK for the current directory",
"env_var" => "Displays the current value of a selected environment variable",
"erlang" => "Current OTP version",
"gcloud" => "The current GCP client configuration",
"git_branch" => "The active branch of the repo in your current directory",
"git_commit" => "The active commit (and tag if any) of the repo in your current directory",
"git_state" => "The current git operation, and it's progress",
"git_status" => "Symbol representing the state of the repo",
"golang" => "The currently installed version of Golang",
"helm" => "The currently installed version of Helm",
"hg_branch" => "The active branch of the repo in your current directory",
"hostname" => "The system hostname",
"java" => "The currently installed version of Java",
"jobs" => "The current number of jobs running",
"julia" => "The currently installed version of Julia",
"kotlin" => "The currently installed version of Kotlin",
"kubernetes" => "The current Kubernetes context name and, if set, the namespace",
"line_break" => "Separates the prompt into two lines",
"lua" => "The currently installed version of Lua",
"memory_usage" => "Current system memory and swap usage",
"nim" => "The currently installed version of Nim",
"nix_shell" => "The nix-shell environment",
"nodejs" => "The currently installed version of NodeJS",
"ocaml" => "The currently installed version of OCaml",
"openstack" => "The current OpenStack cloud and project",
"package" => "The package version of the current directory's project",
"perl" => "The currently installed version of Perl",
"php" => "The currently installed version of PHP",
"purescript" => "The currently installed version of PureScript",
"python" => "The currently installed version of Python",
"ruby" => "The currently installed version of Ruby",
"rust" => "The currently installed version of Rust",
"scala" => "The currently installed version of Scala",
2020-07-29 15:36:49 +00:00
"swift" => "The currently installed version of Swift",
"shell" => "The currently used shell indicator",
"shlvl" => "The current value of SHLVL",
"status" => "The status of the last command",
"terraform" => "The currently selected terraform workspace and version",
"time" => "The current local time",
"username" => "The active user's username",
"vagrant" => "The currently installed version of Vagrant",
"vcsh" => "The currently active VCSH repository",
2020-05-21 16:49:49 +00:00
"zig" => "The currently installed version of Zig",
_ => "<no description>",
}
}