From e8c955da4cbb042e6f9b89307d143f5bfa6779fa Mon Sep 17 00:00:00 2001 From: Akshay Date: Sun, 31 Oct 2021 14:35:26 +0530 Subject: add `explain` subcommand and explanations to all lints --- bin/src/config.rs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'bin/src/config.rs') diff --git a/bin/src/config.rs b/bin/src/config.rs index ef3a29d..1649017 100644 --- a/bin/src/config.rs +++ b/bin/src/config.rs @@ -26,6 +26,8 @@ pub enum SubCommand { Fix(Fix), /// Fix exactly one issue at provided position Single(Single), + /// Print detailed explanation for a lint warning + Explain(Explain), } #[derive(Clap, Debug)] @@ -88,6 +90,13 @@ pub struct Single { pub diff_only: bool, } +#[derive(Clap, Debug)] +pub struct Explain { + /// Warning code to explain + #[clap(parse(try_from_str = parse_warning_code))] + pub target: u32, +} + mod dirs { use std::{ fs, @@ -160,6 +169,21 @@ fn parse_line_col(src: &str) -> Result<(usize, usize), ConfigErr> { } } +fn parse_warning_code(src: &str) -> Result { + let mut char_stream = src.chars(); + let severity = char_stream + .next() + .ok_or(ConfigErr::InvalidWarningCode(src.to_owned()))? + .to_ascii_lowercase(); + match severity { + 'w' => char_stream + .collect::() + .parse::() + .map_err(|_| ConfigErr::InvalidWarningCode(src.to_owned())), + _ => Ok(0), + } +} + fn build_ignore_set(ignores: &[String]) -> Result { let mut set = GlobSetBuilder::new(); for pattern in ignores { -- cgit v1.2.3