mirror of https://github.com/astral-sh/ruff
Implement E722
This commit is contained in:
parent
4e0807e908
commit
739c3aa4fa
|
|
@ -9,6 +9,7 @@ fn main() {
|
||||||
CheckKind::AssertTuple,
|
CheckKind::AssertTuple,
|
||||||
CheckKind::DefaultExceptNotLast,
|
CheckKind::DefaultExceptNotLast,
|
||||||
CheckKind::DoNotAssignLambda,
|
CheckKind::DoNotAssignLambda,
|
||||||
|
CheckKind::DoNotUseBareExcept,
|
||||||
CheckKind::DuplicateArgumentName,
|
CheckKind::DuplicateArgumentName,
|
||||||
CheckKind::FStringMissingPlaceholders,
|
CheckKind::FStringMissingPlaceholders,
|
||||||
CheckKind::FutureFeatureNotDefined("...".to_string()),
|
CheckKind::FutureFeatureNotDefined("...".to_string()),
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
try:
|
||||||
|
pass
|
||||||
|
except ValueError:
|
||||||
|
pass
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
@ -813,7 +813,14 @@ where
|
||||||
|
|
||||||
fn visit_excepthandler(&mut self, excepthandler: &'b Excepthandler) {
|
fn visit_excepthandler(&mut self, excepthandler: &'b Excepthandler) {
|
||||||
match &excepthandler.node {
|
match &excepthandler.node {
|
||||||
ExcepthandlerKind::ExceptHandler { name, .. } => match name {
|
ExcepthandlerKind::ExceptHandler { type_, name, .. } => {
|
||||||
|
if self.settings.select.contains(&CheckCode::E722) && type_.is_none() {
|
||||||
|
self.checks.push(Check::new(
|
||||||
|
CheckKind::DoNotUseBareExcept,
|
||||||
|
excepthandler.location,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
match name {
|
||||||
Some(name) => {
|
Some(name) => {
|
||||||
if self.settings.select.contains(&CheckCode::E741) {
|
if self.settings.select.contains(&CheckCode::E741) {
|
||||||
if let Some(check) =
|
if let Some(check) =
|
||||||
|
|
@ -822,11 +829,11 @@ where
|
||||||
self.checks.push(check);
|
self.checks.push(check);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let scope =
|
let scope = &self.scopes
|
||||||
&self.scopes[*(self.scope_stack.last().expect("No current scope found."))];
|
[*(self.scope_stack.last().expect("No current scope found."))];
|
||||||
if scope.values.contains_key(name) {
|
if scope.values.contains_key(name) {
|
||||||
let parent =
|
let parent = self.parents
|
||||||
self.parents[*(self.parent_stack.last().expect("No parent found."))];
|
[*(self.parent_stack.last().expect("No parent found."))];
|
||||||
self.handle_node_store(
|
self.handle_node_store(
|
||||||
&Expr::new(
|
&Expr::new(
|
||||||
excepthandler.location,
|
excepthandler.location,
|
||||||
|
|
@ -842,8 +849,8 @@ where
|
||||||
|
|
||||||
let parent =
|
let parent =
|
||||||
self.parents[*(self.parent_stack.last().expect("No parent found."))];
|
self.parents[*(self.parent_stack.last().expect("No parent found."))];
|
||||||
let scope =
|
let scope = &self.scopes
|
||||||
&self.scopes[*(self.scope_stack.last().expect("No current scope found."))];
|
[*(self.scope_stack.last().expect("No current scope found."))];
|
||||||
let definition = scope.values.get(name).cloned();
|
let definition = scope.values.get(name).cloned();
|
||||||
self.handle_node_store(
|
self.handle_node_store(
|
||||||
&Expr::new(
|
&Expr::new(
|
||||||
|
|
@ -862,7 +869,8 @@ where
|
||||||
let scope = &mut self.scopes
|
let scope = &mut self.scopes
|
||||||
[*(self.scope_stack.last().expect("No current scope found."))];
|
[*(self.scope_stack.last().expect("No current scope found."))];
|
||||||
if let Some(binding) = &scope.values.remove(name) {
|
if let Some(binding) = &scope.values.remove(name) {
|
||||||
if self.settings.select.contains(&CheckCode::F841) && binding.used.is_none()
|
if self.settings.select.contains(&CheckCode::F841)
|
||||||
|
&& binding.used.is_none()
|
||||||
{
|
{
|
||||||
self.checks.push(Check::new(
|
self.checks.push(Check::new(
|
||||||
CheckKind::UnusedVariable(name.to_string()),
|
CheckKind::UnusedVariable(name.to_string()),
|
||||||
|
|
@ -876,7 +884,8 @@ where
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
None => walk_excepthandler(self, excepthandler),
|
None => walk_excepthandler(self, excepthandler),
|
||||||
},
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ pub enum CheckCode {
|
||||||
E712,
|
E712,
|
||||||
E713,
|
E713,
|
||||||
E714,
|
E714,
|
||||||
|
E722,
|
||||||
E731,
|
E731,
|
||||||
E741,
|
E741,
|
||||||
E742,
|
E742,
|
||||||
|
|
@ -53,6 +54,7 @@ impl FromStr for CheckCode {
|
||||||
"E711" => Ok(CheckCode::E711),
|
"E711" => Ok(CheckCode::E711),
|
||||||
"E712" => Ok(CheckCode::E712),
|
"E712" => Ok(CheckCode::E712),
|
||||||
"E713" => Ok(CheckCode::E713),
|
"E713" => Ok(CheckCode::E713),
|
||||||
|
"E722" => Ok(CheckCode::E722),
|
||||||
"E714" => Ok(CheckCode::E714),
|
"E714" => Ok(CheckCode::E714),
|
||||||
"E731" => Ok(CheckCode::E731),
|
"E731" => Ok(CheckCode::E731),
|
||||||
"E741" => Ok(CheckCode::E741),
|
"E741" => Ok(CheckCode::E741),
|
||||||
|
|
@ -95,6 +97,7 @@ impl CheckCode {
|
||||||
CheckCode::E712 => "E712",
|
CheckCode::E712 => "E712",
|
||||||
CheckCode::E713 => "E713",
|
CheckCode::E713 => "E713",
|
||||||
CheckCode::E714 => "E714",
|
CheckCode::E714 => "E714",
|
||||||
|
CheckCode::E722 => "E722",
|
||||||
CheckCode::E731 => "E731",
|
CheckCode::E731 => "E731",
|
||||||
CheckCode::E741 => "E741",
|
CheckCode::E741 => "E741",
|
||||||
CheckCode::E742 => "E742",
|
CheckCode::E742 => "E742",
|
||||||
|
|
@ -134,6 +137,7 @@ impl CheckCode {
|
||||||
CheckCode::E712 => &LintSource::AST,
|
CheckCode::E712 => &LintSource::AST,
|
||||||
CheckCode::E713 => &LintSource::AST,
|
CheckCode::E713 => &LintSource::AST,
|
||||||
CheckCode::E714 => &LintSource::AST,
|
CheckCode::E714 => &LintSource::AST,
|
||||||
|
CheckCode::E722 => &LintSource::AST,
|
||||||
CheckCode::E731 => &LintSource::AST,
|
CheckCode::E731 => &LintSource::AST,
|
||||||
CheckCode::E741 => &LintSource::AST,
|
CheckCode::E741 => &LintSource::AST,
|
||||||
CheckCode::E742 => &LintSource::AST,
|
CheckCode::E742 => &LintSource::AST,
|
||||||
|
|
@ -186,6 +190,7 @@ pub enum CheckKind {
|
||||||
AmbiguousFunctionName(String),
|
AmbiguousFunctionName(String),
|
||||||
DefaultExceptNotLast,
|
DefaultExceptNotLast,
|
||||||
DoNotAssignLambda,
|
DoNotAssignLambda,
|
||||||
|
DoNotUseBareExcept,
|
||||||
DuplicateArgumentName,
|
DuplicateArgumentName,
|
||||||
FStringMissingPlaceholders,
|
FStringMissingPlaceholders,
|
||||||
FutureFeatureNotDefined(String),
|
FutureFeatureNotDefined(String),
|
||||||
|
|
@ -224,6 +229,7 @@ impl CheckKind {
|
||||||
CheckKind::AmbiguousClassName(_) => "AmbiguousClassName",
|
CheckKind::AmbiguousClassName(_) => "AmbiguousClassName",
|
||||||
CheckKind::AmbiguousFunctionName(_) => "AmbiguousFunctionName",
|
CheckKind::AmbiguousFunctionName(_) => "AmbiguousFunctionName",
|
||||||
CheckKind::DefaultExceptNotLast => "DefaultExceptNotLast",
|
CheckKind::DefaultExceptNotLast => "DefaultExceptNotLast",
|
||||||
|
CheckKind::DoNotUseBareExcept => "DoNotUseBareExcept",
|
||||||
CheckKind::DuplicateArgumentName => "DuplicateArgumentName",
|
CheckKind::DuplicateArgumentName => "DuplicateArgumentName",
|
||||||
CheckKind::FStringMissingPlaceholders => "FStringMissingPlaceholders",
|
CheckKind::FStringMissingPlaceholders => "FStringMissingPlaceholders",
|
||||||
CheckKind::FutureFeatureNotDefined(_) => "FutureFeatureNotDefined",
|
CheckKind::FutureFeatureNotDefined(_) => "FutureFeatureNotDefined",
|
||||||
|
|
@ -262,6 +268,7 @@ impl CheckKind {
|
||||||
match self {
|
match self {
|
||||||
CheckKind::AssertTuple => &CheckCode::F631,
|
CheckKind::AssertTuple => &CheckCode::F631,
|
||||||
CheckKind::DefaultExceptNotLast => &CheckCode::F707,
|
CheckKind::DefaultExceptNotLast => &CheckCode::F707,
|
||||||
|
CheckKind::DoNotUseBareExcept => &CheckCode::E722,
|
||||||
CheckKind::DuplicateArgumentName => &CheckCode::F831,
|
CheckKind::DuplicateArgumentName => &CheckCode::F831,
|
||||||
CheckKind::FStringMissingPlaceholders => &CheckCode::F541,
|
CheckKind::FStringMissingPlaceholders => &CheckCode::F541,
|
||||||
CheckKind::FutureFeatureNotDefined(_) => &CheckCode::F407,
|
CheckKind::FutureFeatureNotDefined(_) => &CheckCode::F407,
|
||||||
|
|
@ -302,6 +309,7 @@ impl CheckKind {
|
||||||
CheckKind::AssertTuple => {
|
CheckKind::AssertTuple => {
|
||||||
"Assert test is a non-empty tuple, which is always `True`".to_string()
|
"Assert test is a non-empty tuple, which is always `True`".to_string()
|
||||||
}
|
}
|
||||||
|
CheckKind::DoNotUseBareExcept => "Do not use bare `except`".to_string(),
|
||||||
CheckKind::DefaultExceptNotLast => {
|
CheckKind::DefaultExceptNotLast => {
|
||||||
"an `except:` block as not the last exception handler".to_string()
|
"an `except:` block as not the last exception handler".to_string()
|
||||||
}
|
}
|
||||||
|
|
@ -416,6 +424,7 @@ impl CheckKind {
|
||||||
CheckKind::AssertTuple => false,
|
CheckKind::AssertTuple => false,
|
||||||
CheckKind::DefaultExceptNotLast => false,
|
CheckKind::DefaultExceptNotLast => false,
|
||||||
CheckKind::DoNotAssignLambda => false,
|
CheckKind::DoNotAssignLambda => false,
|
||||||
|
CheckKind::DoNotUseBareExcept => false,
|
||||||
CheckKind::DuplicateArgumentName => false,
|
CheckKind::DuplicateArgumentName => false,
|
||||||
CheckKind::FStringMissingPlaceholders => false,
|
CheckKind::FStringMissingPlaceholders => false,
|
||||||
CheckKind::FutureFeatureNotDefined(_) => false,
|
CheckKind::FutureFeatureNotDefined(_) => false,
|
||||||
|
|
|
||||||
|
|
@ -240,6 +240,31 @@ mod tests {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn e722() -> Result<()> {
|
||||||
|
let mut actual = check_path(
|
||||||
|
Path::new("./resources/test/fixtures/E722.py"),
|
||||||
|
&settings::Settings {
|
||||||
|
line_length: 88,
|
||||||
|
exclude: vec![],
|
||||||
|
select: BTreeSet::from([CheckCode::E722]),
|
||||||
|
},
|
||||||
|
&fixer::Mode::Generate,
|
||||||
|
)?;
|
||||||
|
actual.sort_by_key(|check| check.location);
|
||||||
|
let expected = vec![Check {
|
||||||
|
kind: CheckKind::DoNotUseBareExcept,
|
||||||
|
location: Location::new(5, 1),
|
||||||
|
fix: None,
|
||||||
|
}];
|
||||||
|
assert_eq!(actual.len(), expected.len());
|
||||||
|
for i in 0..actual.len() {
|
||||||
|
assert_eq!(actual[i], expected[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn e714() -> Result<()> {
|
fn e714() -> Result<()> {
|
||||||
let mut actual = check_path(
|
let mut actual = check_path(
|
||||||
|
|
|
||||||
|
|
@ -265,6 +265,7 @@ other-attribute = 1
|
||||||
CheckCode::E712,
|
CheckCode::E712,
|
||||||
CheckCode::E713,
|
CheckCode::E713,
|
||||||
CheckCode::E714,
|
CheckCode::E714,
|
||||||
|
CheckCode::E722,
|
||||||
CheckCode::E731,
|
CheckCode::E731,
|
||||||
CheckCode::E741,
|
CheckCode::E741,
|
||||||
CheckCode::E742,
|
CheckCode::E742,
|
||||||
|
|
|
||||||
|
|
@ -50,6 +50,7 @@ impl Settings {
|
||||||
CheckCode::E712,
|
CheckCode::E712,
|
||||||
CheckCode::E713,
|
CheckCode::E713,
|
||||||
CheckCode::E714,
|
CheckCode::E714,
|
||||||
|
CheckCode::E722,
|
||||||
CheckCode::E731,
|
CheckCode::E731,
|
||||||
CheckCode::E741,
|
CheckCode::E741,
|
||||||
CheckCode::E742,
|
CheckCode::E742,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue