mirror of
https://github.com/openai/codex.git
synced 2026-10-28 16:06:15 +00:00
This will automatically render any `Stage::Beta` features. The change only gets applied to the *next session*. This started as a bug but actually this is a good thing to prevent out of distribution push <img width="986" height="288" alt="Screenshot 2025-12-15 at 15 38 35" src="https://github.com/user-attachments/assets/78b7a71d-0e43-4828-a118-91c5237909c7" /> <img width="509" height="109" alt="Screenshot 2025-12-15 at 17 35 44" src="https://github.com/user-attachments/assets/6933de52-9b66-4abf-b58b-a5f26d5747e2" />
66 lines
1.6 KiB
Rust
66 lines
1.6 KiB
Rust
use codex_core::features::FEATURES;
|
|
use lazy_static::lazy_static;
|
|
use rand::Rng;
|
|
|
|
const RAW_TOOLTIPS: &str = include_str!("../tooltips.txt");
|
|
|
|
fn beta_tooltips() -> Vec<&'static str> {
|
|
FEATURES
|
|
.iter()
|
|
.filter_map(|spec| spec.stage.beta_announcement())
|
|
.collect()
|
|
}
|
|
|
|
lazy_static! {
|
|
static ref TOOLTIPS: Vec<&'static str> = RAW_TOOLTIPS
|
|
.lines()
|
|
.map(str::trim)
|
|
.filter(|line| !line.is_empty() && !line.starts_with('#'))
|
|
.collect();
|
|
static ref ALL_TOOLTIPS: Vec<&'static str> = {
|
|
let mut tips = Vec::new();
|
|
tips.extend(TOOLTIPS.iter().copied());
|
|
tips.extend(beta_tooltips());
|
|
tips
|
|
};
|
|
}
|
|
|
|
pub(crate) fn random_tooltip() -> Option<&'static str> {
|
|
let mut rng = rand::rng();
|
|
pick_tooltip(&mut rng)
|
|
}
|
|
|
|
fn pick_tooltip<R: Rng + ?Sized>(rng: &mut R) -> Option<&'static str> {
|
|
if ALL_TOOLTIPS.is_empty() {
|
|
None
|
|
} else {
|
|
ALL_TOOLTIPS
|
|
.get(rng.random_range(0..ALL_TOOLTIPS.len()))
|
|
.copied()
|
|
}
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
use rand::SeedableRng;
|
|
use rand::rngs::StdRng;
|
|
|
|
#[test]
|
|
fn random_tooltip_returns_some_tip_when_available() {
|
|
let mut rng = StdRng::seed_from_u64(42);
|
|
assert!(pick_tooltip(&mut rng).is_some());
|
|
}
|
|
|
|
#[test]
|
|
fn random_tooltip_is_reproducible_with_seed() {
|
|
let expected = {
|
|
let mut rng = StdRng::seed_from_u64(7);
|
|
pick_tooltip(&mut rng)
|
|
};
|
|
|
|
let mut rng = StdRng::seed_from_u64(7);
|
|
assert_eq!(expected, pick_tooltip(&mut rng));
|
|
}
|
|
}
|