From fea1af5a6320a3346cca3e71e4238821c8c219db Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Mon, 6 Mar 2023 19:04:52 -0500 Subject: [PATCH] Include entire prefix when reporting rule selector errors (#3375) --- crates/ruff/src/rule_selector.rs | 4 ++-- crates/ruff_cli/src/args.rs | 12 ++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/crates/ruff/src/rule_selector.rs b/crates/ruff/src/rule_selector.rs index 14f12ef495..ec806961e6 100644 --- a/crates/ruff/src/rule_selector.rs +++ b/crates/ruff/src/rule_selector.rs @@ -51,7 +51,7 @@ impl FromStr for RuleSelector { Ok(Self::Prefix { prefix: RuleCodePrefix::parse(&linter, code) - .map_err(|_| ParseError::Unknown(code.to_string()))?, + .map_err(|_| ParseError::Unknown(s.to_string()))?, redirected_from, }) } @@ -60,7 +60,7 @@ impl FromStr for RuleSelector { #[derive(Debug, thiserror::Error)] pub enum ParseError { - #[error("Unknown rule selector `{0}`")] + #[error("Unknown rule selector: `{0}`")] // TODO(martin): tell the user how to discover rule codes via the CLI once such a command is // implemented (but that should of course be done only in ruff_cli and not here) Unknown(String), diff --git a/crates/ruff_cli/src/args.rs b/crates/ruff_cli/src/args.rs index 12db791a0c..a656a98981 100644 --- a/crates/ruff_cli/src/args.rs +++ b/crates/ruff_cli/src/args.rs @@ -1,6 +1,7 @@ #![allow(dead_code)] use std::path::PathBuf; +use std::str::FromStr; use clap::{command, Parser}; use regex::Regex; @@ -112,6 +113,7 @@ pub struct CheckArgs { long, value_delimiter = ',', value_name = "RULE_CODE", + value_parser = parse_rule_selector, help_heading = "Rule selection", hide_possible_values = true )] @@ -121,6 +123,7 @@ pub struct CheckArgs { long, value_delimiter = ',', value_name = "RULE_CODE", + value_parser = parse_rule_selector, help_heading = "Rule selection", hide_possible_values = true )] @@ -131,6 +134,7 @@ pub struct CheckArgs { long, value_delimiter = ',', value_name = "RULE_CODE", + value_parser = parse_rule_selector, help_heading = "Rule selection", hide_possible_values = true )] @@ -140,6 +144,7 @@ pub struct CheckArgs { long, value_delimiter = ',', value_name = "RULE_CODE", + value_parser = parse_rule_selector, help_heading = "Rule selection", hide = true )] @@ -170,6 +175,7 @@ pub struct CheckArgs { long, value_delimiter = ',', value_name = "RULE_CODE", + value_parser = parse_rule_selector, help_heading = "Rule selection", hide_possible_values = true )] @@ -180,6 +186,7 @@ pub struct CheckArgs { long, value_delimiter = ',', value_name = "RULE_CODE", + value_parser = parse_rule_selector, help_heading = "Rule selection", hide_possible_values = true )] @@ -403,6 +410,11 @@ impl CheckArgs { } } +fn parse_rule_selector(env: &str) -> Result { + RuleSelector::from_str(env) + .map_err(|e| std::io::Error::new(std::io::ErrorKind::InvalidInput, e)) +} + fn resolve_bool_arg(yes: bool, no: bool) -> Option { match (yes, no) { (true, false) => Some(true),