From 83f18193c249c35af6e3a210645d6c3178d1980b Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Sun, 2 Oct 2022 12:50:42 -0400 Subject: [PATCH] Add an end location to Check (#299) --- src/ast/checks.rs | 83 ++++++---- src/ast/relocate.rs | 14 +- src/ast/types.rs | 25 ++- src/autofix/fixer.rs | 36 ++-- src/autofix/fixes.rs | 12 +- src/check_ast.rs | 156 ++++++++++-------- src/check_lines.rs | 49 ++++-- src/checks.rs | 11 +- src/lib.rs | 1 + src/linter.rs | 7 +- src/main.rs | 1 + src/message.rs | 1 + src/noqa.rs | 37 +++-- src/printer.rs | 2 + src/snapshots/ruff__linter__tests__a001.snap | 55 ++++++ src/snapshots/ruff__linter__tests__a002.snap | 22 +++ src/snapshots/ruff__linter__tests__a003.snap | 7 +- src/snapshots/ruff__linter__tests__e402.snap | 3 + src/snapshots/ruff__linter__tests__e501.snap | 5 +- src/snapshots/ruff__linter__tests__e711.snap | 24 +++ src/snapshots/ruff__linter__tests__e712.snap | 27 +++ src/snapshots/ruff__linter__tests__e713.snap | 15 ++ src/snapshots/ruff__linter__tests__e714.snap | 9 + src/snapshots/ruff__linter__tests__e721.snap | 48 ++++++ src/snapshots/ruff__linter__tests__e722.snap | 9 + src/snapshots/ruff__linter__tests__e731.snap | 15 ++ src/snapshots/ruff__linter__tests__e741.snap | 75 +++++++++ src/snapshots/ruff__linter__tests__e742.snap | 9 + src/snapshots/ruff__linter__tests__e743.snap | 9 + src/snapshots/ruff__linter__tests__e999.snap | 3 + src/snapshots/ruff__linter__tests__f401.snap | 9 + src/snapshots/ruff__linter__tests__f402.snap | 6 + src/snapshots/ruff__linter__tests__f403.snap | 6 + src/snapshots/ruff__linter__tests__f404.snap | 3 + src/snapshots/ruff__linter__tests__f405.snap | 6 + src/snapshots/ruff__linter__tests__f406.snap | 6 + src/snapshots/ruff__linter__tests__f407.snap | 3 + src/snapshots/ruff__linter__tests__f541.snap | 9 + src/snapshots/ruff__linter__tests__f601.snap | 9 + src/snapshots/ruff__linter__tests__f602.snap | 3 + src/snapshots/ruff__linter__tests__f622.snap | 3 + src/snapshots/ruff__linter__tests__f631.snap | 6 + src/snapshots/ruff__linter__tests__f632.snap | 6 + src/snapshots/ruff__linter__tests__f633.snap | 3 + src/snapshots/ruff__linter__tests__f634.snap | 6 + src/snapshots/ruff__linter__tests__f701.snap | 12 ++ src/snapshots/ruff__linter__tests__f702.snap | 12 ++ src/snapshots/ruff__linter__tests__f704.snap | 9 + src/snapshots/ruff__linter__tests__f706.snap | 6 + src/snapshots/ruff__linter__tests__f707.snap | 9 + src/snapshots/ruff__linter__tests__f722.snap | 3 + src/snapshots/ruff__linter__tests__f821.snap | 24 +++ src/snapshots/ruff__linter__tests__f822.snap | 3 + src/snapshots/ruff__linter__tests__f823.snap | 3 + src/snapshots/ruff__linter__tests__f831.snap | 9 + src/snapshots/ruff__linter__tests__f841.snap | 15 ++ ...inter__tests__f841_dummy_variable_rgx.snap | 21 +++ src/snapshots/ruff__linter__tests__f901.snap | 6 + ...ff__linter__tests__future_annotations.snap | 6 + src/snapshots/ruff__linter__tests__m001.snap | 42 +++-- src/snapshots/ruff__linter__tests__r001.snap | 140 +++++++++++----- src/snapshots/ruff__linter__tests__r002.snap | 14 +- .../ruff__linter__tests__spr001.snap | 10 ++ 63 files changed, 973 insertions(+), 225 deletions(-) diff --git a/src/ast/checks.rs b/src/ast/checks.rs index fdf84678d0..1f11f1c739 100644 --- a/src/ast/checks.rs +++ b/src/ast/checks.rs @@ -8,13 +8,15 @@ use rustpython_parser::ast::{ }; use crate::ast::operations::SourceCodeLocator; -use crate::ast::types::{Binding, BindingKind, CheckLocator, FunctionScope, Scope, ScopeKind}; +use crate::ast::types::{ + Binding, BindingKind, CheckLocator, FunctionScope, Range, Scope, ScopeKind, +}; use crate::autofix::{fixer, fixes}; use crate::checks::{Check, CheckKind, Fix, RejectedCmpop}; use crate::python::builtins::BUILTINS; /// Check IfTuple compliance. -pub fn check_if_tuple(test: &Expr, location: Location) -> Option { +pub fn check_if_tuple(test: &Expr, location: Range) -> Option { if let ExprKind::Tuple { elts, .. } = &test.node { if !elts.is_empty() { return Some(Check::new(CheckKind::IfTuple, location)); @@ -24,7 +26,7 @@ pub fn check_if_tuple(test: &Expr, location: Location) -> Option { } /// Check AssertTuple compliance. -pub fn check_assert_tuple(test: &Expr, location: Location) -> Option { +pub fn check_assert_tuple(test: &Expr, location: Range) -> Option { if let ExprKind::Tuple { elts, .. } = &test.node { if !elts.is_empty() { return Some(Check::new(CheckKind::AssertTuple, location)); @@ -51,7 +53,7 @@ pub fn check_not_tests( if check_not_in { checks.push(Check::new( CheckKind::NotInTest, - locator.locate_check(operand.location), + locator.locate_check(Range::from_located(operand)), )); } } @@ -59,7 +61,7 @@ pub fn check_not_tests( if check_not_is { checks.push(Check::new( CheckKind::NotIsTest, - locator.locate_check(operand.location), + locator.locate_check(Range::from_located(operand)), )); } } @@ -106,7 +108,7 @@ pub fn check_unused_variables( } /// Check DoNotAssignLambda compliance. -pub fn check_do_not_assign_lambda(value: &Expr, location: Location) -> Option { +pub fn check_do_not_assign_lambda(value: &Expr, location: Range) -> Option { if let ExprKind::Lambda { .. } = &value.node { Some(Check::new(CheckKind::DoNotAssignLambda, location)) } else { @@ -119,7 +121,7 @@ fn is_ambiguous_name(name: &str) -> bool { } /// Check AmbiguousVariableName compliance. -pub fn check_ambiguous_variable_name(name: &str, location: Location) -> Option { +pub fn check_ambiguous_variable_name(name: &str, location: Range) -> Option { if is_ambiguous_name(name) { Some(Check::new( CheckKind::AmbiguousVariableName(name.to_string()), @@ -131,7 +133,7 @@ pub fn check_ambiguous_variable_name(name: &str, location: Location) -> Option Option { +pub fn check_ambiguous_class_name(name: &str, location: Range) -> Option { if is_ambiguous_name(name) { Some(Check::new( CheckKind::AmbiguousClassName(name.to_string()), @@ -143,7 +145,7 @@ pub fn check_ambiguous_class_name(name: &str, location: Location) -> Option Option { +pub fn check_ambiguous_function_name(name: &str, location: Range) -> Option { if is_ambiguous_name(name) { Some(Check::new( CheckKind::AmbiguousFunctionName(name.to_string()), @@ -175,7 +177,7 @@ pub fn check_useless_object_inheritance( }) => { let mut check = Check::new( CheckKind::UselessObjectInheritance(name.to_string()), - expr.location, + Range::from_located(expr), ); if matches!(autofix, fixer::Mode::Generate | fixer::Mode::Apply) { if let Some(fix) = fixes::remove_class_def_base( @@ -206,7 +208,7 @@ pub fn check_default_except_not_last(handlers: &Vec) -> Option Option { ExprKind::Call { func, .. } => { if let ExprKind::Name { id, .. } = &func.node { if id == "NotImplemented" { - return Some(Check::new(CheckKind::RaiseNotImplemented, expr.location)); + return Some(Check::new( + CheckKind::RaiseNotImplemented, + Range::from_located(expr), + )); } } } ExprKind::Name { id, .. } => { if id == "NotImplemented" { - return Some(Check::new(CheckKind::RaiseNotImplemented, expr.location)); + return Some(Check::new( + CheckKind::RaiseNotImplemented, + Range::from_located(expr), + )); } } _ => {} @@ -258,7 +266,10 @@ pub fn check_duplicate_arguments(arguments: &Arguments) -> Vec { for arg in all_arguments { let ident = &arg.node.arg; if idents.contains(ident.as_str()) { - checks.push(Check::new(CheckKind::DuplicateArgumentName, arg.location)); + checks.push(Check::new( + CheckKind::DuplicateArgumentName, + Range::from_located(arg), + )); } idents.insert(ident); } @@ -272,12 +283,16 @@ pub fn check_assert_equals(expr: &Expr, autofix: &fixer::Mode) -> Option if attr == "assertEquals" { if let ExprKind::Name { id, .. } = &value.node { if id == "self" { - let mut check = Check::new(CheckKind::NoAssertEquals, expr.location); + let mut check = + Check::new(CheckKind::NoAssertEquals, Range::from_located(expr)); if matches!(autofix, fixer::Mode::Generate | fixer::Mode::Apply) { check.amend(Fix { content: "assertEqual".to_string(), - start: Location::new(expr.location.row(), expr.location.column() + 1), - end: Location::new( + location: Location::new( + expr.location.row(), + expr.location.column() + 1, + ), + end_location: Location::new( expr.location.row(), expr.location.column() + 1 + "assertEquals".len(), ), @@ -326,7 +341,7 @@ pub fn check_repeated_keys( if check_repeated_literals && v1 == v2 { checks.push(Check::new( CheckKind::MultiValueRepeatedKeyLiteral, - locator.locate_check(k2.location), + locator.locate_check(Range::from_located(k2)), )) } } @@ -334,7 +349,7 @@ pub fn check_repeated_keys( if check_repeated_variables && v1 == v2 { checks.push(Check::new( CheckKind::MultiValueRepeatedKeyVariable((*v2).to_string()), - locator.locate_check(k2.location), + locator.locate_check(Range::from_located(k2)), )) } } @@ -373,13 +388,13 @@ pub fn check_literal_comparisons( if matches!(op, Cmpop::Eq) { checks.push(Check::new( CheckKind::NoneComparison(RejectedCmpop::Eq), - locator.locate_check(comparator.location), + locator.locate_check(Range::from_located(comparator)), )); } if matches!(op, Cmpop::NotEq) { checks.push(Check::new( CheckKind::NoneComparison(RejectedCmpop::NotEq), - locator.locate_check(comparator.location), + locator.locate_check(Range::from_located(comparator)), )); } } @@ -393,13 +408,13 @@ pub fn check_literal_comparisons( if matches!(op, Cmpop::Eq) { checks.push(Check::new( CheckKind::TrueFalseComparison(value, RejectedCmpop::Eq), - locator.locate_check(comparator.location), + locator.locate_check(Range::from_located(comparator)), )); } if matches!(op, Cmpop::NotEq) { checks.push(Check::new( CheckKind::TrueFalseComparison(value, RejectedCmpop::NotEq), - locator.locate_check(comparator.location), + locator.locate_check(Range::from_located(comparator)), )); } } @@ -419,13 +434,13 @@ pub fn check_literal_comparisons( if matches!(op, Cmpop::Eq) { checks.push(Check::new( CheckKind::NoneComparison(RejectedCmpop::Eq), - locator.locate_check(comparator.location), + locator.locate_check(Range::from_located(comparator)), )); } if matches!(op, Cmpop::NotEq) { checks.push(Check::new( CheckKind::NoneComparison(RejectedCmpop::NotEq), - locator.locate_check(comparator.location), + locator.locate_check(Range::from_located(comparator)), )); } } @@ -439,13 +454,13 @@ pub fn check_literal_comparisons( if matches!(op, Cmpop::Eq) { checks.push(Check::new( CheckKind::TrueFalseComparison(value, RejectedCmpop::Eq), - locator.locate_check(comparator.location), + locator.locate_check(Range::from_located(comparator)), )); } if matches!(op, Cmpop::NotEq) { checks.push(Check::new( CheckKind::TrueFalseComparison(value, RejectedCmpop::NotEq), - locator.locate_check(comparator.location), + locator.locate_check(Range::from_located(comparator)), )); } } @@ -482,7 +497,7 @@ pub fn check_is_literal( left: &Expr, ops: &Vec, comparators: &Vec, - location: Location, + location: Range, ) -> Vec { let mut checks: Vec = vec![]; @@ -503,7 +518,7 @@ pub fn check_is_literal( pub fn check_type_comparison( ops: &Vec, comparators: &Vec, - location: Location, + location: Range, ) -> Vec { let mut checks: Vec = vec![]; @@ -544,7 +559,7 @@ pub fn check_starred_expressions( elts: &[Expr], check_too_many_expressions: bool, check_two_starred_expressions: bool, - location: Location, + location: Range, ) -> Option { let mut has_starred: bool = false; let mut starred_index: Option = None; @@ -606,7 +621,7 @@ pub fn check_break_outside_loop( if !allowed { Some(Check::new( CheckKind::BreakOutsideLoop, - locator.locate_check(stmt.location), + locator.locate_check(Range::from_located(stmt)), )) } else { None @@ -647,7 +662,7 @@ pub fn check_continue_outside_loop( if !allowed { Some(Check::new( CheckKind::ContinueOutsideLoop, - locator.locate_check(stmt.location), + locator.locate_check(Range::from_located(stmt)), )) } else { None @@ -664,7 +679,7 @@ pub enum ShadowingType { /// Check builtin name shadowing pub fn check_builtin_shadowing( name: &str, - location: Location, + location: Range, node_type: ShadowingType, ) -> Option { if BUILTINS.contains(&name) { @@ -688,7 +703,7 @@ pub fn check_super_args(expr: &Expr, args: &Vec) -> Option { if id == "super" && !args.is_empty() { return Some(Check::new( CheckKind::SuperCallWithParameters, - expr.location, + Range::from_located(expr), )); } } diff --git a/src/ast/relocate.rs b/src/ast/relocate.rs index e07594e285..0e64f87fb4 100644 --- a/src/ast/relocate.rs +++ b/src/ast/relocate.rs @@ -1,13 +1,17 @@ -use rustpython_parser::ast::{Expr, ExprKind, Keyword, Location}; +use rustpython_parser::ast::{Expr, ExprKind, Keyword}; -fn relocate_keyword(keyword: &mut Keyword, location: Location) { - keyword.location = location; +use crate::ast::types::Range; + +fn relocate_keyword(keyword: &mut Keyword, location: Range) { + keyword.location = location.location; + keyword.end_location = location.end_location; relocate_expr(&mut keyword.node.value, location); } /// Change an expression's location (recursively) to match a desired, fixed location. -pub fn relocate_expr(expr: &mut Expr, location: Location) { - expr.location = location; +pub fn relocate_expr(expr: &mut Expr, location: Range) { + expr.location = location.location; + expr.end_location = location.end_location; match &mut expr.node { ExprKind::BoolOp { values, .. } => { for expr in values { diff --git a/src/ast/types.rs b/src/ast/types.rs index f8683c7607..cb648434c7 100644 --- a/src/ast/types.rs +++ b/src/ast/types.rs @@ -1,13 +1,28 @@ use std::collections::BTreeMap; use std::sync::atomic::{AtomicUsize, Ordering}; -use rustpython_parser::ast::Location; +use rustpython_parser::ast::{Located, Location}; fn id() -> usize { static COUNTER: AtomicUsize = AtomicUsize::new(1); COUNTER.fetch_add(1, Ordering::Relaxed) } +#[derive(Clone, Copy, Debug, Default)] +pub struct Range { + pub location: Location, + pub end_location: Location, +} + +impl Range { + pub fn from_located(located: &Located) -> Self { + Range { + location: located.location, + end_location: located.end_location, + } + } +} + #[derive(Clone, Debug, Default)] pub struct FunctionScope { pub uses_locals: bool, @@ -60,12 +75,12 @@ pub enum BindingKind { #[derive(Clone, Debug)] pub struct Binding { pub kind: BindingKind, - pub location: Location, - /// Tuple of (scope index, location) indicating the scope and location at which the binding was + pub location: Range, + /// Tuple of (scope index, range) indicating the scope and range at which the binding was /// last used. - pub used: Option<(usize, Location)>, + pub used: Option<(usize, Range)>, } pub trait CheckLocator { - fn locate_check(&self, default: Location) -> Location; + fn locate_check(&self, default: Range) -> Range; } diff --git a/src/autofix/fixer.rs b/src/autofix/fixer.rs index 756ca0394a..c4c423bb73 100644 --- a/src/autofix/fixer.rs +++ b/src/autofix/fixer.rs @@ -45,29 +45,29 @@ fn apply_fixes<'a>(fixes: impl Iterator, contents: &str) -> for fix in fixes { // Best-effort approach: if this fix overlaps with a fix we've already applied, skip it. - if last_pos > fix.start { + if last_pos > fix.location { continue; } - if fix.start.row() > last_pos.row() { + if fix.location.row() > last_pos.row() { if last_pos.row() > 0 || last_pos.column() > 0 { output.push_str(&lines[last_pos.row() - 1][last_pos.column() - 1..]); output.push('\n'); } - for line in &lines[last_pos.row()..fix.start.row() - 1] { + for line in &lines[last_pos.row()..fix.location.row() - 1] { output.push_str(line); output.push('\n'); } - output.push_str(&lines[fix.start.row() - 1][..fix.start.column() - 1]); + output.push_str(&lines[fix.location.row() - 1][..fix.location.column() - 1]); output.push_str(&fix.content); } else { output.push_str( - &lines[last_pos.row() - 1][last_pos.column() - 1..fix.start.column() - 1], + &lines[last_pos.row() - 1][last_pos.column() - 1..fix.location.column() - 1], ); output.push_str(&fix.content); } - last_pos = fix.end; + last_pos = fix.end_location; fix.applied = true; } @@ -106,8 +106,8 @@ mod tests { fn apply_single_replacement() -> Result<()> { let mut fixes = vec![Fix { content: "Bar".to_string(), - start: Location::new(1, 9), - end: Location::new(1, 15), + location: Location::new(1, 9), + end_location: Location::new(1, 15), applied: false, }]; let actual = apply_fixes( @@ -130,8 +130,8 @@ mod tests { fn apply_single_removal() -> Result<()> { let mut fixes = vec![Fix { content: "".to_string(), - start: Location::new(1, 8), - end: Location::new(1, 16), + location: Location::new(1, 8), + end_location: Location::new(1, 16), applied: false, }]; let actual = apply_fixes( @@ -155,14 +155,14 @@ mod tests { let mut fixes = vec![ Fix { content: "".to_string(), - start: Location::new(1, 8), - end: Location::new(1, 17), + location: Location::new(1, 8), + end_location: Location::new(1, 17), applied: false, }, Fix { content: "".to_string(), - start: Location::new(1, 17), - end: Location::new(1, 24), + location: Location::new(1, 17), + end_location: Location::new(1, 24), applied: false, }, ]; @@ -187,14 +187,14 @@ mod tests { let mut fixes = vec![ Fix { content: "".to_string(), - start: Location::new(1, 8), - end: Location::new(1, 16), + location: Location::new(1, 8), + end_location: Location::new(1, 16), applied: false, }, Fix { content: "ignored".to_string(), - start: Location::new(1, 10), - end: Location::new(1, 12), + location: Location::new(1, 10), + end_location: Location::new(1, 12), applied: false, }, ]; diff --git a/src/autofix/fixes.rs b/src/autofix/fixes.rs index 1c864c7a6e..8bf9ce5515 100644 --- a/src/autofix/fixes.rs +++ b/src/autofix/fixes.rs @@ -52,8 +52,8 @@ pub fn remove_class_def_base( return match (fix_start, fix_end) { (Some(start), Some(end)) => Some(Fix { content: "".to_string(), - start, - end, + location: start, + end_location: end, applied: false, }), _ => None, @@ -91,8 +91,8 @@ pub fn remove_class_def_base( match (fix_start, fix_end) { (Some(start), Some(end)) => Some(Fix { content: "".to_string(), - start, - end, + location: start, + end_location: end, applied: false, }), _ => None, @@ -116,8 +116,8 @@ pub fn remove_class_def_base( match (fix_start, fix_end) { (Some(start), Some(end)) => Some(Fix { content: "".to_string(), - start, - end, + location: start, + end_location: end, applied: false, }), _ => None, diff --git a/src/check_ast.rs b/src/check_ast.rs index 7c70931534..ced4a3af46 100644 --- a/src/check_ast.rs +++ b/src/check_ast.rs @@ -5,13 +5,15 @@ use once_cell::sync::Lazy; use regex::Regex; use rustpython_parser::ast::{ Arg, Arguments, Constant, Excepthandler, ExcepthandlerKind, Expr, ExprContext, ExprKind, - KeywordData, Location, Operator, Stmt, StmtKind, Suite, + KeywordData, Operator, Stmt, StmtKind, Suite, }; use rustpython_parser::parser; use crate::ast::operations::{extract_all_names, SourceCodeLocator}; use crate::ast::relocate::relocate_expr; -use crate::ast::types::{Binding, BindingKind, CheckLocator, FunctionScope, Scope, ScopeKind}; +use crate::ast::types::{ + Binding, BindingKind, CheckLocator, FunctionScope, Range, Scope, ScopeKind, +}; use crate::ast::visitor::{walk_excepthandler, Visitor}; use crate::ast::{checks, operations, visitor}; use crate::autofix::fixer; @@ -40,13 +42,13 @@ struct Checker<'a> { scopes: Vec, scope_stack: Vec, dead_scopes: Vec, - deferred_string_annotations: Vec<(Location, &'a str)>, + deferred_string_annotations: Vec<(Range, &'a str)>, deferred_annotations: Vec<(&'a Expr, Vec, Vec)>, deferred_functions: Vec<(&'a Stmt, Vec, Vec)>, deferred_lambdas: Vec<(&'a Expr, Vec, Vec)>, deferred_assignments: Vec, // Derivative state. - in_f_string: Option, + in_f_string: Option, in_annotation: bool, in_literal: bool, seen_non_import: bool, @@ -218,8 +220,8 @@ where name.to_string(), Binding { kind: BindingKind::Assignment, - used: Some((global_scope_id, stmt.location)), - location: stmt.location, + used: Some((global_scope_id, Range::from_located(stmt))), + location: Range::from_located(stmt), }, ); } @@ -227,7 +229,7 @@ where } if self.settings.select.contains(&CheckCode::E741) { - let location = self.locate_check(stmt.location); + let location = self.locate_check(Range::from_located(stmt)); self.checks.extend( names.iter().filter_map(|name| { checks::check_ambiguous_variable_name(name, location) @@ -276,13 +278,13 @@ where if self.settings.select.contains(&CheckCode::E743) { if let Some(check) = checks::check_ambiguous_function_name( name, - self.locate_check(stmt.location), + self.locate_check(Range::from_located(stmt)), ) { self.checks.push(check); } } - self.check_builtin_shadowing(name, stmt.location, true); + self.check_builtin_shadowing(name, Range::from_located(stmt), true); for expr in decorator_list { self.visit_expr(expr); @@ -326,7 +328,7 @@ where Binding { kind: BindingKind::Definition, used: None, - location: stmt.location, + location: Range::from_located(stmt), }, ); } @@ -341,7 +343,7 @@ where ScopeKind::Class | ScopeKind::Module => { self.checks.push(Check::new( CheckKind::ReturnOutsideFunction, - self.locate_check(stmt.location), + self.locate_check(Range::from_located(stmt)), )); } _ => {} @@ -373,14 +375,19 @@ where } if self.settings.select.contains(&CheckCode::E742) { - if let Some(check) = - checks::check_ambiguous_class_name(name, self.locate_check(stmt.location)) - { + if let Some(check) = checks::check_ambiguous_class_name( + name, + self.locate_check(Range::from_located(stmt)), + ) { self.checks.push(check); } } - self.check_builtin_shadowing(name, self.locate_check(stmt.location), false); + self.check_builtin_shadowing( + name, + self.locate_check(Range::from_located(stmt)), + false, + ); for expr in bases { self.visit_expr(expr) @@ -403,7 +410,7 @@ where { self.checks.push(Check::new( CheckKind::ModuleImportNotAtTopOfFile, - self.locate_check(stmt.location), + self.locate_check(Range::from_located(stmt)), )); } @@ -418,12 +425,12 @@ where alias.node.name.to_string(), ), used: None, - location: stmt.location, + location: Range::from_located(stmt), }, ) } else { if let Some(asname) = &alias.node.asname { - self.check_builtin_shadowing(asname, stmt.location, false); + self.check_builtin_shadowing(asname, Range::from_located(stmt), false); } self.add_binding( @@ -441,7 +448,7 @@ where .unwrap_or_else(|| alias.node.name.clone()), ), used: None, - location: stmt.location, + location: Range::from_located(stmt), }, ) } @@ -461,7 +468,7 @@ where { self.checks.push(Check::new( CheckKind::ModuleImportNotAtTopOfFile, - self.locate_check(stmt.location), + self.locate_check(Range::from_located(stmt)), )); } @@ -482,9 +489,9 @@ where .last() .expect("No current scope found."))] .id, - stmt.location, + Range::from_located(stmt), )), - location: stmt.location, + location: Range::from_located(stmt), }, ); @@ -497,7 +504,7 @@ where { self.checks.push(Check::new( CheckKind::FutureFeatureNotDefined(alias.node.name.to_string()), - self.locate_check(stmt.location), + self.locate_check(Range::from_located(stmt)), )); } @@ -505,7 +512,7 @@ where { self.checks.push(Check::new( CheckKind::LateFutureImport, - self.locate_check(stmt.location), + self.locate_check(Range::from_located(stmt)), )); } } else if alias.node.name == "*" { @@ -520,7 +527,7 @@ where Binding { kind: BindingKind::StarImportation, used: None, - location: stmt.location, + location: Range::from_located(stmt), }, ); @@ -530,7 +537,7 @@ where if !matches!(scope.kind, ScopeKind::Module) { self.checks.push(Check::new( CheckKind::ImportStarNotPermitted(module_name.to_string()), - self.locate_check(stmt.location), + self.locate_check(Range::from_located(stmt)), )); } } @@ -538,7 +545,7 @@ where if self.settings.select.contains(&CheckCode::F403) { self.checks.push(Check::new( CheckKind::ImportStarUsed(module_name.to_string()), - self.locate_check(stmt.location), + self.locate_check(Range::from_located(stmt)), )); } @@ -549,7 +556,7 @@ where scope.import_starred = true; } else { if let Some(asname) = &alias.node.asname { - self.check_builtin_shadowing(asname, stmt.location, false); + self.check_builtin_shadowing(asname, Range::from_located(stmt), false); } let binding = Binding { @@ -558,7 +565,7 @@ where Some(parent) => format!("{}.{}", parent, name), }), used: None, - location: stmt.location, + location: Range::from_located(stmt), }; self.add_binding(name, binding) } @@ -579,7 +586,7 @@ where StmtKind::If { test, .. } => { if self.settings.select.contains(&CheckCode::F634) { if let Some(check) = - checks::check_if_tuple(test, self.locate_check(stmt.location)) + checks::check_if_tuple(test, self.locate_check(Range::from_located(stmt))) { self.checks.push(check); } @@ -587,9 +594,10 @@ where } StmtKind::Assert { test, .. } => { if self.settings.select.contains(CheckKind::AssertTuple.code()) { - if let Some(check) = - checks::check_assert_tuple(test, self.locate_check(stmt.location)) - { + if let Some(check) = checks::check_assert_tuple( + test, + self.locate_check(Range::from_located(stmt)), + ) { self.checks.push(check); } } @@ -603,9 +611,10 @@ where } StmtKind::Assign { value, .. } => { if self.settings.select.contains(&CheckCode::E731) { - if let Some(check) = - checks::check_do_not_assign_lambda(value, self.locate_check(stmt.location)) - { + if let Some(check) = checks::check_do_not_assign_lambda( + value, + self.locate_check(Range::from_located(stmt)), + ) { self.checks.push(check); } } @@ -615,7 +624,7 @@ where if let Some(value) = value { if let Some(check) = checks::check_do_not_assign_lambda( value, - self.locate_check(stmt.location), + self.locate_check(Range::from_located(stmt)), ) { self.checks.push(check); } @@ -651,7 +660,7 @@ where Binding { kind: BindingKind::ClassDefinition, used: None, - location: stmt.location, + location: Range::from_located(stmt), }, ); }; @@ -698,7 +707,7 @@ where elts, check_too_many_expressions, check_two_starred_expressions, - self.locate_check(expr.location), + self.locate_check(Range::from_located(expr)), ) { self.checks.push(check); } @@ -710,13 +719,13 @@ where if self.settings.select.contains(&CheckCode::E741) { if let Some(check) = checks::check_ambiguous_variable_name( id, - self.locate_check(expr.location), + self.locate_check(Range::from_located(expr)), ) { self.checks.push(check); } } - self.check_builtin_shadowing(id, expr.location, true); + self.check_builtin_shadowing(id, Range::from_located(expr), true); let parent = self.parents[*(self.parent_stack.last().expect("No parent found."))]; @@ -776,7 +785,7 @@ where { self.checks.push(Check::new( CheckKind::YieldOutsideFunction, - self.locate_check(expr.location), + self.locate_check(Range::from_located(expr)), )); } } @@ -792,10 +801,10 @@ where { self.checks.push(Check::new( CheckKind::FStringMissingPlaceholders, - self.locate_check(expr.location), + self.locate_check(Range::from_located(expr)), )); } - self.in_f_string = Some(expr.location); + self.in_f_string = Some(Range::from_located(expr)); } ExprKind::BinOp { left, @@ -812,8 +821,10 @@ where .. }) = scope.values.get("print") { - self.checks - .push(Check::new(CheckKind::InvalidPrintSyntax, left.location)); + self.checks.push(Check::new( + CheckKind::InvalidPrintSyntax, + Range::from_located(left), + )); } } } @@ -855,7 +866,7 @@ where left, ops, comparators, - self.locate_check(expr.location), + self.locate_check(Range::from_located(expr)), )); } @@ -863,7 +874,7 @@ where self.checks.extend(checks::check_type_comparison( ops, comparators, - self.locate_check(expr.location), + self.locate_check(Range::from_located(expr)), )); } } @@ -872,7 +883,7 @@ where .. } if self.in_annotation && !self.in_literal => { self.deferred_string_annotations - .push((expr.location, value)); + .push((Range::from_located(expr), value)); } ExprKind::GeneratorExp { .. } | ExprKind::ListComp { .. } @@ -1022,7 +1033,7 @@ where if self.settings.select.contains(&CheckCode::E722) && type_.is_none() { self.checks.push(Check::new( CheckKind::DoNotUseBareExcept, - excepthandler.location, + Range::from_located(excepthandler), )); } match name { @@ -1030,13 +1041,17 @@ where if self.settings.select.contains(&CheckCode::E741) { if let Some(check) = checks::check_ambiguous_variable_name( name, - self.locate_check(excepthandler.location), + self.locate_check(Range::from_located(excepthandler)), ) { self.checks.push(check); } } - self.check_builtin_shadowing(name, excepthandler.location, false); + self.check_builtin_shadowing( + name, + Range::from_located(excepthandler), + false, + ); let scope = &self.scopes [*(self.scope_stack.last().expect("No current scope found."))]; @@ -1085,7 +1100,7 @@ where { self.checks.push(Check::new( CheckKind::UnusedVariable(name.to_string()), - excepthandler.location, + Range::from_located(excepthandler), )); } } @@ -1131,25 +1146,25 @@ where Binding { kind: BindingKind::Argument, used: None, - location: arg.location, + location: Range::from_located(arg), }, ); if self.settings.select.contains(&CheckCode::E741) { if let Some(check) = checks::check_ambiguous_variable_name( &arg.node.arg, - self.locate_check(arg.location), + self.locate_check(Range::from_located(arg)), ) { self.checks.push(check); } } - self.check_builtin_arg_shadowing(&arg.node.arg, arg.location); + self.check_builtin_arg_shadowing(&arg.node.arg, Range::from_located(arg)); } } impl CheckLocator for Checker<'_> { - fn locate_check(&self, default: Location) -> Location { + fn locate_check(&self, default: Range) -> Range { self.in_f_string.unwrap_or(default) } } @@ -1216,7 +1231,10 @@ impl<'a> Checker<'a> { && matches!(binding.kind, BindingKind::LoopVar) { self.checks.push(Check::new( - CheckKind::ImportShadowedByLoopVar(name.clone(), existing.location.row()), + CheckKind::ImportShadowedByLoopVar( + name.clone(), + existing.location.location.row(), + ), binding.location, )); } @@ -1249,7 +1267,7 @@ impl<'a> Checker<'a> { } } if let Some(binding) = scope.values.get_mut(id) { - binding.used = Some((scope_id, expr.location)); + binding.used = Some((scope_id, Range::from_located(expr))); return; } @@ -1273,7 +1291,7 @@ impl<'a> Checker<'a> { self.checks.push(Check::new( CheckKind::ImportStarUsage(id.clone(), from_list.join(", ")), - self.locate_check(expr.location), + self.locate_check(Range::from_located(expr)), )); } return; @@ -1286,7 +1304,7 @@ impl<'a> Checker<'a> { } self.checks.push(Check::new( CheckKind::UndefinedName(id.clone()), - self.locate_check(expr.location), + self.locate_check(Range::from_located(expr)), )) } } @@ -1323,7 +1341,7 @@ impl<'a> Checker<'a> { Binding { kind: BindingKind::Annotation, used: None, - location: expr.location, + location: Range::from_located(expr), }, ); return; @@ -1339,7 +1357,7 @@ impl<'a> Checker<'a> { Binding { kind: BindingKind::LoopVar, used: None, - location: expr.location, + location: Range::from_located(expr), }, ); return; @@ -1351,7 +1369,7 @@ impl<'a> Checker<'a> { Binding { kind: BindingKind::Binding, used: None, - location: expr.location, + location: Range::from_located(expr), }, ); return; @@ -1371,7 +1389,7 @@ impl<'a> Checker<'a> { Binding { kind: BindingKind::Export(extract_all_names(parent, current)), used: None, - location: expr.location, + location: Range::from_located(expr), }, ); return; @@ -1382,7 +1400,7 @@ impl<'a> Checker<'a> { Binding { kind: BindingKind::Assignment, used: None, - location: expr.location, + location: Range::from_located(expr), }, ); } @@ -1401,7 +1419,7 @@ impl<'a> Checker<'a> { { self.checks.push(Check::new( CheckKind::UndefinedName(id.clone()), - self.locate_check(expr.location), + self.locate_check(Range::from_located(expr)), )) } } @@ -1571,7 +1589,7 @@ impl<'a> Checker<'a> { } } - fn check_builtin_shadowing(&mut self, name: &str, location: Location, is_attribute: bool) { + fn check_builtin_shadowing(&mut self, name: &str, location: Range, is_attribute: bool) { let scope = &self.scopes[*(self.scope_stack.last().expect("No current scope found."))]; // flake8-builtins @@ -1597,7 +1615,7 @@ impl<'a> Checker<'a> { } } - fn check_builtin_arg_shadowing(&mut self, name: &str, location: Location) { + fn check_builtin_arg_shadowing(&mut self, name: &str, location: Range) { if self.settings.select.contains(&CheckCode::A002) { if let Some(check) = checks::check_builtin_shadowing( name, diff --git a/src/check_lines.rs b/src/check_lines.rs index c429944407..1c95c1284d 100644 --- a/src/check_lines.rs +++ b/src/check_lines.rs @@ -1,5 +1,6 @@ use std::collections::BTreeMap; +use crate::ast::types::Range; use rustpython_parser::ast::Location; use crate::autofix::fixer; @@ -64,11 +65,11 @@ pub fn check_lines( .or_insert_with(|| (noqa::extract_noqa_directive(lines[noqa_lineno]), vec![])); match noqa { - (Directive::All(_), matches) => { + (Directive::All(_, _), matches) => { matches.push(check.kind.code().as_str()); ignored.push(index) } - (Directive::Codes(_, codes), matches) => { + (Directive::Codes(_, _, codes), matches) => { if codes.contains(&check.kind.code().as_str()) { matches.push(check.kind.code().as_str()); ignored.push(index); @@ -89,14 +90,17 @@ pub fn check_lines( let check = Check::new( CheckKind::LineTooLong(line_length, settings.line_length), - Location::new(lineno + 1, settings.line_length + 1), + Range { + location: Location::new(lineno + 1, 1), + end_location: Location::new(lineno + 1, line_length + 1), + }, ); match noqa { - (Directive::All(_), matches) => { + (Directive::All(_, _), matches) => { matches.push(check.kind.code().as_str()); } - (Directive::Codes(_, codes), matches) => { + (Directive::Codes(_, _, codes), matches) => { if codes.contains(&check.kind.code().as_str()) { matches.push(check.kind.code().as_str()); } else { @@ -113,24 +117,30 @@ pub fn check_lines( if enforce_noqa { for (row, (directive, matches)) in noqa_directives { match directive { - Directive::All(column) => { + Directive::All(start, end) => { if matches.is_empty() { let mut check = Check::new( CheckKind::UnusedNOQA(None), - Location::new(row + 1, column + 1), + Range { + location: Location::new(row + 1, start + 1), + end_location: Location::new(row + 1, end + 1), + }, ); if matches!(autofix, fixer::Mode::Generate | fixer::Mode::Apply) { check.amend(Fix { content: "".to_string(), - start: Location::new(row + 1, column + 1), - end: Location::new(row + 1, lines[row].chars().count() + 1), + location: Location::new(row + 1, start + 1), + end_location: Location::new( + row + 1, + lines[row].chars().count() + 1, + ), applied: false, }); } line_checks.push(check); } } - Directive::Codes(column, codes) => { + Directive::Codes(start, end, codes) => { let mut invalid_codes = vec![]; let mut valid_codes = vec![]; for code in codes { @@ -144,21 +154,30 @@ pub fn check_lines( if !invalid_codes.is_empty() { let mut check = Check::new( CheckKind::UnusedNOQA(Some(invalid_codes.join(", "))), - Location::new(row + 1, column + 1), + Range { + location: Location::new(row + 1, start + 1), + end_location: Location::new(row + 1, end + 1), + }, ); if matches!(autofix, fixer::Mode::Generate | fixer::Mode::Apply) { if valid_codes.is_empty() { check.amend(Fix { content: "".to_string(), - start: Location::new(row + 1, column + 1), - end: Location::new(row + 1, lines[row].chars().count() + 1), + location: Location::new(row + 1, start + 1), + end_location: Location::new( + row + 1, + lines[row].chars().count() + 1, + ), applied: false, }); } else { check.amend(Fix { content: format!(" # noqa: {}", valid_codes.join(", ")), - start: Location::new(row + 1, column + 1), - end: Location::new(row + 1, lines[row].chars().count() + 1), + location: Location::new(row + 1, start + 1), + end_location: Location::new( + row + 1, + lines[row].chars().count() + 1, + ), applied: false, }); } diff --git a/src/checks.rs b/src/checks.rs index d15832dfac..fb0d2f6b13 100644 --- a/src/checks.rs +++ b/src/checks.rs @@ -1,5 +1,6 @@ use std::str::FromStr; +use crate::ast::types::Range; use anyhow::Result; use rustpython_parser::ast::Location; use serde::{Deserialize, Serialize}; @@ -718,8 +719,8 @@ impl CheckKind { #[derive(Debug, PartialEq, Eq, Serialize, Deserialize)] pub struct Fix { pub content: String, - pub start: Location, - pub end: Location, + pub location: Location, + pub end_location: Location, pub applied: bool, } @@ -727,14 +728,16 @@ pub struct Fix { pub struct Check { pub kind: CheckKind, pub location: Location, + pub end_location: Location, pub fix: Option, } impl Check { - pub fn new(kind: CheckKind, location: Location) -> Self { + pub fn new(kind: CheckKind, span: Range) -> Self { Self { kind, - location, + location: span.location, + end_location: span.end_location, fix: None, } } diff --git a/src/lib.rs b/src/lib.rs index 6faf7ad1ba..1a6490208e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -64,6 +64,7 @@ pub fn check(path: &Path, contents: &str) -> Result> { kind: check.kind, fixed: check.fix.map(|fix| fix.applied).unwrap_or_default(), location: check.location, + end_location: check.end_location, filename: path.to_string_lossy().to_string(), }) .collect(); diff --git a/src/linter.rs b/src/linter.rs index 098d1755ed..17a4291e56 100644 --- a/src/linter.rs +++ b/src/linter.rs @@ -5,6 +5,7 @@ use log::debug; use rustpython_parser::lexer::LexResult; use rustpython_parser::{lexer, parser}; +use crate::ast::types::Range; use crate::autofix::fixer; use crate::autofix::fixer::fix_file; use crate::check_ast::check_ast; @@ -53,7 +54,10 @@ pub(crate) fn check_path( if settings.select.contains(&CheckCode::E999) { checks.push(Check::new( CheckKind::SyntaxError(parse_error.error.to_string()), - parse_error.location, + Range { + location: parse_error.location, + end_location: parse_error.location, + }, )) } } @@ -115,6 +119,7 @@ pub fn lint_path( kind: check.kind, fixed: check.fix.map(|fix| fix.applied).unwrap_or_default(), location: check.location, + end_location: check.end_location, filename: path.to_string_lossy().to_string(), }) .collect(); diff --git a/src/main.rs b/src/main.rs index e3617c3a46..7a731fdcc4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -170,6 +170,7 @@ fn run_once( kind: CheckKind::IOError(message), fixed: false, location: Default::default(), + end_location: Default::default(), filename: path.to_string_lossy().to_string(), }] } else { diff --git a/src/message.rs b/src/message.rs index 3471211e23..25c0b26291 100644 --- a/src/message.rs +++ b/src/message.rs @@ -14,6 +14,7 @@ pub struct Message { pub kind: CheckKind, pub fixed: bool, pub location: Location, + pub end_location: Location, pub filename: String, } diff --git a/src/noqa.rs b/src/noqa.rs index fce545966c..2499c48f1a 100644 --- a/src/noqa.rs +++ b/src/noqa.rs @@ -19,8 +19,8 @@ static SPLIT_COMMA_REGEX: Lazy = Lazy::new(|| Regex::new(r"[,\s]").expect #[derive(Debug)] pub enum Directive<'a> { None, - All(usize), - Codes(usize, Vec<&'a str>), + All(usize, usize), + Codes(usize, usize, Vec<&'a str>), } pub fn extract_noqa_directive(line: &str) -> Directive { @@ -29,13 +29,14 @@ pub fn extract_noqa_directive(line: &str) -> Directive { Some(noqa) => match caps.name("codes") { Some(codes) => Directive::Codes( noqa.start(), + noqa.end(), SPLIT_COMMA_REGEX .split(codes.as_str()) .map(|code| code.trim()) .filter(|code| !code.is_empty()) .collect(), ), - None => Directive::All(noqa.start()), + None => Directive::All(noqa.start(), noqa.end()), }, None => Directive::None, }, @@ -133,8 +134,8 @@ fn add_noqa_inner( Directive::None => { output.push_str(line); } - Directive::All(start) => output.push_str(&line[..start]), - Directive::Codes(start, _) => output.push_str(&line[..start]), + Directive::All(start, _) => output.push_str(&line[..start]), + Directive::Codes(start, _, _) => output.push_str(&line[..start]), }; let codes: Vec<&str> = codes.iter().map(|code| code.as_str()).collect(); output.push_str(" # noqa: "); @@ -161,6 +162,7 @@ pub fn add_noqa( #[cfg(test)] mod tests { + use crate::ast::types::Range; use anyhow::Result; use rustpython_parser::ast::Location; use rustpython_parser::lexer; @@ -236,7 +238,10 @@ z = x + 1", let checks = vec![Check::new( CheckKind::UnusedVariable("x".to_string()), - Location::new(1, 1), + Range { + location: Location::new(1, 1), + end_location: Location::new(1, 1), + }, )]; let contents = "x = 1"; let noqa_line_for = vec![1]; @@ -247,11 +252,17 @@ z = x + 1", let checks = vec![ Check::new( CheckKind::AmbiguousVariableName("x".to_string()), - Location::new(1, 1), + Range { + location: Location::new(1, 1), + end_location: Location::new(1, 1), + }, ), Check::new( CheckKind::UnusedVariable("x".to_string()), - Location::new(1, 1), + Range { + location: Location::new(1, 1), + end_location: Location::new(1, 1), + }, ), ]; let contents = "x = 1 # noqa: E741"; @@ -263,11 +274,17 @@ z = x + 1", let checks = vec![ Check::new( CheckKind::AmbiguousVariableName("x".to_string()), - Location::new(1, 1), + Range { + location: Location::new(1, 1), + end_location: Location::new(1, 1), + }, ), Check::new( CheckKind::UnusedVariable("x".to_string()), - Location::new(1, 1), + Range { + location: Location::new(1, 1), + end_location: Location::new(1, 1), + }, ), ]; let contents = "x = 1 # noqa"; diff --git a/src/printer.rs b/src/printer.rs index 4cc4a376e0..d477c6871b 100644 --- a/src/printer.rs +++ b/src/printer.rs @@ -21,6 +21,7 @@ struct ExpandedMessage<'a> { message: String, fixed: bool, location: Location, + end_location: Location, filename: &'a String, } @@ -55,6 +56,7 @@ impl Printer { message: m.kind.body(), fixed: m.fixed, location: m.location, + end_location: m.end_location, filename: &m.filename, }) .collect::>() diff --git a/src/snapshots/ruff__linter__tests__a001.snap b/src/snapshots/ruff__linter__tests__a001.snap index c79ad8e8bf..d9cb4268df 100644 --- a/src/snapshots/ruff__linter__tests__a001.snap +++ b/src/snapshots/ruff__linter__tests__a001.snap @@ -7,106 +7,161 @@ expression: checks location: row: 1 column: 1 + end_location: + row: 1 + column: 19 fix: ~ - kind: BuiltinVariableShadowing: int location: row: 2 column: 1 + end_location: + row: 2 + column: 30 fix: ~ - kind: BuiltinVariableShadowing: print location: row: 4 column: 1 + end_location: + row: 4 + column: 6 fix: ~ - kind: BuiltinVariableShadowing: copyright location: row: 5 column: 1 + end_location: + row: 5 + column: 10 fix: ~ - kind: BuiltinVariableShadowing: complex location: row: 6 column: 2 + end_location: + row: 6 + column: 14 fix: ~ - kind: BuiltinVariableShadowing: float location: row: 7 column: 1 + end_location: + row: 7 + column: 6 fix: ~ - kind: BuiltinVariableShadowing: object location: row: 7 column: 9 + end_location: + row: 7 + column: 15 fix: ~ - kind: BuiltinVariableShadowing: min location: row: 8 column: 1 + end_location: + row: 8 + column: 4 fix: ~ - kind: BuiltinVariableShadowing: max location: row: 8 column: 6 + end_location: + row: 8 + column: 9 fix: ~ - kind: BuiltinVariableShadowing: bytes location: row: 10 column: 1 + end_location: + row: 13 + column: 1 fix: ~ - kind: BuiltinVariableShadowing: slice location: row: 13 column: 1 + end_location: + row: 16 + column: 1 fix: ~ - kind: BuiltinVariableShadowing: ValueError location: row: 18 column: 1 + end_location: + row: 21 + column: 1 fix: ~ - kind: BuiltinVariableShadowing: memoryview location: row: 21 column: 5 + end_location: + row: 21 + column: 15 fix: ~ - kind: BuiltinVariableShadowing: bytearray location: row: 21 column: 18 + end_location: + row: 21 + column: 27 fix: ~ - kind: BuiltinVariableShadowing: str location: row: 24 column: 22 + end_location: + row: 24 + column: 25 fix: ~ - kind: BuiltinVariableShadowing: all location: row: 24 column: 45 + end_location: + row: 24 + column: 48 fix: ~ - kind: BuiltinVariableShadowing: any location: row: 24 column: 50 + end_location: + row: 24 + column: 53 fix: ~ - kind: BuiltinVariableShadowing: sum location: row: 27 column: 8 + end_location: + row: 27 + column: 11 fix: ~ + diff --git a/src/snapshots/ruff__linter__tests__a002.snap b/src/snapshots/ruff__linter__tests__a002.snap index c42e9dfd8d..3bd7f6d68d 100644 --- a/src/snapshots/ruff__linter__tests__a002.snap +++ b/src/snapshots/ruff__linter__tests__a002.snap @@ -7,40 +7,62 @@ expression: checks location: row: 1 column: 11 + end_location: + row: 1 + column: 14 fix: ~ - kind: BuiltinArgumentShadowing: type location: row: 1 column: 19 + end_location: + row: 1 + column: 23 fix: ~ - kind: BuiltinArgumentShadowing: complex location: row: 1 column: 26 + end_location: + row: 1 + column: 33 fix: ~ - kind: BuiltinArgumentShadowing: Exception location: row: 1 column: 35 + end_location: + row: 1 + column: 44 fix: ~ - kind: BuiltinArgumentShadowing: getattr location: row: 1 column: 48 + end_location: + row: 1 + column: 55 fix: ~ - kind: BuiltinArgumentShadowing: bytes location: row: 5 column: 17 + end_location: + row: 5 + column: 22 fix: ~ - kind: BuiltinArgumentShadowing: float location: row: 9 column: 16 + end_location: + row: 9 + column: 21 fix: ~ + diff --git a/src/snapshots/ruff__linter__tests__a003.snap b/src/snapshots/ruff__linter__tests__a003.snap index 46de90dacb..57f2fce9f2 100644 --- a/src/snapshots/ruff__linter__tests__a003.snap +++ b/src/snapshots/ruff__linter__tests__a003.snap @@ -1,6 +1,5 @@ --- source: src/linter.rs -assertion_line: 762 expression: checks --- - kind: @@ -8,11 +7,17 @@ expression: checks location: row: 2 column: 5 + end_location: + row: 2 + column: 16 fix: ~ - kind: BuiltinAttributeShadowing: str location: row: 7 column: 5 + end_location: + row: 9 + column: 1 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__e402.snap b/src/snapshots/ruff__linter__tests__e402.snap index 2fd5ea0d82..eb4300e0b0 100644 --- a/src/snapshots/ruff__linter__tests__e402.snap +++ b/src/snapshots/ruff__linter__tests__e402.snap @@ -6,5 +6,8 @@ expression: checks location: row: 24 column: 1 + end_location: + row: 24 + column: 9 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__e501.snap b/src/snapshots/ruff__linter__tests__e501.snap index 7d64b4cdb5..65789d2925 100644 --- a/src/snapshots/ruff__linter__tests__e501.snap +++ b/src/snapshots/ruff__linter__tests__e501.snap @@ -8,6 +8,9 @@ expression: checks - 88 location: row: 5 - column: 89 + column: 1 + end_location: + row: 5 + column: 124 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__e711.snap b/src/snapshots/ruff__linter__tests__e711.snap index 21466b6be3..0a062974ed 100644 --- a/src/snapshots/ruff__linter__tests__e711.snap +++ b/src/snapshots/ruff__linter__tests__e711.snap @@ -7,47 +7,71 @@ expression: checks location: row: 2 column: 11 + end_location: + row: 2 + column: 15 fix: ~ - kind: NoneComparison: NotEq location: row: 5 column: 11 + end_location: + row: 5 + column: 15 fix: ~ - kind: NoneComparison: Eq location: row: 8 column: 4 + end_location: + row: 8 + column: 8 fix: ~ - kind: NoneComparison: NotEq location: row: 11 column: 4 + end_location: + row: 11 + column: 8 fix: ~ - kind: NoneComparison: Eq location: row: 14 column: 14 + end_location: + row: 14 + column: 18 fix: ~ - kind: NoneComparison: NotEq location: row: 17 column: 14 + end_location: + row: 17 + column: 18 fix: ~ - kind: NoneComparison: NotEq location: row: 20 column: 4 + end_location: + row: 20 + column: 8 fix: ~ - kind: NoneComparison: Eq location: row: 23 column: 4 + end_location: + row: 23 + column: 8 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__e712.snap b/src/snapshots/ruff__linter__tests__e712.snap index 2563ad5296..0e64e9b7ec 100644 --- a/src/snapshots/ruff__linter__tests__e712.snap +++ b/src/snapshots/ruff__linter__tests__e712.snap @@ -9,6 +9,9 @@ expression: checks location: row: 2 column: 11 + end_location: + row: 2 + column: 15 fix: ~ - kind: TrueFalseComparison: @@ -17,6 +20,9 @@ expression: checks location: row: 5 column: 11 + end_location: + row: 5 + column: 16 fix: ~ - kind: TrueFalseComparison: @@ -25,6 +31,9 @@ expression: checks location: row: 8 column: 4 + end_location: + row: 8 + column: 8 fix: ~ - kind: TrueFalseComparison: @@ -33,6 +42,9 @@ expression: checks location: row: 11 column: 4 + end_location: + row: 11 + column: 9 fix: ~ - kind: TrueFalseComparison: @@ -41,6 +53,9 @@ expression: checks location: row: 14 column: 14 + end_location: + row: 14 + column: 18 fix: ~ - kind: TrueFalseComparison: @@ -49,6 +64,9 @@ expression: checks location: row: 17 column: 14 + end_location: + row: 17 + column: 19 fix: ~ - kind: TrueFalseComparison: @@ -57,6 +75,9 @@ expression: checks location: row: 20 column: 20 + end_location: + row: 20 + column: 24 fix: ~ - kind: TrueFalseComparison: @@ -65,6 +86,9 @@ expression: checks location: row: 20 column: 44 + end_location: + row: 20 + column: 49 fix: ~ - kind: TrueFalseComparison: @@ -73,5 +97,8 @@ expression: checks location: row: 22 column: 5 + end_location: + row: 22 + column: 9 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__e713.snap b/src/snapshots/ruff__linter__tests__e713.snap index 47a343d46e..e64ae804da 100644 --- a/src/snapshots/ruff__linter__tests__e713.snap +++ b/src/snapshots/ruff__linter__tests__e713.snap @@ -6,25 +6,40 @@ expression: checks location: row: 2 column: 10 + end_location: + row: 2 + column: 14 fix: ~ - kind: NotInTest location: row: 5 column: 12 + end_location: + row: 5 + column: 16 fix: ~ - kind: NotInTest location: row: 8 column: 10 + end_location: + row: 8 + column: 14 fix: ~ - kind: NotInTest location: row: 11 column: 25 + end_location: + row: 11 + column: 29 fix: ~ - kind: NotInTest location: row: 14 column: 11 + end_location: + row: 14 + column: 15 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__e714.snap b/src/snapshots/ruff__linter__tests__e714.snap index 6ab33efb7f..2dd92c23a2 100644 --- a/src/snapshots/ruff__linter__tests__e714.snap +++ b/src/snapshots/ruff__linter__tests__e714.snap @@ -6,15 +6,24 @@ expression: checks location: row: 2 column: 10 + end_location: + row: 2 + column: 14 fix: ~ - kind: NotIsTest location: row: 5 column: 12 + end_location: + row: 5 + column: 16 fix: ~ - kind: NotIsTest location: row: 8 column: 10 + end_location: + row: 8 + column: 23 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__e721.snap b/src/snapshots/ruff__linter__tests__e721.snap index 73a5fff5fd..9c09741cec 100644 --- a/src/snapshots/ruff__linter__tests__e721.snap +++ b/src/snapshots/ruff__linter__tests__e721.snap @@ -6,80 +6,128 @@ expression: checks location: row: 2 column: 14 + end_location: + row: 2 + column: 25 fix: ~ - kind: TypeComparison location: row: 5 column: 14 + end_location: + row: 5 + column: 25 fix: ~ - kind: TypeComparison location: row: 10 column: 8 + end_location: + row: 10 + column: 24 fix: ~ - kind: TypeComparison location: row: 15 column: 14 + end_location: + row: 15 + column: 35 fix: ~ - kind: TypeComparison location: row: 18 column: 18 + end_location: + row: 18 + column: 32 fix: ~ - kind: TypeComparison location: row: 18 column: 46 + end_location: + row: 18 + column: 59 fix: ~ - kind: TypeComparison location: row: 20 column: 18 + end_location: + row: 20 + column: 29 fix: ~ - kind: TypeComparison location: row: 22 column: 18 + end_location: + row: 22 + column: 29 fix: ~ - kind: TypeComparison location: row: 24 column: 18 + end_location: + row: 24 + column: 31 fix: ~ - kind: TypeComparison location: row: 26 column: 18 + end_location: + row: 26 + column: 30 fix: ~ - kind: TypeComparison location: row: 28 column: 18 + end_location: + row: 28 + column: 31 fix: ~ - kind: TypeComparison location: row: 30 column: 18 + end_location: + row: 30 + column: 31 fix: ~ - kind: TypeComparison location: row: 32 column: 18 + end_location: + row: 32 + column: 35 fix: ~ - kind: TypeComparison location: row: 34 column: 18 + end_location: + row: 38 + column: 2 fix: ~ - kind: TypeComparison location: row: 40 column: 18 + end_location: + row: 40 + column: 29 fix: ~ - kind: TypeComparison location: row: 42 column: 18 + end_location: + row: 42 + column: 31 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__e722.snap b/src/snapshots/ruff__linter__tests__e722.snap index 555d04866b..d42a51bfc3 100644 --- a/src/snapshots/ruff__linter__tests__e722.snap +++ b/src/snapshots/ruff__linter__tests__e722.snap @@ -6,15 +6,24 @@ expression: checks location: row: 4 column: 1 + end_location: + row: 7 + column: 1 fix: ~ - kind: DoNotUseBareExcept location: row: 11 column: 1 + end_location: + row: 14 + column: 1 fix: ~ - kind: DoNotUseBareExcept location: row: 16 column: 1 + end_location: + row: 19 + column: 1 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__e731.snap b/src/snapshots/ruff__linter__tests__e731.snap index 5c0bcd6c78..456ab83858 100644 --- a/src/snapshots/ruff__linter__tests__e731.snap +++ b/src/snapshots/ruff__linter__tests__e731.snap @@ -6,25 +6,40 @@ expression: checks location: row: 2 column: 1 + end_location: + row: 2 + column: 20 fix: ~ - kind: DoNotAssignLambda location: row: 4 column: 1 + end_location: + row: 4 + column: 20 fix: ~ - kind: DoNotAssignLambda location: row: 7 column: 5 + end_location: + row: 7 + column: 30 fix: ~ - kind: DoNotAssignLambda location: row: 12 column: 1 + end_location: + row: 12 + column: 28 fix: ~ - kind: DoNotAssignLambda location: row: 16 column: 1 + end_location: + row: 16 + column: 26 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__e741.snap b/src/snapshots/ruff__linter__tests__e741.snap index 02bc80258c..5fca91dc80 100644 --- a/src/snapshots/ruff__linter__tests__e741.snap +++ b/src/snapshots/ruff__linter__tests__e741.snap @@ -7,149 +7,224 @@ expression: checks location: row: 3 column: 1 + end_location: + row: 3 + column: 2 fix: ~ - kind: AmbiguousVariableName: I location: row: 4 column: 1 + end_location: + row: 4 + column: 2 fix: ~ - kind: AmbiguousVariableName: O location: row: 5 column: 1 + end_location: + row: 5 + column: 2 fix: ~ - kind: AmbiguousVariableName: l location: row: 6 column: 1 + end_location: + row: 6 + column: 2 fix: ~ - kind: AmbiguousVariableName: l location: row: 8 column: 4 + end_location: + row: 8 + column: 5 fix: ~ - kind: AmbiguousVariableName: l location: row: 9 column: 5 + end_location: + row: 9 + column: 6 fix: ~ - kind: AmbiguousVariableName: l location: row: 10 column: 5 + end_location: + row: 10 + column: 6 fix: ~ - kind: AmbiguousVariableName: l location: row: 11 column: 5 + end_location: + row: 11 + column: 6 fix: ~ - kind: AmbiguousVariableName: l location: row: 16 column: 5 + end_location: + row: 16 + column: 6 fix: ~ - kind: AmbiguousVariableName: l location: row: 20 column: 8 + end_location: + row: 20 + column: 9 fix: ~ - kind: AmbiguousVariableName: l location: row: 25 column: 5 + end_location: + row: 25 + column: 13 fix: ~ - kind: AmbiguousVariableName: l location: row: 26 column: 5 + end_location: + row: 26 + column: 6 fix: ~ - kind: AmbiguousVariableName: l location: row: 30 column: 5 + end_location: + row: 30 + column: 6 fix: ~ - kind: AmbiguousVariableName: l location: row: 33 column: 9 + end_location: + row: 33 + column: 19 fix: ~ - kind: AmbiguousVariableName: l location: row: 34 column: 9 + end_location: + row: 34 + column: 10 fix: ~ - kind: AmbiguousVariableName: l location: row: 40 column: 8 + end_location: + row: 40 + column: 9 fix: ~ - kind: AmbiguousVariableName: I location: row: 40 column: 14 + end_location: + row: 40 + column: 15 fix: ~ - kind: AmbiguousVariableName: l location: row: 44 column: 8 + end_location: + row: 44 + column: 9 fix: ~ - kind: AmbiguousVariableName: I location: row: 44 column: 16 + end_location: + row: 44 + column: 17 fix: ~ - kind: AmbiguousVariableName: l location: row: 48 column: 9 + end_location: + row: 48 + column: 10 fix: ~ - kind: AmbiguousVariableName: I location: row: 48 column: 14 + end_location: + row: 48 + column: 15 fix: ~ - kind: AmbiguousVariableName: l location: row: 57 column: 16 + end_location: + row: 57 + column: 17 fix: ~ - kind: AmbiguousVariableName: l location: row: 66 column: 20 + end_location: + row: 66 + column: 21 fix: ~ - kind: AmbiguousVariableName: l location: row: 71 column: 1 + end_location: + row: 74 + column: 1 fix: ~ - kind: AmbiguousVariableName: l location: row: 74 column: 5 + end_location: + row: 74 + column: 11 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__e742.snap b/src/snapshots/ruff__linter__tests__e742.snap index 6148b7e9b3..dc4f39456e 100644 --- a/src/snapshots/ruff__linter__tests__e742.snap +++ b/src/snapshots/ruff__linter__tests__e742.snap @@ -7,17 +7,26 @@ expression: checks location: row: 1 column: 1 + end_location: + row: 5 + column: 1 fix: ~ - kind: AmbiguousClassName: I location: row: 5 column: 1 + end_location: + row: 9 + column: 1 fix: ~ - kind: AmbiguousClassName: O location: row: 9 column: 1 + end_location: + row: 13 + column: 1 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__e743.snap b/src/snapshots/ruff__linter__tests__e743.snap index 610b494dc2..8fa5093769 100644 --- a/src/snapshots/ruff__linter__tests__e743.snap +++ b/src/snapshots/ruff__linter__tests__e743.snap @@ -7,17 +7,26 @@ expression: checks location: row: 1 column: 1 + end_location: + row: 5 + column: 1 fix: ~ - kind: AmbiguousFunctionName: I location: row: 5 column: 1 + end_location: + row: 9 + column: 1 fix: ~ - kind: AmbiguousFunctionName: O location: row: 10 column: 5 + end_location: + row: 14 + column: 1 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__e999.snap b/src/snapshots/ruff__linter__tests__e999.snap index ffa105e96a..bfa3b2b3e6 100644 --- a/src/snapshots/ruff__linter__tests__e999.snap +++ b/src/snapshots/ruff__linter__tests__e999.snap @@ -7,5 +7,8 @@ expression: checks location: row: 2 column: 1 + end_location: + row: 2 + column: 1 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__f401.snap b/src/snapshots/ruff__linter__tests__f401.snap index a5ac7d2fec..f6f8c3747d 100644 --- a/src/snapshots/ruff__linter__tests__f401.snap +++ b/src/snapshots/ruff__linter__tests__f401.snap @@ -7,17 +7,26 @@ expression: checks location: row: 3 column: 1 + end_location: + row: 3 + column: 17 fix: ~ - kind: UnusedImport: collections.OrderedDict location: row: 5 column: 1 + end_location: + row: 9 + column: 2 fix: ~ - kind: UnusedImport: logging.handlers location: row: 13 column: 1 + end_location: + row: 13 + column: 24 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__f402.snap b/src/snapshots/ruff__linter__tests__f402.snap index 9e03a8c342..9f17fc30f8 100644 --- a/src/snapshots/ruff__linter__tests__f402.snap +++ b/src/snapshots/ruff__linter__tests__f402.snap @@ -9,6 +9,9 @@ expression: checks location: row: 5 column: 5 + end_location: + row: 5 + column: 7 fix: ~ - kind: ImportShadowedByLoopVar: @@ -17,5 +20,8 @@ expression: checks location: row: 8 column: 5 + end_location: + row: 8 + column: 9 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__f403.snap b/src/snapshots/ruff__linter__tests__f403.snap index b666ad0897..952569df0f 100644 --- a/src/snapshots/ruff__linter__tests__f403.snap +++ b/src/snapshots/ruff__linter__tests__f403.snap @@ -7,11 +7,17 @@ expression: checks location: row: 1 column: 1 + end_location: + row: 1 + column: 19 fix: ~ - kind: ImportStarUsed: F634 location: row: 2 column: 1 + end_location: + row: 2 + column: 19 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__f404.snap b/src/snapshots/ruff__linter__tests__f404.snap index a63adb017b..7ac3b3bcec 100644 --- a/src/snapshots/ruff__linter__tests__f404.snap +++ b/src/snapshots/ruff__linter__tests__f404.snap @@ -6,5 +6,8 @@ expression: checks location: row: 7 column: 1 + end_location: + row: 7 + column: 38 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__f405.snap b/src/snapshots/ruff__linter__tests__f405.snap index 0be147c3d2..ba4c4a80b1 100644 --- a/src/snapshots/ruff__linter__tests__f405.snap +++ b/src/snapshots/ruff__linter__tests__f405.snap @@ -9,6 +9,9 @@ expression: checks location: row: 5 column: 11 + end_location: + row: 5 + column: 15 fix: ~ - kind: ImportStarUsage: @@ -17,5 +20,8 @@ expression: checks location: row: 11 column: 1 + end_location: + row: 11 + column: 8 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__f406.snap b/src/snapshots/ruff__linter__tests__f406.snap index 39c2e90c94..7064027066 100644 --- a/src/snapshots/ruff__linter__tests__f406.snap +++ b/src/snapshots/ruff__linter__tests__f406.snap @@ -7,11 +7,17 @@ expression: checks location: row: 5 column: 5 + end_location: + row: 5 + column: 23 fix: ~ - kind: ImportStarNotPermitted: F634 location: row: 9 column: 5 + end_location: + row: 9 + column: 23 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__f407.snap b/src/snapshots/ruff__linter__tests__f407.snap index 238776589c..4ac1050add 100644 --- a/src/snapshots/ruff__linter__tests__f407.snap +++ b/src/snapshots/ruff__linter__tests__f407.snap @@ -7,5 +7,8 @@ expression: checks location: row: 2 column: 1 + end_location: + row: 2 + column: 44 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__f541.snap b/src/snapshots/ruff__linter__tests__f541.snap index 6e1e8d1b90..c4f14b5c1a 100644 --- a/src/snapshots/ruff__linter__tests__f541.snap +++ b/src/snapshots/ruff__linter__tests__f541.snap @@ -6,15 +6,24 @@ expression: checks location: row: 4 column: 7 + end_location: + row: 4 + column: 11 fix: ~ - kind: FStringMissingPlaceholders location: row: 5 column: 7 + end_location: + row: 5 + column: 11 fix: ~ - kind: FStringMissingPlaceholders location: row: 7 column: 7 + end_location: + row: 7 + column: 11 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__f601.snap b/src/snapshots/ruff__linter__tests__f601.snap index 007c564133..ab58c474a9 100644 --- a/src/snapshots/ruff__linter__tests__f601.snap +++ b/src/snapshots/ruff__linter__tests__f601.snap @@ -6,15 +6,24 @@ expression: checks location: row: 3 column: 6 + end_location: + row: 3 + column: 8 fix: ~ - kind: MultiValueRepeatedKeyLiteral location: row: 9 column: 5 + end_location: + row: 9 + column: 6 fix: ~ - kind: MultiValueRepeatedKeyLiteral location: row: 11 column: 7 + end_location: + row: 11 + column: 11 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__f602.snap b/src/snapshots/ruff__linter__tests__f602.snap index a4a3f6a64f..7bc5c021c3 100644 --- a/src/snapshots/ruff__linter__tests__f602.snap +++ b/src/snapshots/ruff__linter__tests__f602.snap @@ -7,5 +7,8 @@ expression: checks location: row: 5 column: 5 + end_location: + row: 5 + column: 6 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__f622.snap b/src/snapshots/ruff__linter__tests__f622.snap index 5d9f1d1e2a..5f7aa8b2a3 100644 --- a/src/snapshots/ruff__linter__tests__f622.snap +++ b/src/snapshots/ruff__linter__tests__f622.snap @@ -6,5 +6,8 @@ expression: checks location: row: 1 column: 1 + end_location: + row: 1 + column: 10 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__f631.snap b/src/snapshots/ruff__linter__tests__f631.snap index b62331de3a..25a9f4ce9b 100644 --- a/src/snapshots/ruff__linter__tests__f631.snap +++ b/src/snapshots/ruff__linter__tests__f631.snap @@ -6,10 +6,16 @@ expression: checks location: row: 1 column: 1 + end_location: + row: 1 + column: 20 fix: ~ - kind: AssertTuple location: row: 2 column: 1 + end_location: + row: 2 + column: 16 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__f632.snap b/src/snapshots/ruff__linter__tests__f632.snap index 2ec5b8e9db..6b927ab6ea 100644 --- a/src/snapshots/ruff__linter__tests__f632.snap +++ b/src/snapshots/ruff__linter__tests__f632.snap @@ -6,10 +6,16 @@ expression: checks location: row: 1 column: 6 + end_location: + row: 1 + column: 14 fix: ~ - kind: IsLiteral location: row: 4 column: 8 + end_location: + row: 4 + column: 16 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__f633.snap b/src/snapshots/ruff__linter__tests__f633.snap index 2a35be0f3e..a508b8a211 100644 --- a/src/snapshots/ruff__linter__tests__f633.snap +++ b/src/snapshots/ruff__linter__tests__f633.snap @@ -6,5 +6,8 @@ expression: checks location: row: 4 column: 1 + end_location: + row: 4 + column: 6 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__f634.snap b/src/snapshots/ruff__linter__tests__f634.snap index 5a0cfdfe87..d099867ff3 100644 --- a/src/snapshots/ruff__linter__tests__f634.snap +++ b/src/snapshots/ruff__linter__tests__f634.snap @@ -6,10 +6,16 @@ expression: checks location: row: 1 column: 1 + end_location: + row: 4 + column: 1 fix: ~ - kind: IfTuple location: row: 7 column: 5 + end_location: + row: 9 + column: 5 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__f701.snap b/src/snapshots/ruff__linter__tests__f701.snap index 29c06a629e..58ecf3f31c 100644 --- a/src/snapshots/ruff__linter__tests__f701.snap +++ b/src/snapshots/ruff__linter__tests__f701.snap @@ -6,20 +6,32 @@ expression: checks location: row: 4 column: 5 + end_location: + row: 4 + column: 10 fix: ~ - kind: BreakOutsideLoop location: row: 16 column: 5 + end_location: + row: 16 + column: 10 fix: ~ - kind: BreakOutsideLoop location: row: 20 column: 5 + end_location: + row: 20 + column: 10 fix: ~ - kind: BreakOutsideLoop location: row: 23 column: 1 + end_location: + row: 23 + column: 6 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__f702.snap b/src/snapshots/ruff__linter__tests__f702.snap index b2542e1eb2..23c6fff849 100644 --- a/src/snapshots/ruff__linter__tests__f702.snap +++ b/src/snapshots/ruff__linter__tests__f702.snap @@ -6,20 +6,32 @@ expression: checks location: row: 4 column: 5 + end_location: + row: 4 + column: 13 fix: ~ - kind: ContinueOutsideLoop location: row: 16 column: 5 + end_location: + row: 16 + column: 13 fix: ~ - kind: ContinueOutsideLoop location: row: 20 column: 5 + end_location: + row: 20 + column: 13 fix: ~ - kind: ContinueOutsideLoop location: row: 23 column: 1 + end_location: + row: 23 + column: 9 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__f704.snap b/src/snapshots/ruff__linter__tests__f704.snap index 34974cbe72..b01c7f2d02 100644 --- a/src/snapshots/ruff__linter__tests__f704.snap +++ b/src/snapshots/ruff__linter__tests__f704.snap @@ -6,15 +6,24 @@ expression: checks location: row: 6 column: 5 + end_location: + row: 6 + column: 12 fix: ~ - kind: YieldOutsideFunction location: row: 9 column: 1 + end_location: + row: 9 + column: 8 fix: ~ - kind: YieldOutsideFunction location: row: 10 column: 1 + end_location: + row: 10 + column: 13 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__f706.snap b/src/snapshots/ruff__linter__tests__f706.snap index f24de1a36b..cfc925267c 100644 --- a/src/snapshots/ruff__linter__tests__f706.snap +++ b/src/snapshots/ruff__linter__tests__f706.snap @@ -6,10 +6,16 @@ expression: checks location: row: 6 column: 5 + end_location: + row: 6 + column: 13 fix: ~ - kind: ReturnOutsideFunction location: row: 9 column: 1 + end_location: + row: 9 + column: 9 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__f707.snap b/src/snapshots/ruff__linter__tests__f707.snap index c96f76f776..3478e88353 100644 --- a/src/snapshots/ruff__linter__tests__f707.snap +++ b/src/snapshots/ruff__linter__tests__f707.snap @@ -6,15 +6,24 @@ expression: checks location: row: 3 column: 1 + end_location: + row: 5 + column: 1 fix: ~ - kind: DefaultExceptNotLast location: row: 10 column: 1 + end_location: + row: 12 + column: 1 fix: ~ - kind: DefaultExceptNotLast location: row: 19 column: 1 + end_location: + row: 21 + column: 1 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__f722.snap b/src/snapshots/ruff__linter__tests__f722.snap index 0262a6a169..ebe726fd93 100644 --- a/src/snapshots/ruff__linter__tests__f722.snap +++ b/src/snapshots/ruff__linter__tests__f722.snap @@ -7,5 +7,8 @@ expression: checks location: row: 9 column: 13 + end_location: + row: 9 + column: 17 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__f821.snap b/src/snapshots/ruff__linter__tests__f821.snap index 5a94019eb1..cc94c3fa34 100644 --- a/src/snapshots/ruff__linter__tests__f821.snap +++ b/src/snapshots/ruff__linter__tests__f821.snap @@ -7,47 +7,71 @@ expression: checks location: row: 2 column: 12 + end_location: + row: 2 + column: 16 fix: ~ - kind: UndefinedName: self location: row: 6 column: 13 + end_location: + row: 6 + column: 17 fix: ~ - kind: UndefinedName: self location: row: 10 column: 9 + end_location: + row: 10 + column: 13 fix: ~ - kind: UndefinedName: numeric_string location: row: 21 column: 12 + end_location: + row: 21 + column: 26 fix: ~ - kind: UndefinedName: Bar location: row: 58 column: 5 + end_location: + row: 58 + column: 9 fix: ~ - kind: UndefinedName: TOMATO location: row: 83 column: 11 + end_location: + row: 83 + column: 17 fix: ~ - kind: UndefinedName: B location: row: 87 column: 7 + end_location: + row: 87 + column: 11 fix: ~ - kind: UndefinedName: B location: row: 89 column: 7 + end_location: + row: 89 + column: 9 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__f822.snap b/src/snapshots/ruff__linter__tests__f822.snap index bdc2f4c16d..ccacb6fc44 100644 --- a/src/snapshots/ruff__linter__tests__f822.snap +++ b/src/snapshots/ruff__linter__tests__f822.snap @@ -7,5 +7,8 @@ expression: checks location: row: 3 column: 1 + end_location: + row: 3 + column: 8 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__f823.snap b/src/snapshots/ruff__linter__tests__f823.snap index b8fdcb4f56..01799b94c7 100644 --- a/src/snapshots/ruff__linter__tests__f823.snap +++ b/src/snapshots/ruff__linter__tests__f823.snap @@ -7,5 +7,8 @@ expression: checks location: row: 6 column: 5 + end_location: + row: 6 + column: 11 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__f831.snap b/src/snapshots/ruff__linter__tests__f831.snap index 5e7b1b6a70..9e5f07c6f9 100644 --- a/src/snapshots/ruff__linter__tests__f831.snap +++ b/src/snapshots/ruff__linter__tests__f831.snap @@ -6,15 +6,24 @@ expression: checks location: row: 1 column: 25 + end_location: + row: 1 + column: 31 fix: ~ - kind: DuplicateArgumentName location: row: 5 column: 28 + end_location: + row: 5 + column: 34 fix: ~ - kind: DuplicateArgumentName location: row: 9 column: 27 + end_location: + row: 9 + column: 33 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__f841.snap b/src/snapshots/ruff__linter__tests__f841.snap index aea064fd86..33358beb0c 100644 --- a/src/snapshots/ruff__linter__tests__f841.snap +++ b/src/snapshots/ruff__linter__tests__f841.snap @@ -7,29 +7,44 @@ expression: checks location: row: 3 column: 1 + end_location: + row: 7 + column: 1 fix: ~ - kind: UnusedVariable: z location: row: 16 column: 5 + end_location: + row: 16 + column: 6 fix: ~ - kind: UnusedVariable: foo location: row: 20 column: 5 + end_location: + row: 20 + column: 8 fix: ~ - kind: UnusedVariable: a location: row: 21 column: 6 + end_location: + row: 21 + column: 7 fix: ~ - kind: UnusedVariable: b location: row: 21 column: 9 + end_location: + row: 21 + column: 10 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__f841_dummy_variable_rgx.snap b/src/snapshots/ruff__linter__tests__f841_dummy_variable_rgx.snap index d3d9b061ec..e86a25a9f0 100644 --- a/src/snapshots/ruff__linter__tests__f841_dummy_variable_rgx.snap +++ b/src/snapshots/ruff__linter__tests__f841_dummy_variable_rgx.snap @@ -7,41 +7,62 @@ expression: checks location: row: 3 column: 1 + end_location: + row: 7 + column: 1 fix: ~ - kind: UnusedVariable: foo location: row: 20 column: 5 + end_location: + row: 20 + column: 8 fix: ~ - kind: UnusedVariable: a location: row: 21 column: 6 + end_location: + row: 21 + column: 7 fix: ~ - kind: UnusedVariable: b location: row: 21 column: 9 + end_location: + row: 21 + column: 10 fix: ~ - kind: UnusedVariable: _ location: row: 35 column: 5 + end_location: + row: 35 + column: 6 fix: ~ - kind: UnusedVariable: __ location: row: 36 column: 5 + end_location: + row: 36 + column: 7 fix: ~ - kind: UnusedVariable: _discarded location: row: 37 column: 5 + end_location: + row: 37 + column: 15 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__f901.snap b/src/snapshots/ruff__linter__tests__f901.snap index cb49b484d1..e01e11d373 100644 --- a/src/snapshots/ruff__linter__tests__f901.snap +++ b/src/snapshots/ruff__linter__tests__f901.snap @@ -6,10 +6,16 @@ expression: checks location: row: 2 column: 11 + end_location: + row: 2 + column: 27 fix: ~ - kind: RaiseNotImplemented location: row: 6 column: 11 + end_location: + row: 6 + column: 25 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__future_annotations.snap b/src/snapshots/ruff__linter__tests__future_annotations.snap index f320d40cee..86b2b1ef8d 100644 --- a/src/snapshots/ruff__linter__tests__future_annotations.snap +++ b/src/snapshots/ruff__linter__tests__future_annotations.snap @@ -7,11 +7,17 @@ expression: checks location: row: 5 column: 1 + end_location: + row: 5 + column: 30 fix: ~ - kind: UndefinedName: Bar location: row: 22 column: 19 + end_location: + row: 22 + column: 22 fix: ~ diff --git a/src/snapshots/ruff__linter__tests__m001.snap b/src/snapshots/ruff__linter__tests__m001.snap index ed646690d8..331c76c81f 100644 --- a/src/snapshots/ruff__linter__tests__m001.snap +++ b/src/snapshots/ruff__linter__tests__m001.snap @@ -7,12 +7,15 @@ expression: checks location: row: 9 column: 10 + end_location: + row: 9 + column: 18 fix: content: "" - start: + location: row: 9 column: 10 - end: + end_location: row: 9 column: 18 applied: false @@ -21,12 +24,15 @@ expression: checks location: row: 13 column: 10 + end_location: + row: 13 + column: 24 fix: content: "" - start: + location: row: 13 column: 10 - end: + end_location: row: 13 column: 24 applied: false @@ -35,12 +41,15 @@ expression: checks location: row: 16 column: 10 + end_location: + row: 16 + column: 30 fix: content: " # noqa: F841" - start: + location: row: 16 column: 10 - end: + end_location: row: 16 column: 30 applied: false @@ -49,12 +58,15 @@ expression: checks location: row: 41 column: 4 + end_location: + row: 41 + column: 24 fix: content: " # noqa: E501" - start: + location: row: 41 column: 4 - end: + end_location: row: 41 column: 24 applied: false @@ -63,12 +75,15 @@ expression: checks location: row: 49 column: 4 + end_location: + row: 49 + column: 18 fix: content: "" - start: + location: row: 49 column: 4 - end: + end_location: row: 49 column: 18 applied: false @@ -77,12 +92,15 @@ expression: checks location: row: 57 column: 4 + end_location: + row: 57 + column: 12 fix: content: "" - start: + location: row: 57 column: 4 - end: + end_location: row: 57 column: 12 applied: false diff --git a/src/snapshots/ruff__linter__tests__r001.snap b/src/snapshots/ruff__linter__tests__r001.snap index 08b7512df2..1ec0d7f1f8 100644 --- a/src/snapshots/ruff__linter__tests__r001.snap +++ b/src/snapshots/ruff__linter__tests__r001.snap @@ -7,12 +7,15 @@ expression: checks location: row: 5 column: 9 + end_location: + row: 5 + column: 15 fix: content: "" - start: + location: row: 5 column: 8 - end: + end_location: row: 5 column: 16 applied: false @@ -21,12 +24,15 @@ expression: checks location: row: 10 column: 5 + end_location: + row: 10 + column: 11 fix: content: "" - start: + location: row: 9 column: 8 - end: + end_location: row: 11 column: 2 applied: false @@ -35,12 +41,15 @@ expression: checks location: row: 16 column: 5 + end_location: + row: 16 + column: 11 fix: content: "" - start: + location: row: 15 column: 8 - end: + end_location: row: 18 column: 2 applied: false @@ -49,12 +58,15 @@ expression: checks location: row: 24 column: 5 + end_location: + row: 24 + column: 11 fix: content: "" - start: + location: row: 22 column: 8 - end: + end_location: row: 25 column: 2 applied: false @@ -63,12 +75,15 @@ expression: checks location: row: 31 column: 5 + end_location: + row: 31 + column: 11 fix: content: "" - start: + location: row: 29 column: 8 - end: + end_location: row: 32 column: 2 applied: false @@ -77,12 +92,15 @@ expression: checks location: row: 37 column: 5 + end_location: + row: 37 + column: 11 fix: content: "" - start: + location: row: 36 column: 8 - end: + end_location: row: 39 column: 2 applied: false @@ -91,12 +109,15 @@ expression: checks location: row: 45 column: 5 + end_location: + row: 45 + column: 11 fix: content: "" - start: + location: row: 43 column: 8 - end: + end_location: row: 47 column: 2 applied: false @@ -105,12 +126,15 @@ expression: checks location: row: 53 column: 5 + end_location: + row: 53 + column: 11 fix: content: "" - start: + location: row: 51 column: 8 - end: + end_location: row: 55 column: 2 applied: false @@ -119,12 +143,15 @@ expression: checks location: row: 61 column: 5 + end_location: + row: 61 + column: 11 fix: content: "" - start: + location: row: 59 column: 8 - end: + end_location: row: 63 column: 2 applied: false @@ -133,12 +160,15 @@ expression: checks location: row: 69 column: 5 + end_location: + row: 69 + column: 11 fix: content: "" - start: + location: row: 67 column: 8 - end: + end_location: row: 71 column: 2 applied: false @@ -147,12 +177,15 @@ expression: checks location: row: 75 column: 12 + end_location: + row: 75 + column: 18 fix: content: "" - start: + location: row: 75 column: 10 - end: + end_location: row: 75 column: 18 applied: false @@ -161,12 +194,15 @@ expression: checks location: row: 79 column: 9 + end_location: + row: 79 + column: 15 fix: content: "" - start: + location: row: 79 column: 9 - end: + end_location: row: 79 column: 17 applied: false @@ -175,12 +211,15 @@ expression: checks location: row: 84 column: 5 + end_location: + row: 84 + column: 11 fix: content: "" - start: + location: row: 84 column: 5 - end: + end_location: row: 85 column: 5 applied: false @@ -189,12 +228,15 @@ expression: checks location: row: 92 column: 5 + end_location: + row: 92 + column: 11 fix: content: "" - start: + location: row: 91 column: 6 - end: + end_location: row: 92 column: 11 applied: false @@ -203,12 +245,15 @@ expression: checks location: row: 98 column: 5 + end_location: + row: 98 + column: 11 fix: content: "" - start: + location: row: 98 column: 5 - end: + end_location: row: 100 column: 5 applied: false @@ -217,12 +262,15 @@ expression: checks location: row: 108 column: 5 + end_location: + row: 108 + column: 11 fix: content: "" - start: + location: row: 107 column: 6 - end: + end_location: row: 108 column: 11 applied: false @@ -231,12 +279,15 @@ expression: checks location: row: 114 column: 13 + end_location: + row: 114 + column: 19 fix: content: "" - start: + location: row: 114 column: 12 - end: + end_location: row: 114 column: 20 applied: false @@ -245,12 +296,15 @@ expression: checks location: row: 119 column: 5 + end_location: + row: 119 + column: 11 fix: content: "" - start: + location: row: 118 column: 8 - end: + end_location: row: 120 column: 2 applied: false @@ -259,12 +313,15 @@ expression: checks location: row: 125 column: 5 + end_location: + row: 125 + column: 11 fix: content: "" - start: + location: row: 124 column: 8 - end: + end_location: row: 126 column: 2 applied: false @@ -273,12 +330,15 @@ expression: checks location: row: 131 column: 5 + end_location: + row: 131 + column: 11 fix: content: "" - start: + location: row: 130 column: 8 - end: + end_location: row: 133 column: 2 applied: false diff --git a/src/snapshots/ruff__linter__tests__r002.snap b/src/snapshots/ruff__linter__tests__r002.snap index a33b6e98b0..b2169811ab 100644 --- a/src/snapshots/ruff__linter__tests__r002.snap +++ b/src/snapshots/ruff__linter__tests__r002.snap @@ -6,12 +6,15 @@ expression: checks location: row: 1 column: 1 + end_location: + row: 1 + column: 18 fix: content: assertEqual - start: + location: row: 1 column: 2 - end: + end_location: row: 1 column: 14 applied: false @@ -19,12 +22,15 @@ expression: checks location: row: 2 column: 1 + end_location: + row: 2 + column: 18 fix: content: assertEqual - start: + location: row: 2 column: 2 - end: + end_location: row: 2 column: 14 applied: false diff --git a/src/snapshots/ruff__linter__tests__spr001.snap b/src/snapshots/ruff__linter__tests__spr001.snap index f292739eef..6eb6820df2 100644 --- a/src/snapshots/ruff__linter__tests__spr001.snap +++ b/src/snapshots/ruff__linter__tests__spr001.snap @@ -6,14 +6,24 @@ expression: checks location: row: 17 column: 18 + end_location: + row: 17 + column: 23 fix: ~ - kind: SuperCallWithParameters location: row: 18 column: 9 + end_location: + row: 18 + column: 14 fix: ~ - kind: SuperCallWithParameters location: row: 19 column: 9 + end_location: + row: 19 + column: 14 fix: ~ +