Compare commits

...

4 commits

Author SHA1 Message Date
mo8it 47976caa69 Import Ordering 2024-08-22 14:42:17 +02:00
mo8it f1abd8577c Add missing Clippy allows to solutions 2024-08-22 14:41:25 +02:00
mo8it 423b50b068 Use match instead of comparison chain 2024-08-22 14:37:47 +02:00
mo8it bedf0789f2 Always use strict Clippy when checking solutions 2024-08-22 14:25:14 +02:00
5 changed files with 13 additions and 17 deletions

View file

@ -1,5 +1,3 @@
#![allow(clippy::comparison_chain)]
#[derive(PartialEq, Debug)] #[derive(PartialEq, Debug)]
enum CreationError { enum CreationError {
Negative, Negative,

View file

@ -18,12 +18,11 @@ fn main() {
// Here, both answers work. // Here, both answers work.
// `.into()` converts a type into an expected type. // `.into()` converts a type into an expected type.
// If it is called where `String` is expected, it will convert `&str` to `String`. // If it is called where `String` is expected, it will convert `&str` to `String`.
// But if is called where `&str` is expected, then `&str` is kept `&str` since no
// conversion is needed.
string("nice weather".into()); string("nice weather".into());
// But if it is called where `&str` is expected, then `&str` is kept `&str` since no conversion is needed.
// If you remove the `#[allow(…)]` line, then Clippy will tell you to remove `.into()` below since it is a useless conversion.
#[allow(clippy::useless_conversion)]
string_slice("nice weather".into()); string_slice("nice weather".into());
// ^^^^^^^ the compiler recommends removing the `.into()`
// call because it is a useless conversion.
string(format!("Interpolation {}", "Station")); string(format!("Interpolation {}", "Station"));

View file

@ -1,4 +1,4 @@
#![allow(clippy::comparison_chain)] use std::cmp::Ordering;
#[derive(PartialEq, Debug)] #[derive(PartialEq, Debug)]
enum CreationError { enum CreationError {
@ -11,12 +11,10 @@ struct PositiveNonzeroInteger(u64);
impl PositiveNonzeroInteger { impl PositiveNonzeroInteger {
fn new(value: i64) -> Result<Self, CreationError> { fn new(value: i64) -> Result<Self, CreationError> {
if value == 0 { match value.cmp(&0) {
Err(CreationError::Zero) Ordering::Less => Err(CreationError::Negative),
} else if value < 0 { Ordering::Equal => Err(CreationError::Zero),
Err(CreationError::Negative) Ordering::Greater => Ok(Self(value as u64)),
} else {
Ok(Self(value as u64))
} }
} }
} }

View file

@ -25,6 +25,7 @@ fn factorial_fold(num: u64) -> u64 {
// -> 1 * 2 is calculated, then the result 2 is multiplied by // -> 1 * 2 is calculated, then the result 2 is multiplied by
// the second element 3 so the result 6 is returned. // the second element 3 so the result 6 is returned.
// And so on… // And so on…
#[allow(clippy::unnecessary_fold)]
(2..=num).fold(1, |acc, x| acc * x) (2..=num).fold(1, |acc, x| acc * x)
} }

View file

@ -72,7 +72,7 @@ pub trait RunnableExercise {
// Compile, check and run the exercise or its solution (depending on `bin_name´). // Compile, check and run the exercise or its solution (depending on `bin_name´).
// The output is written to the `output` buffer after clearing it. // The output is written to the `output` buffer after clearing it.
fn run( fn run<const FORCE_STRICT_CLIPPY: bool>(
&self, &self,
bin_name: &str, bin_name: &str,
mut output: Option<&mut Vec<u8>>, mut output: Option<&mut Vec<u8>>,
@ -115,7 +115,7 @@ pub trait RunnableExercise {
let mut clippy_cmd = cmd_runner.cargo("clippy", bin_name, output.as_deref_mut()); let mut clippy_cmd = cmd_runner.cargo("clippy", bin_name, output.as_deref_mut());
// `--profile test` is required to also check code with `[cfg(test)]`. // `--profile test` is required to also check code with `[cfg(test)]`.
if self.strict_clippy() { if FORCE_STRICT_CLIPPY || self.strict_clippy() {
clippy_cmd.args(["--profile", "test", "--", "-D", "warnings"]); clippy_cmd.args(["--profile", "test", "--", "-D", "warnings"]);
} else { } else {
clippy_cmd.args(["--profile", "test"]); clippy_cmd.args(["--profile", "test"]);
@ -131,7 +131,7 @@ pub trait RunnableExercise {
/// The output is written to the `output` buffer after clearing it. /// The output is written to the `output` buffer after clearing it.
#[inline] #[inline]
fn run_exercise(&self, output: Option<&mut Vec<u8>>, cmd_runner: &CmdRunner) -> Result<bool> { fn run_exercise(&self, output: Option<&mut Vec<u8>>, cmd_runner: &CmdRunner) -> Result<bool> {
self.run(self.name(), output, cmd_runner) self.run::<false>(self.name(), output, cmd_runner)
} }
/// Compile, check and run the exercise's solution. /// Compile, check and run the exercise's solution.
@ -142,7 +142,7 @@ pub trait RunnableExercise {
bin_name.push_str(name); bin_name.push_str(name);
bin_name.push_str("_sol"); bin_name.push_str("_sol");
self.run(&bin_name, output, cmd_runner) self.run::<true>(&bin_name, output, cmd_runner)
} }
} }