Only allow single chars for whitespace map (#38825)
Release Notes: - Only allow single characters in the whitespace map
This commit is contained in:
@@ -9324,7 +9324,7 @@ impl Element for EditorElement {
|
||||
.language_settings(cx)
|
||||
.whitespace_map;
|
||||
|
||||
let tab_char = whitespace_map.tab();
|
||||
let tab_char = whitespace_map.tab.clone();
|
||||
let tab_len = tab_char.len();
|
||||
let tab_invisible = window.text_system().shape_line(
|
||||
tab_char,
|
||||
@@ -9340,7 +9340,7 @@ impl Element for EditorElement {
|
||||
None,
|
||||
);
|
||||
|
||||
let space_char = whitespace_map.space();
|
||||
let space_char = whitespace_map.space.clone();
|
||||
let space_len = space_char.len();
|
||||
let space_invisible = window.text_system().shape_line(
|
||||
space_char,
|
||||
|
||||
@@ -7,7 +7,7 @@ use ec4rs::{
|
||||
property::{FinalNewline, IndentSize, IndentStyle, MaxLineLen, TabWidth, TrimTrailingWs},
|
||||
};
|
||||
use globset::{Glob, GlobMatcher, GlobSet, GlobSetBuilder};
|
||||
use gpui::{App, Modifiers};
|
||||
use gpui::{App, Modifiers, SharedString};
|
||||
use itertools::{Either, Itertools};
|
||||
|
||||
pub use settings::{
|
||||
@@ -59,6 +59,12 @@ pub struct AllLanguageSettings {
|
||||
pub(crate) file_types: FxHashMap<Arc<str>, GlobSet>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct WhitespaceMap {
|
||||
pub space: SharedString,
|
||||
pub tab: SharedString,
|
||||
}
|
||||
|
||||
/// The settings for a particular language.
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct LanguageSettings {
|
||||
@@ -118,7 +124,7 @@ pub struct LanguageSettings {
|
||||
/// Whether to show tabs and spaces in the editor.
|
||||
pub show_whitespaces: settings::ShowWhitespaceSetting,
|
||||
/// Visible characters used to render whitespace when show_whitespaces is enabled.
|
||||
pub whitespace_map: settings::WhitespaceMap,
|
||||
pub whitespace_map: WhitespaceMap,
|
||||
/// Whether to start a new line with a comment when a previous line is a comment as well.
|
||||
pub extend_comment_on_newline: bool,
|
||||
/// Inlay hint related settings.
|
||||
@@ -503,6 +509,8 @@ impl settings::Settings for AllLanguageSettings {
|
||||
let prettier = settings.prettier.unwrap();
|
||||
let indent_guides = settings.indent_guides.unwrap();
|
||||
let tasks = settings.tasks.unwrap();
|
||||
let whitespace_map = settings.whitespace_map.unwrap();
|
||||
|
||||
LanguageSettings {
|
||||
tab_size: settings.tab_size.unwrap(),
|
||||
hard_tabs: settings.hard_tabs.unwrap(),
|
||||
@@ -536,7 +544,10 @@ impl settings::Settings for AllLanguageSettings {
|
||||
show_edit_predictions: settings.show_edit_predictions.unwrap(),
|
||||
edit_predictions_disabled_in: settings.edit_predictions_disabled_in.unwrap(),
|
||||
show_whitespaces: settings.show_whitespaces.unwrap(),
|
||||
whitespace_map: settings.whitespace_map.unwrap(),
|
||||
whitespace_map: WhitespaceMap {
|
||||
space: SharedString::new(whitespace_map.space.to_string()),
|
||||
tab: SharedString::new(whitespace_map.tab.to_string()),
|
||||
},
|
||||
extend_comment_on_newline: settings.extend_comment_on_newline.unwrap(),
|
||||
inlay_hints: InlayHintSettings {
|
||||
enabled: inlay_hints.enabled.unwrap(),
|
||||
|
||||
@@ -49,6 +49,7 @@ merge_from_overwrites!(
|
||||
bool,
|
||||
f64,
|
||||
f32,
|
||||
char,
|
||||
std::num::NonZeroUsize,
|
||||
std::num::NonZeroU32,
|
||||
String,
|
||||
|
||||
@@ -261,7 +261,7 @@ pub struct LanguageSettingsContent {
|
||||
/// Visible characters used to render whitespace when show_whitespaces is enabled.
|
||||
///
|
||||
/// Default: "•" for spaces, "→" for tabs.
|
||||
pub whitespace_map: Option<WhitespaceMap>,
|
||||
pub whitespace_map: Option<WhitespaceMapContent>,
|
||||
/// Whether to start a new line with a comment when a previous line is a comment as well.
|
||||
///
|
||||
/// Default: true
|
||||
@@ -354,23 +354,9 @@ pub enum ShowWhitespaceSetting {
|
||||
|
||||
#[skip_serializing_none]
|
||||
#[derive(Clone, Debug, Default, Serialize, Deserialize, JsonSchema, MergeFrom, PartialEq)]
|
||||
pub struct WhitespaceMap {
|
||||
pub space: Option<String>,
|
||||
pub tab: Option<String>,
|
||||
}
|
||||
|
||||
impl WhitespaceMap {
|
||||
pub fn space(&self) -> SharedString {
|
||||
self.space
|
||||
.as_ref()
|
||||
.map_or_else(|| SharedString::from("•"), |s| SharedString::from(s))
|
||||
}
|
||||
|
||||
pub fn tab(&self) -> SharedString {
|
||||
self.tab
|
||||
.as_ref()
|
||||
.map_or_else(|| SharedString::from("→"), |s| SharedString::from(s))
|
||||
}
|
||||
pub struct WhitespaceMapContent {
|
||||
pub space: char,
|
||||
pub tab: char,
|
||||
}
|
||||
|
||||
/// The behavior of `editor::Rewrap`.
|
||||
|
||||
Reference in New Issue
Block a user