Skip to content

Commit 225423c

Browse files
Allow specifying multiple values for line_length_guide in config
Signed-off-by: Christoph Heiss <[email protected]>
1 parent f6fe62f commit 225423c

File tree

3 files changed

+31
-16
lines changed

3 files changed

+31
-16
lines changed

src/commands/selection.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,9 @@ pub fn justify(app: &mut Application) -> Result {
8686
let range = sel_to_range(app)?;
8787
let buffer = app.workspace.current_buffer.as_mut().unwrap();
8888

89-
let limit = match app.preferences.borrow().line_length_guide() {
90-
Some(n) => n,
91-
None => bail!("Justification requires a line_length_guide."),
89+
let limit = match app.preferences.borrow().line_length_guides()[..] {
90+
[first, ..] => first,
91+
[] => bail!("Justification requires a line_length_guide."),
9292
};
9393

9494
buffer.start_operation_group();

src/models/application/preferences/mod.rs

+22-9
Original file line numberDiff line numberDiff line change
@@ -207,24 +207,29 @@ impl Preferences {
207207
})
208208
}
209209

210-
pub fn line_length_guide(&self) -> Option<usize> {
210+
pub fn line_length_guides(&self) -> Vec<usize> {
211211
self.data
212212
.as_ref()
213-
.and_then(|data| match data[LINE_LENGTH_GUIDE_KEY] {
214-
Yaml::Integer(line_length) => Some(line_length as usize),
213+
.map(|data| match data[LINE_LENGTH_GUIDE_KEY] {
214+
Yaml::Integer(line_length) => vec![line_length as usize],
215215
Yaml::Boolean(line_length_guide) => {
216216
let default = self.default[LINE_LENGTH_GUIDE_KEY]
217217
.as_i64()
218218
.expect("Couldn't find default line length guide setting!");
219219

220220
if line_length_guide {
221-
Some(default as usize)
221+
vec![default as usize]
222222
} else {
223-
None
223+
vec![]
224224
}
225225
}
226-
_ => None,
226+
Yaml::Array(ref guides) => guides
227+
.into_iter()
228+
.filter_map(|value| value.as_i64().map(|v| v as usize))
229+
.collect(),
230+
_ => vec![],
227231
})
232+
.unwrap_or_default()
228233
}
229234

230235
pub fn line_wrapping(&self) -> bool {
@@ -584,23 +589,31 @@ mod tests {
584589
let data = YamlLoader::load_from_str("line_length_guide: 100").unwrap();
585590
let preferences = Preferences::new(data.into_iter().nth(0));
586591

587-
assert_eq!(preferences.line_length_guide(), Some(100));
592+
assert_eq!(preferences.line_length_guides(), vec![100]);
593+
}
594+
595+
#[test]
596+
fn preferences_returns_user_defined_multiple_line_length_guides() {
597+
let data = YamlLoader::load_from_str("line_length_guide: [80, 100, 120]").unwrap();
598+
let preferences = Preferences::new(data.into_iter().nth(0));
599+
600+
assert_eq!(preferences.line_length_guides(), vec![80, 100, 120]);
588601
}
589602

590603
#[test]
591604
fn preferences_returns_user_disabled_line_length_guide() {
592605
let data = YamlLoader::load_from_str("line_length_guide: false").unwrap();
593606
let preferences = Preferences::new(data.into_iter().nth(0));
594607

595-
assert_eq!(preferences.line_length_guide(), None);
608+
assert_eq!(preferences.line_length_guides(), Vec::<usize>::new());
596609
}
597610

598611
#[test]
599612
fn preferences_returns_user_default_line_length_guide() {
600613
let data = YamlLoader::load_from_str("line_length_guide: true").unwrap();
601614
let preferences = Preferences::new(data.into_iter().nth(0));
602615

603-
assert_eq!(preferences.line_length_guide(), Some(80));
616+
assert_eq!(preferences.line_length_guides(), vec![80]);
604617
}
605618

606619
#[test]

src/view/buffer/renderer.rs

+6-4
Original file line numberDiff line numberDiff line change
@@ -85,10 +85,10 @@ impl<'a, 'p> BufferRenderer<'a, 'p> {
8585

8686
fn print_rest_of_line(&mut self) {
8787
let on_cursor_line = self.on_cursor_line();
88-
let guide_offset = self.length_guide_offset();
88+
let guide_offsets = self.length_guide_offsets();
8989

9090
for offset in self.screen_position.offset..self.terminal.width() {
91-
let colors = if on_cursor_line || guide_offset.map(|go| go == offset).unwrap_or(false) {
91+
let colors = if on_cursor_line || guide_offsets.contains(&offset) {
9292
Colors::Focused
9393
} else {
9494
Colors::Default
@@ -106,10 +106,12 @@ impl<'a, 'p> BufferRenderer<'a, 'p> {
106106
}
107107
}
108108

109-
fn length_guide_offset(&self) -> Option<usize> {
109+
fn length_guide_offsets(&self) -> Vec<usize> {
110110
self.preferences
111-
.line_length_guide()
111+
.line_length_guides()
112+
.into_iter()
112113
.map(|offset| self.gutter_width + offset)
114+
.collect()
113115
}
114116

115117
fn advance_to_next_line(&mut self) {

0 commit comments

Comments
 (0)