refactor: Reduce code duplication

This commit is contained in:
Martin Fischer 2023-02-10 09:32:31 +01:00 committed by Charlie Marsh
parent 9011456aa1
commit 6f16f1c39b
2 changed files with 43 additions and 69 deletions

View file

@ -498,32 +498,22 @@ fn num_digits(n: usize) -> usize {
/// Print a single `Message` with full details. /// Print a single `Message` with full details.
fn print_message<T: Write>(stdout: &mut T, message: &Message) -> Result<()> { fn print_message<T: Write>(stdout: &mut T, message: &Message) -> Result<()> {
let label = if message.kind.fixable() { let label = format!(
format!( "{}{}{}{}{}{} {} {}{}",
"{}{}{}{}{}{} {} [{}] {}", relativize_path(Path::new(&message.filename)).bold(),
relativize_path(Path::new(&message.filename)).bold(), ":".cyan(),
":".cyan(), message.location.row(),
message.location.row(), ":".cyan(),
":".cyan(), message.location.column(),
message.location.column(), ":".cyan(),
":".cyan(), message.kind.rule().code().red().bold(),
message.kind.rule().code().red().bold(), message
"*".cyan(), .kind
message.kind.body(), .fixable()
) .then_some(format_args!("[{}] ", "*".cyan()))
} else { .unwrap_or(format_args!("")),
format!( message.kind.body(),
"{}{}{}{}{}{} {} {}", );
relativize_path(Path::new(&message.filename)).bold(),
":".cyan(),
message.location.row(),
":".cyan(),
message.location.column(),
":".cyan(),
message.kind.rule().code().red().bold(),
message.kind.body(),
)
};
writeln!(stdout, "{label}")?; writeln!(stdout, "{label}")?;
if let Some(source) = &message.source { if let Some(source) = &message.source {
let commit = message.kind.commit(); let commit = message.kind.commit();
@ -578,30 +568,21 @@ fn print_grouped_message<T: Write>(
row_length: usize, row_length: usize,
column_length: usize, column_length: usize,
) -> Result<()> { ) -> Result<()> {
let label = if message.kind.fixable() { let label = format!(
format!( " {}{}{}{}{} {} {}{}",
" {}{}{}{}{} {} [{}] {}", " ".repeat(row_length - num_digits(message.location.row())),
" ".repeat(row_length - num_digits(message.location.row())), message.location.row(),
message.location.row(), ":".cyan(),
":".cyan(), message.location.column(),
message.location.column(), " ".repeat(column_length - num_digits(message.location.column())),
" ".repeat(column_length - num_digits(message.location.column())), message.kind.rule().code().red().bold(),
message.kind.rule().code().red().bold(), message
"*".cyan(), .kind
message.kind.body(), .fixable()
) .then_some(format_args!("[{}] ", "*".cyan()))
} else { .unwrap_or(format_args!("")),
format!( message.kind.body(),
" {}{}{}{}{} {} {}", );
" ".repeat(row_length - num_digits(message.location.row())),
message.location.row(),
":".cyan(),
message.location.column(),
" ".repeat(column_length - num_digits(message.location.column())),
message.kind.rule().code().red().bold(),
message.kind.body(),
)
};
writeln!(stdout, "{label}")?; writeln!(stdout, "{label}")?;
if let Some(source) = &message.source { if let Some(source) = &message.source {
let commit = message.kind.commit(); let commit = message.kind.commit();

View file

@ -34,25 +34,18 @@ fn generate_table(table_out: &mut String, rules: impl IntoIterator<Item = Rule>)
Some(_) => "🛠", Some(_) => "🛠",
}; };
if rule.explanation().is_some() { let rule_name = rule.as_ref();
table_out.push_str(&format!(
"| {} | [{}]({}/{}.md) | {} | {} |", table_out.push_str(&format!(
rule.code(), "| {} | {} | {} | {} |",
rule.as_ref(), rule.code(),
URL_PREFIX, rule.explanation()
rule.as_ref(), .is_some()
rule.message_formats()[0].replace('|', r"\|"), .then_some(format_args!("[{rule_name}]({URL_PREFIX}/{rule_name}.md)",))
fix_token .unwrap_or(format_args!("{rule_name}")),
)); rule.message_formats()[0].replace('|', r"\|"),
} else { fix_token
table_out.push_str(&format!( ));
"| {} | {} | {} | {} |",
rule.code(),
rule.as_ref(),
rule.message_formats()[0].replace('|', r"\|"),
fix_token
));
}
table_out.push('\n'); table_out.push('\n');
} }
table_out.push('\n'); table_out.push('\n');