mirror of
https://github.com/rust-lang/rustlings.git
synced 2024-12-26 00:00:03 +03:00
Use a Vec for the name col padding
This commit is contained in:
parent
c209c874a9
commit
7d2bc1c7a4
|
@ -14,9 +14,11 @@ use crate::{
|
||||||
collections::{hash_set_with_capacity, HashSet},
|
collections::{hash_set_with_capacity, HashSet},
|
||||||
exercise::{RunnableExercise, OUTPUT_CAPACITY},
|
exercise::{RunnableExercise, OUTPUT_CAPACITY},
|
||||||
info_file::{ExerciseInfo, InfoFile},
|
info_file::{ExerciseInfo, InfoFile},
|
||||||
CURRENT_FORMAT_VERSION, MAX_EXERCISE_NAME_LEN,
|
CURRENT_FORMAT_VERSION,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const MAX_EXERCISE_NAME_LEN: usize = 32;
|
||||||
|
|
||||||
// Find a char that isn't allowed in the exercise's `name` or `dir`.
|
// Find a char that isn't allowed in the exercise's `name` or `dir`.
|
||||||
fn forbidden_char(input: &str) -> Option<char> {
|
fn forbidden_char(input: &str) -> Option<char> {
|
||||||
input.chars().find(|c| !c.is_alphanumeric() && *c != '_')
|
input.chars().find(|c| !c.is_alphanumeric() && *c != '_')
|
||||||
|
|
|
@ -14,13 +14,11 @@ use crate::{
|
||||||
app_state::AppState,
|
app_state::AppState,
|
||||||
exercise::Exercise,
|
exercise::Exercise,
|
||||||
term::{progress_bar, terminal_file_link, CountedWrite, MaxLenWriter},
|
term::{progress_bar, terminal_file_link, CountedWrite, MaxLenWriter},
|
||||||
MAX_EXERCISE_NAME_LEN,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
use super::scroll_state::ScrollState;
|
use super::scroll_state::ScrollState;
|
||||||
|
|
||||||
// +1 for column padding.
|
const COL_SPACING: usize = 2;
|
||||||
const SPACE: &[u8] = &[b' '; MAX_EXERCISE_NAME_LEN + 1];
|
|
||||||
|
|
||||||
fn next_ln(stdout: &mut StdoutLock) -> io::Result<()> {
|
fn next_ln(stdout: &mut StdoutLock) -> io::Result<()> {
|
||||||
stdout
|
stdout
|
||||||
|
@ -41,7 +39,7 @@ pub struct ListState<'a> {
|
||||||
pub message: String,
|
pub message: String,
|
||||||
app_state: &'a mut AppState,
|
app_state: &'a mut AppState,
|
||||||
scroll_state: ScrollState,
|
scroll_state: ScrollState,
|
||||||
name_col_width: usize,
|
name_col_padding: Vec<u8>,
|
||||||
filter: Filter,
|
filter: Filter,
|
||||||
term_width: u16,
|
term_width: u16,
|
||||||
term_height: u16,
|
term_height: u16,
|
||||||
|
@ -61,6 +59,7 @@ impl<'a> ListState<'a> {
|
||||||
.map(|exercise| exercise.name.len())
|
.map(|exercise| exercise.name.len())
|
||||||
.max()
|
.max()
|
||||||
.map_or(name_col_title_len, |max| max.max(name_col_title_len));
|
.map_or(name_col_title_len, |max| max.max(name_col_title_len));
|
||||||
|
let name_col_padding = vec![b' '; name_col_width + COL_SPACING];
|
||||||
|
|
||||||
let filter = Filter::None;
|
let filter = Filter::None;
|
||||||
let n_rows_with_filter = app_state.exercises().len();
|
let n_rows_with_filter = app_state.exercises().len();
|
||||||
|
@ -73,7 +72,7 @@ impl<'a> ListState<'a> {
|
||||||
message: String::with_capacity(128),
|
message: String::with_capacity(128),
|
||||||
app_state,
|
app_state,
|
||||||
scroll_state,
|
scroll_state,
|
||||||
name_col_width,
|
name_col_padding,
|
||||||
filter,
|
filter,
|
||||||
// Set by `set_term_size`
|
// Set by `set_term_size`
|
||||||
term_width: 0,
|
term_width: 0,
|
||||||
|
@ -162,7 +161,7 @@ impl<'a> ListState<'a> {
|
||||||
writer.stdout.queue(SetForegroundColor(Color::Reset))?;
|
writer.stdout.queue(SetForegroundColor(Color::Reset))?;
|
||||||
|
|
||||||
writer.write_str(exercise.name)?;
|
writer.write_str(exercise.name)?;
|
||||||
writer.write_ascii(&SPACE[..self.name_col_width + 2 - exercise.name.len()])?;
|
writer.write_ascii(&self.name_col_padding[exercise.name.len()..])?;
|
||||||
|
|
||||||
terminal_file_link(&mut writer, exercise.path, Color::Blue)?;
|
terminal_file_link(&mut writer, exercise.path, Color::Blue)?;
|
||||||
|
|
||||||
|
@ -184,7 +183,7 @@ impl<'a> ListState<'a> {
|
||||||
// Header
|
// Header
|
||||||
let mut writer = MaxLenWriter::new(stdout, self.term_width as usize);
|
let mut writer = MaxLenWriter::new(stdout, self.term_width as usize);
|
||||||
writer.write_ascii(b" Current State Name")?;
|
writer.write_ascii(b" Current State Name")?;
|
||||||
writer.write_ascii(&SPACE[..self.name_col_width - 2])?;
|
writer.write_ascii(&self.name_col_padding[2..])?;
|
||||||
writer.write_ascii(b"Path")?;
|
writer.write_ascii(b"Path")?;
|
||||||
next_ln(stdout)?;
|
next_ln(stdout)?;
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,6 @@ mod term;
|
||||||
mod watch;
|
mod watch;
|
||||||
|
|
||||||
const CURRENT_FORMAT_VERSION: u8 = 1;
|
const CURRENT_FORMAT_VERSION: u8 = 1;
|
||||||
const MAX_EXERCISE_NAME_LEN: usize = 32;
|
|
||||||
|
|
||||||
/// Rustlings is a collection of small exercises to get you used to writing and reading Rust code
|
/// Rustlings is a collection of small exercises to get you used to writing and reading Rust code
|
||||||
#[derive(Parser)]
|
#[derive(Parser)]
|
||||||
|
|
Loading…
Reference in a new issue