Fix prevent zero value for buffer line height (#30832)
Closes #30802 Release Notes: - Fixed issue where setting `buffer_line_height.custom` to 0 would cause text to disappear --------- Co-authored-by: Michael Sloan <michael@zed.dev>
This commit is contained in:
parent
592568ff87
commit
a829281841
1 changed files with 67 additions and 4 deletions
|
@ -553,10 +553,22 @@ pub enum BufferLineHeight {
|
||||||
Comfortable,
|
Comfortable,
|
||||||
/// The default line height.
|
/// The default line height.
|
||||||
Standard,
|
Standard,
|
||||||
/// A custom line height.
|
/// A custom line height, where 1.0 is the font's height. Must be at least 1.0.
|
||||||
///
|
Custom(#[serde(deserialize_with = "deserialize_line_height")] f32),
|
||||||
/// A line height of 1.0 is the height of the buffer's font size.
|
}
|
||||||
Custom(f32),
|
|
||||||
|
fn deserialize_line_height<'de, D>(deserializer: D) -> Result<f32, D::Error>
|
||||||
|
where
|
||||||
|
D: serde::Deserializer<'de>,
|
||||||
|
{
|
||||||
|
let value = f32::deserialize(deserializer)?;
|
||||||
|
if value < 1.0 {
|
||||||
|
return Err(serde::de::Error::custom(
|
||||||
|
"buffer_line_height.custom must be at least 1.0",
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(value)
|
||||||
}
|
}
|
||||||
|
|
||||||
impl BufferLineHeight {
|
impl BufferLineHeight {
|
||||||
|
@ -1010,3 +1022,54 @@ fn merge<T: Copy>(target: &mut T, value: Option<T>) {
|
||||||
*target = value;
|
*target = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
use serde_json::json;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_buffer_line_height_deserialize_valid() {
|
||||||
|
assert_eq!(
|
||||||
|
serde_json::from_value::<BufferLineHeight>(json!("comfortable")).unwrap(),
|
||||||
|
BufferLineHeight::Comfortable
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
serde_json::from_value::<BufferLineHeight>(json!("standard")).unwrap(),
|
||||||
|
BufferLineHeight::Standard
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
serde_json::from_value::<BufferLineHeight>(json!({"custom": 1.0})).unwrap(),
|
||||||
|
BufferLineHeight::Custom(1.0)
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
serde_json::from_value::<BufferLineHeight>(json!({"custom": 1.5})).unwrap(),
|
||||||
|
BufferLineHeight::Custom(1.5)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_buffer_line_height_deserialize_invalid() {
|
||||||
|
assert!(
|
||||||
|
serde_json::from_value::<BufferLineHeight>(json!({"custom": 0.99}))
|
||||||
|
.err()
|
||||||
|
.unwrap()
|
||||||
|
.to_string()
|
||||||
|
.contains("buffer_line_height.custom must be at least 1.0")
|
||||||
|
);
|
||||||
|
assert!(
|
||||||
|
serde_json::from_value::<BufferLineHeight>(json!({"custom": 0.0}))
|
||||||
|
.err()
|
||||||
|
.unwrap()
|
||||||
|
.to_string()
|
||||||
|
.contains("buffer_line_height.custom must be at least 1.0")
|
||||||
|
);
|
||||||
|
assert!(
|
||||||
|
serde_json::from_value::<BufferLineHeight>(json!({"custom": -1.0}))
|
||||||
|
.err()
|
||||||
|
.unwrap()
|
||||||
|
.to_string()
|
||||||
|
.contains("buffer_line_height.custom must be at least 1.0")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue