Add an end location to Check (#299)

This commit is contained in:
Charlie Marsh 2022-10-02 12:50:42 -04:00 committed by GitHub
parent 46e6a1b3be
commit 83f18193c2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
63 changed files with 973 additions and 225 deletions

View File

@ -8,13 +8,15 @@ use rustpython_parser::ast::{
}; };
use crate::ast::operations::SourceCodeLocator; 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::autofix::{fixer, fixes};
use crate::checks::{Check, CheckKind, Fix, RejectedCmpop}; use crate::checks::{Check, CheckKind, Fix, RejectedCmpop};
use crate::python::builtins::BUILTINS; use crate::python::builtins::BUILTINS;
/// Check IfTuple compliance. /// Check IfTuple compliance.
pub fn check_if_tuple(test: &Expr, location: Location) -> Option<Check> { pub fn check_if_tuple(test: &Expr, location: Range) -> Option<Check> {
if let ExprKind::Tuple { elts, .. } = &test.node { if let ExprKind::Tuple { elts, .. } = &test.node {
if !elts.is_empty() { if !elts.is_empty() {
return Some(Check::new(CheckKind::IfTuple, location)); return Some(Check::new(CheckKind::IfTuple, location));
@ -24,7 +26,7 @@ pub fn check_if_tuple(test: &Expr, location: Location) -> Option<Check> {
} }
/// Check AssertTuple compliance. /// Check AssertTuple compliance.
pub fn check_assert_tuple(test: &Expr, location: Location) -> Option<Check> { pub fn check_assert_tuple(test: &Expr, location: Range) -> Option<Check> {
if let ExprKind::Tuple { elts, .. } = &test.node { if let ExprKind::Tuple { elts, .. } = &test.node {
if !elts.is_empty() { if !elts.is_empty() {
return Some(Check::new(CheckKind::AssertTuple, location)); return Some(Check::new(CheckKind::AssertTuple, location));
@ -51,7 +53,7 @@ pub fn check_not_tests(
if check_not_in { if check_not_in {
checks.push(Check::new( checks.push(Check::new(
CheckKind::NotInTest, 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 { if check_not_is {
checks.push(Check::new( checks.push(Check::new(
CheckKind::NotIsTest, 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. /// Check DoNotAssignLambda compliance.
pub fn check_do_not_assign_lambda(value: &Expr, location: Location) -> Option<Check> { pub fn check_do_not_assign_lambda(value: &Expr, location: Range) -> Option<Check> {
if let ExprKind::Lambda { .. } = &value.node { if let ExprKind::Lambda { .. } = &value.node {
Some(Check::new(CheckKind::DoNotAssignLambda, location)) Some(Check::new(CheckKind::DoNotAssignLambda, location))
} else { } else {
@ -119,7 +121,7 @@ fn is_ambiguous_name(name: &str) -> bool {
} }
/// Check AmbiguousVariableName compliance. /// Check AmbiguousVariableName compliance.
pub fn check_ambiguous_variable_name(name: &str, location: Location) -> Option<Check> { pub fn check_ambiguous_variable_name(name: &str, location: Range) -> Option<Check> {
if is_ambiguous_name(name) { if is_ambiguous_name(name) {
Some(Check::new( Some(Check::new(
CheckKind::AmbiguousVariableName(name.to_string()), CheckKind::AmbiguousVariableName(name.to_string()),
@ -131,7 +133,7 @@ pub fn check_ambiguous_variable_name(name: &str, location: Location) -> Option<C
} }
/// Check AmbiguousClassName compliance. /// Check AmbiguousClassName compliance.
pub fn check_ambiguous_class_name(name: &str, location: Location) -> Option<Check> { pub fn check_ambiguous_class_name(name: &str, location: Range) -> Option<Check> {
if is_ambiguous_name(name) { if is_ambiguous_name(name) {
Some(Check::new( Some(Check::new(
CheckKind::AmbiguousClassName(name.to_string()), CheckKind::AmbiguousClassName(name.to_string()),
@ -143,7 +145,7 @@ pub fn check_ambiguous_class_name(name: &str, location: Location) -> Option<Chec
} }
/// Check AmbiguousFunctionName compliance. /// Check AmbiguousFunctionName compliance.
pub fn check_ambiguous_function_name(name: &str, location: Location) -> Option<Check> { pub fn check_ambiguous_function_name(name: &str, location: Range) -> Option<Check> {
if is_ambiguous_name(name) { if is_ambiguous_name(name) {
Some(Check::new( Some(Check::new(
CheckKind::AmbiguousFunctionName(name.to_string()), CheckKind::AmbiguousFunctionName(name.to_string()),
@ -175,7 +177,7 @@ pub fn check_useless_object_inheritance(
}) => { }) => {
let mut check = Check::new( let mut check = Check::new(
CheckKind::UselessObjectInheritance(name.to_string()), CheckKind::UselessObjectInheritance(name.to_string()),
expr.location, Range::from_located(expr),
); );
if matches!(autofix, fixer::Mode::Generate | fixer::Mode::Apply) { if matches!(autofix, fixer::Mode::Generate | fixer::Mode::Apply) {
if let Some(fix) = fixes::remove_class_def_base( if let Some(fix) = fixes::remove_class_def_base(
@ -206,7 +208,7 @@ pub fn check_default_except_not_last(handlers: &Vec<Excepthandler>) -> Option<Ch
if type_.is_none() && idx < handlers.len() - 1 { if type_.is_none() && idx < handlers.len() - 1 {
return Some(Check::new( return Some(Check::new(
CheckKind::DefaultExceptNotLast, CheckKind::DefaultExceptNotLast,
handler.location, Range::from_located(handler),
)); ));
} }
} }
@ -220,13 +222,19 @@ pub fn check_raise_not_implemented(expr: &Expr) -> Option<Check> {
ExprKind::Call { func, .. } => { ExprKind::Call { func, .. } => {
if let ExprKind::Name { id, .. } = &func.node { if let ExprKind::Name { id, .. } = &func.node {
if id == "NotImplemented" { if id == "NotImplemented" {
return Some(Check::new(CheckKind::RaiseNotImplemented, expr.location)); return Some(Check::new(
CheckKind::RaiseNotImplemented,
Range::from_located(expr),
));
} }
} }
} }
ExprKind::Name { id, .. } => { ExprKind::Name { id, .. } => {
if id == "NotImplemented" { 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<Check> {
for arg in all_arguments { for arg in all_arguments {
let ident = &arg.node.arg; let ident = &arg.node.arg;
if idents.contains(ident.as_str()) { 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); idents.insert(ident);
} }
@ -272,12 +283,16 @@ pub fn check_assert_equals(expr: &Expr, autofix: &fixer::Mode) -> Option<Check>
if attr == "assertEquals" { if attr == "assertEquals" {
if let ExprKind::Name { id, .. } = &value.node { if let ExprKind::Name { id, .. } = &value.node {
if id == "self" { 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) { if matches!(autofix, fixer::Mode::Generate | fixer::Mode::Apply) {
check.amend(Fix { check.amend(Fix {
content: "assertEqual".to_string(), content: "assertEqual".to_string(),
start: Location::new(expr.location.row(), expr.location.column() + 1), location: Location::new(
end: Location::new( expr.location.row(),
expr.location.column() + 1,
),
end_location: Location::new(
expr.location.row(), expr.location.row(),
expr.location.column() + 1 + "assertEquals".len(), expr.location.column() + 1 + "assertEquals".len(),
), ),
@ -326,7 +341,7 @@ pub fn check_repeated_keys(
if check_repeated_literals && v1 == v2 { if check_repeated_literals && v1 == v2 {
checks.push(Check::new( checks.push(Check::new(
CheckKind::MultiValueRepeatedKeyLiteral, 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 { if check_repeated_variables && v1 == v2 {
checks.push(Check::new( checks.push(Check::new(
CheckKind::MultiValueRepeatedKeyVariable((*v2).to_string()), 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) { if matches!(op, Cmpop::Eq) {
checks.push(Check::new( checks.push(Check::new(
CheckKind::NoneComparison(RejectedCmpop::Eq), CheckKind::NoneComparison(RejectedCmpop::Eq),
locator.locate_check(comparator.location), locator.locate_check(Range::from_located(comparator)),
)); ));
} }
if matches!(op, Cmpop::NotEq) { if matches!(op, Cmpop::NotEq) {
checks.push(Check::new( checks.push(Check::new(
CheckKind::NoneComparison(RejectedCmpop::NotEq), 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) { if matches!(op, Cmpop::Eq) {
checks.push(Check::new( checks.push(Check::new(
CheckKind::TrueFalseComparison(value, RejectedCmpop::Eq), CheckKind::TrueFalseComparison(value, RejectedCmpop::Eq),
locator.locate_check(comparator.location), locator.locate_check(Range::from_located(comparator)),
)); ));
} }
if matches!(op, Cmpop::NotEq) { if matches!(op, Cmpop::NotEq) {
checks.push(Check::new( checks.push(Check::new(
CheckKind::TrueFalseComparison(value, RejectedCmpop::NotEq), 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) { if matches!(op, Cmpop::Eq) {
checks.push(Check::new( checks.push(Check::new(
CheckKind::NoneComparison(RejectedCmpop::Eq), CheckKind::NoneComparison(RejectedCmpop::Eq),
locator.locate_check(comparator.location), locator.locate_check(Range::from_located(comparator)),
)); ));
} }
if matches!(op, Cmpop::NotEq) { if matches!(op, Cmpop::NotEq) {
checks.push(Check::new( checks.push(Check::new(
CheckKind::NoneComparison(RejectedCmpop::NotEq), 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) { if matches!(op, Cmpop::Eq) {
checks.push(Check::new( checks.push(Check::new(
CheckKind::TrueFalseComparison(value, RejectedCmpop::Eq), CheckKind::TrueFalseComparison(value, RejectedCmpop::Eq),
locator.locate_check(comparator.location), locator.locate_check(Range::from_located(comparator)),
)); ));
} }
if matches!(op, Cmpop::NotEq) { if matches!(op, Cmpop::NotEq) {
checks.push(Check::new( checks.push(Check::new(
CheckKind::TrueFalseComparison(value, RejectedCmpop::NotEq), 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, left: &Expr,
ops: &Vec<Cmpop>, ops: &Vec<Cmpop>,
comparators: &Vec<Expr>, comparators: &Vec<Expr>,
location: Location, location: Range,
) -> Vec<Check> { ) -> Vec<Check> {
let mut checks: Vec<Check> = vec![]; let mut checks: Vec<Check> = vec![];
@ -503,7 +518,7 @@ pub fn check_is_literal(
pub fn check_type_comparison( pub fn check_type_comparison(
ops: &Vec<Cmpop>, ops: &Vec<Cmpop>,
comparators: &Vec<Expr>, comparators: &Vec<Expr>,
location: Location, location: Range,
) -> Vec<Check> { ) -> Vec<Check> {
let mut checks: Vec<Check> = vec![]; let mut checks: Vec<Check> = vec![];
@ -544,7 +559,7 @@ pub fn check_starred_expressions(
elts: &[Expr], elts: &[Expr],
check_too_many_expressions: bool, check_too_many_expressions: bool,
check_two_starred_expressions: bool, check_two_starred_expressions: bool,
location: Location, location: Range,
) -> Option<Check> { ) -> Option<Check> {
let mut has_starred: bool = false; let mut has_starred: bool = false;
let mut starred_index: Option<usize> = None; let mut starred_index: Option<usize> = None;
@ -606,7 +621,7 @@ pub fn check_break_outside_loop(
if !allowed { if !allowed {
Some(Check::new( Some(Check::new(
CheckKind::BreakOutsideLoop, CheckKind::BreakOutsideLoop,
locator.locate_check(stmt.location), locator.locate_check(Range::from_located(stmt)),
)) ))
} else { } else {
None None
@ -647,7 +662,7 @@ pub fn check_continue_outside_loop(
if !allowed { if !allowed {
Some(Check::new( Some(Check::new(
CheckKind::ContinueOutsideLoop, CheckKind::ContinueOutsideLoop,
locator.locate_check(stmt.location), locator.locate_check(Range::from_located(stmt)),
)) ))
} else { } else {
None None
@ -664,7 +679,7 @@ pub enum ShadowingType {
/// Check builtin name shadowing /// Check builtin name shadowing
pub fn check_builtin_shadowing( pub fn check_builtin_shadowing(
name: &str, name: &str,
location: Location, location: Range,
node_type: ShadowingType, node_type: ShadowingType,
) -> Option<Check> { ) -> Option<Check> {
if BUILTINS.contains(&name) { if BUILTINS.contains(&name) {
@ -688,7 +703,7 @@ pub fn check_super_args(expr: &Expr, args: &Vec<Expr>) -> Option<Check> {
if id == "super" && !args.is_empty() { if id == "super" && !args.is_empty() {
return Some(Check::new( return Some(Check::new(
CheckKind::SuperCallWithParameters, CheckKind::SuperCallWithParameters,
expr.location, Range::from_located(expr),
)); ));
} }
} }

View File

@ -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) { use crate::ast::types::Range;
keyword.location = location;
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); relocate_expr(&mut keyword.node.value, location);
} }
/// Change an expression's location (recursively) to match a desired, fixed location. /// Change an expression's location (recursively) to match a desired, fixed location.
pub fn relocate_expr(expr: &mut Expr, location: Location) { pub fn relocate_expr(expr: &mut Expr, location: Range) {
expr.location = location; expr.location = location.location;
expr.end_location = location.end_location;
match &mut expr.node { match &mut expr.node {
ExprKind::BoolOp { values, .. } => { ExprKind::BoolOp { values, .. } => {
for expr in values { for expr in values {

View File

@ -1,13 +1,28 @@
use std::collections::BTreeMap; use std::collections::BTreeMap;
use std::sync::atomic::{AtomicUsize, Ordering}; use std::sync::atomic::{AtomicUsize, Ordering};
use rustpython_parser::ast::Location; use rustpython_parser::ast::{Located, Location};
fn id() -> usize { fn id() -> usize {
static COUNTER: AtomicUsize = AtomicUsize::new(1); static COUNTER: AtomicUsize = AtomicUsize::new(1);
COUNTER.fetch_add(1, Ordering::Relaxed) 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<T>(located: &Located<T>) -> Self {
Range {
location: located.location,
end_location: located.end_location,
}
}
}
#[derive(Clone, Debug, Default)] #[derive(Clone, Debug, Default)]
pub struct FunctionScope { pub struct FunctionScope {
pub uses_locals: bool, pub uses_locals: bool,
@ -60,12 +75,12 @@ pub enum BindingKind {
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
pub struct Binding { pub struct Binding {
pub kind: BindingKind, pub kind: BindingKind,
pub location: Location, pub location: Range,
/// Tuple of (scope index, location) indicating the scope and location at which the binding was /// Tuple of (scope index, range) indicating the scope and range at which the binding was
/// last used. /// last used.
pub used: Option<(usize, Location)>, pub used: Option<(usize, Range)>,
} }
pub trait CheckLocator { pub trait CheckLocator {
fn locate_check(&self, default: Location) -> Location; fn locate_check(&self, default: Range) -> Range;
} }

View File

@ -45,29 +45,29 @@ fn apply_fixes<'a>(fixes: impl Iterator<Item = &'a mut Fix>, contents: &str) ->
for fix in fixes { for fix in fixes {
// Best-effort approach: if this fix overlaps with a fix we've already applied, skip it. // 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; continue;
} }
if fix.start.row() > last_pos.row() { if fix.location.row() > last_pos.row() {
if last_pos.row() > 0 || last_pos.column() > 0 { if last_pos.row() > 0 || last_pos.column() > 0 {
output.push_str(&lines[last_pos.row() - 1][last_pos.column() - 1..]); output.push_str(&lines[last_pos.row() - 1][last_pos.column() - 1..]);
output.push('\n'); 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_str(line);
output.push('\n'); 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); output.push_str(&fix.content);
} else { } else {
output.push_str( 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); output.push_str(&fix.content);
} }
last_pos = fix.end; last_pos = fix.end_location;
fix.applied = true; fix.applied = true;
} }
@ -106,8 +106,8 @@ mod tests {
fn apply_single_replacement() -> Result<()> { fn apply_single_replacement() -> Result<()> {
let mut fixes = vec![Fix { let mut fixes = vec![Fix {
content: "Bar".to_string(), content: "Bar".to_string(),
start: Location::new(1, 9), location: Location::new(1, 9),
end: Location::new(1, 15), end_location: Location::new(1, 15),
applied: false, applied: false,
}]; }];
let actual = apply_fixes( let actual = apply_fixes(
@ -130,8 +130,8 @@ mod tests {
fn apply_single_removal() -> Result<()> { fn apply_single_removal() -> Result<()> {
let mut fixes = vec![Fix { let mut fixes = vec![Fix {
content: "".to_string(), content: "".to_string(),
start: Location::new(1, 8), location: Location::new(1, 8),
end: Location::new(1, 16), end_location: Location::new(1, 16),
applied: false, applied: false,
}]; }];
let actual = apply_fixes( let actual = apply_fixes(
@ -155,14 +155,14 @@ mod tests {
let mut fixes = vec![ let mut fixes = vec![
Fix { Fix {
content: "".to_string(), content: "".to_string(),
start: Location::new(1, 8), location: Location::new(1, 8),
end: Location::new(1, 17), end_location: Location::new(1, 17),
applied: false, applied: false,
}, },
Fix { Fix {
content: "".to_string(), content: "".to_string(),
start: Location::new(1, 17), location: Location::new(1, 17),
end: Location::new(1, 24), end_location: Location::new(1, 24),
applied: false, applied: false,
}, },
]; ];
@ -187,14 +187,14 @@ mod tests {
let mut fixes = vec![ let mut fixes = vec![
Fix { Fix {
content: "".to_string(), content: "".to_string(),
start: Location::new(1, 8), location: Location::new(1, 8),
end: Location::new(1, 16), end_location: Location::new(1, 16),
applied: false, applied: false,
}, },
Fix { Fix {
content: "ignored".to_string(), content: "ignored".to_string(),
start: Location::new(1, 10), location: Location::new(1, 10),
end: Location::new(1, 12), end_location: Location::new(1, 12),
applied: false, applied: false,
}, },
]; ];

View File

@ -52,8 +52,8 @@ pub fn remove_class_def_base(
return match (fix_start, fix_end) { return match (fix_start, fix_end) {
(Some(start), Some(end)) => Some(Fix { (Some(start), Some(end)) => Some(Fix {
content: "".to_string(), content: "".to_string(),
start, location: start,
end, end_location: end,
applied: false, applied: false,
}), }),
_ => None, _ => None,
@ -91,8 +91,8 @@ pub fn remove_class_def_base(
match (fix_start, fix_end) { match (fix_start, fix_end) {
(Some(start), Some(end)) => Some(Fix { (Some(start), Some(end)) => Some(Fix {
content: "".to_string(), content: "".to_string(),
start, location: start,
end, end_location: end,
applied: false, applied: false,
}), }),
_ => None, _ => None,
@ -116,8 +116,8 @@ pub fn remove_class_def_base(
match (fix_start, fix_end) { match (fix_start, fix_end) {
(Some(start), Some(end)) => Some(Fix { (Some(start), Some(end)) => Some(Fix {
content: "".to_string(), content: "".to_string(),
start, location: start,
end, end_location: end,
applied: false, applied: false,
}), }),
_ => None, _ => None,

View File

@ -5,13 +5,15 @@ use once_cell::sync::Lazy;
use regex::Regex; use regex::Regex;
use rustpython_parser::ast::{ use rustpython_parser::ast::{
Arg, Arguments, Constant, Excepthandler, ExcepthandlerKind, Expr, ExprContext, ExprKind, Arg, Arguments, Constant, Excepthandler, ExcepthandlerKind, Expr, ExprContext, ExprKind,
KeywordData, Location, Operator, Stmt, StmtKind, Suite, KeywordData, Operator, Stmt, StmtKind, Suite,
}; };
use rustpython_parser::parser; use rustpython_parser::parser;
use crate::ast::operations::{extract_all_names, SourceCodeLocator}; use crate::ast::operations::{extract_all_names, SourceCodeLocator};
use crate::ast::relocate::relocate_expr; 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::visitor::{walk_excepthandler, Visitor};
use crate::ast::{checks, operations, visitor}; use crate::ast::{checks, operations, visitor};
use crate::autofix::fixer; use crate::autofix::fixer;
@ -40,13 +42,13 @@ struct Checker<'a> {
scopes: Vec<Scope>, scopes: Vec<Scope>,
scope_stack: Vec<usize>, scope_stack: Vec<usize>,
dead_scopes: Vec<usize>, dead_scopes: Vec<usize>,
deferred_string_annotations: Vec<(Location, &'a str)>, deferred_string_annotations: Vec<(Range, &'a str)>,
deferred_annotations: Vec<(&'a Expr, Vec<usize>, Vec<usize>)>, deferred_annotations: Vec<(&'a Expr, Vec<usize>, Vec<usize>)>,
deferred_functions: Vec<(&'a Stmt, Vec<usize>, Vec<usize>)>, deferred_functions: Vec<(&'a Stmt, Vec<usize>, Vec<usize>)>,
deferred_lambdas: Vec<(&'a Expr, Vec<usize>, Vec<usize>)>, deferred_lambdas: Vec<(&'a Expr, Vec<usize>, Vec<usize>)>,
deferred_assignments: Vec<usize>, deferred_assignments: Vec<usize>,
// Derivative state. // Derivative state.
in_f_string: Option<Location>, in_f_string: Option<Range>,
in_annotation: bool, in_annotation: bool,
in_literal: bool, in_literal: bool,
seen_non_import: bool, seen_non_import: bool,
@ -218,8 +220,8 @@ where
name.to_string(), name.to_string(),
Binding { Binding {
kind: BindingKind::Assignment, kind: BindingKind::Assignment,
used: Some((global_scope_id, stmt.location)), used: Some((global_scope_id, Range::from_located(stmt))),
location: stmt.location, location: Range::from_located(stmt),
}, },
); );
} }
@ -227,7 +229,7 @@ where
} }
if self.settings.select.contains(&CheckCode::E741) { 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( self.checks.extend(
names.iter().filter_map(|name| { names.iter().filter_map(|name| {
checks::check_ambiguous_variable_name(name, location) checks::check_ambiguous_variable_name(name, location)
@ -276,13 +278,13 @@ where
if self.settings.select.contains(&CheckCode::E743) { if self.settings.select.contains(&CheckCode::E743) {
if let Some(check) = checks::check_ambiguous_function_name( if let Some(check) = checks::check_ambiguous_function_name(
name, name,
self.locate_check(stmt.location), self.locate_check(Range::from_located(stmt)),
) { ) {
self.checks.push(check); 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 { for expr in decorator_list {
self.visit_expr(expr); self.visit_expr(expr);
@ -326,7 +328,7 @@ where
Binding { Binding {
kind: BindingKind::Definition, kind: BindingKind::Definition,
used: None, used: None,
location: stmt.location, location: Range::from_located(stmt),
}, },
); );
} }
@ -341,7 +343,7 @@ where
ScopeKind::Class | ScopeKind::Module => { ScopeKind::Class | ScopeKind::Module => {
self.checks.push(Check::new( self.checks.push(Check::new(
CheckKind::ReturnOutsideFunction, 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 self.settings.select.contains(&CheckCode::E742) {
if let Some(check) = if let Some(check) = checks::check_ambiguous_class_name(
checks::check_ambiguous_class_name(name, self.locate_check(stmt.location)) name,
{ self.locate_check(Range::from_located(stmt)),
) {
self.checks.push(check); 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 { for expr in bases {
self.visit_expr(expr) self.visit_expr(expr)
@ -403,7 +410,7 @@ where
{ {
self.checks.push(Check::new( self.checks.push(Check::new(
CheckKind::ModuleImportNotAtTopOfFile, CheckKind::ModuleImportNotAtTopOfFile,
self.locate_check(stmt.location), self.locate_check(Range::from_located(stmt)),
)); ));
} }
@ -418,12 +425,12 @@ where
alias.node.name.to_string(), alias.node.name.to_string(),
), ),
used: None, used: None,
location: stmt.location, location: Range::from_located(stmt),
}, },
) )
} else { } else {
if let Some(asname) = &alias.node.asname { 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( self.add_binding(
@ -441,7 +448,7 @@ where
.unwrap_or_else(|| alias.node.name.clone()), .unwrap_or_else(|| alias.node.name.clone()),
), ),
used: None, used: None,
location: stmt.location, location: Range::from_located(stmt),
}, },
) )
} }
@ -461,7 +468,7 @@ where
{ {
self.checks.push(Check::new( self.checks.push(Check::new(
CheckKind::ModuleImportNotAtTopOfFile, CheckKind::ModuleImportNotAtTopOfFile,
self.locate_check(stmt.location), self.locate_check(Range::from_located(stmt)),
)); ));
} }
@ -482,9 +489,9 @@ where
.last() .last()
.expect("No current scope found."))] .expect("No current scope found."))]
.id, .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( self.checks.push(Check::new(
CheckKind::FutureFeatureNotDefined(alias.node.name.to_string()), 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( self.checks.push(Check::new(
CheckKind::LateFutureImport, CheckKind::LateFutureImport,
self.locate_check(stmt.location), self.locate_check(Range::from_located(stmt)),
)); ));
} }
} else if alias.node.name == "*" { } else if alias.node.name == "*" {
@ -520,7 +527,7 @@ where
Binding { Binding {
kind: BindingKind::StarImportation, kind: BindingKind::StarImportation,
used: None, used: None,
location: stmt.location, location: Range::from_located(stmt),
}, },
); );
@ -530,7 +537,7 @@ where
if !matches!(scope.kind, ScopeKind::Module) { if !matches!(scope.kind, ScopeKind::Module) {
self.checks.push(Check::new( self.checks.push(Check::new(
CheckKind::ImportStarNotPermitted(module_name.to_string()), 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) { if self.settings.select.contains(&CheckCode::F403) {
self.checks.push(Check::new( self.checks.push(Check::new(
CheckKind::ImportStarUsed(module_name.to_string()), 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; scope.import_starred = true;
} else { } else {
if let Some(asname) = &alias.node.asname { 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 { let binding = Binding {
@ -558,7 +565,7 @@ where
Some(parent) => format!("{}.{}", parent, name), Some(parent) => format!("{}.{}", parent, name),
}), }),
used: None, used: None,
location: stmt.location, location: Range::from_located(stmt),
}; };
self.add_binding(name, binding) self.add_binding(name, binding)
} }
@ -579,7 +586,7 @@ where
StmtKind::If { test, .. } => { StmtKind::If { test, .. } => {
if self.settings.select.contains(&CheckCode::F634) { if self.settings.select.contains(&CheckCode::F634) {
if let Some(check) = 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); self.checks.push(check);
} }
@ -587,9 +594,10 @@ where
} }
StmtKind::Assert { test, .. } => { StmtKind::Assert { test, .. } => {
if self.settings.select.contains(CheckKind::AssertTuple.code()) { if self.settings.select.contains(CheckKind::AssertTuple.code()) {
if let Some(check) = if let Some(check) = checks::check_assert_tuple(
checks::check_assert_tuple(test, self.locate_check(stmt.location)) test,
{ self.locate_check(Range::from_located(stmt)),
) {
self.checks.push(check); self.checks.push(check);
} }
} }
@ -603,9 +611,10 @@ where
} }
StmtKind::Assign { value, .. } => { StmtKind::Assign { value, .. } => {
if self.settings.select.contains(&CheckCode::E731) { if self.settings.select.contains(&CheckCode::E731) {
if let Some(check) = if let Some(check) = checks::check_do_not_assign_lambda(
checks::check_do_not_assign_lambda(value, self.locate_check(stmt.location)) value,
{ self.locate_check(Range::from_located(stmt)),
) {
self.checks.push(check); self.checks.push(check);
} }
} }
@ -615,7 +624,7 @@ where
if let Some(value) = value { if let Some(value) = value {
if let Some(check) = checks::check_do_not_assign_lambda( if let Some(check) = checks::check_do_not_assign_lambda(
value, value,
self.locate_check(stmt.location), self.locate_check(Range::from_located(stmt)),
) { ) {
self.checks.push(check); self.checks.push(check);
} }
@ -651,7 +660,7 @@ where
Binding { Binding {
kind: BindingKind::ClassDefinition, kind: BindingKind::ClassDefinition,
used: None, used: None,
location: stmt.location, location: Range::from_located(stmt),
}, },
); );
}; };
@ -698,7 +707,7 @@ where
elts, elts,
check_too_many_expressions, check_too_many_expressions,
check_two_starred_expressions, check_two_starred_expressions,
self.locate_check(expr.location), self.locate_check(Range::from_located(expr)),
) { ) {
self.checks.push(check); self.checks.push(check);
} }
@ -710,13 +719,13 @@ where
if self.settings.select.contains(&CheckCode::E741) { if self.settings.select.contains(&CheckCode::E741) {
if let Some(check) = checks::check_ambiguous_variable_name( if let Some(check) = checks::check_ambiguous_variable_name(
id, id,
self.locate_check(expr.location), self.locate_check(Range::from_located(expr)),
) { ) {
self.checks.push(check); self.checks.push(check);
} }
} }
self.check_builtin_shadowing(id, expr.location, true); self.check_builtin_shadowing(id, Range::from_located(expr), true);
let parent = let parent =
self.parents[*(self.parent_stack.last().expect("No parent found."))]; self.parents[*(self.parent_stack.last().expect("No parent found."))];
@ -776,7 +785,7 @@ where
{ {
self.checks.push(Check::new( self.checks.push(Check::new(
CheckKind::YieldOutsideFunction, CheckKind::YieldOutsideFunction,
self.locate_check(expr.location), self.locate_check(Range::from_located(expr)),
)); ));
} }
} }
@ -792,10 +801,10 @@ where
{ {
self.checks.push(Check::new( self.checks.push(Check::new(
CheckKind::FStringMissingPlaceholders, 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 { ExprKind::BinOp {
left, left,
@ -812,8 +821,10 @@ where
.. ..
}) = scope.values.get("print") }) = scope.values.get("print")
{ {
self.checks self.checks.push(Check::new(
.push(Check::new(CheckKind::InvalidPrintSyntax, left.location)); CheckKind::InvalidPrintSyntax,
Range::from_located(left),
));
} }
} }
} }
@ -855,7 +866,7 @@ where
left, left,
ops, ops,
comparators, 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( self.checks.extend(checks::check_type_comparison(
ops, ops,
comparators, 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 => { } if self.in_annotation && !self.in_literal => {
self.deferred_string_annotations self.deferred_string_annotations
.push((expr.location, value)); .push((Range::from_located(expr), value));
} }
ExprKind::GeneratorExp { .. } ExprKind::GeneratorExp { .. }
| ExprKind::ListComp { .. } | ExprKind::ListComp { .. }
@ -1022,7 +1033,7 @@ where
if self.settings.select.contains(&CheckCode::E722) && type_.is_none() { if self.settings.select.contains(&CheckCode::E722) && type_.is_none() {
self.checks.push(Check::new( self.checks.push(Check::new(
CheckKind::DoNotUseBareExcept, CheckKind::DoNotUseBareExcept,
excepthandler.location, Range::from_located(excepthandler),
)); ));
} }
match name { match name {
@ -1030,13 +1041,17 @@ where
if self.settings.select.contains(&CheckCode::E741) { if self.settings.select.contains(&CheckCode::E741) {
if let Some(check) = checks::check_ambiguous_variable_name( if let Some(check) = checks::check_ambiguous_variable_name(
name, name,
self.locate_check(excepthandler.location), self.locate_check(Range::from_located(excepthandler)),
) { ) {
self.checks.push(check); 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 let scope = &self.scopes
[*(self.scope_stack.last().expect("No current scope found."))]; [*(self.scope_stack.last().expect("No current scope found."))];
@ -1085,7 +1100,7 @@ where
{ {
self.checks.push(Check::new( self.checks.push(Check::new(
CheckKind::UnusedVariable(name.to_string()), CheckKind::UnusedVariable(name.to_string()),
excepthandler.location, Range::from_located(excepthandler),
)); ));
} }
} }
@ -1131,25 +1146,25 @@ where
Binding { Binding {
kind: BindingKind::Argument, kind: BindingKind::Argument,
used: None, used: None,
location: arg.location, location: Range::from_located(arg),
}, },
); );
if self.settings.select.contains(&CheckCode::E741) { if self.settings.select.contains(&CheckCode::E741) {
if let Some(check) = checks::check_ambiguous_variable_name( if let Some(check) = checks::check_ambiguous_variable_name(
&arg.node.arg, &arg.node.arg,
self.locate_check(arg.location), self.locate_check(Range::from_located(arg)),
) { ) {
self.checks.push(check); 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<'_> { 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) self.in_f_string.unwrap_or(default)
} }
} }
@ -1216,7 +1231,10 @@ impl<'a> Checker<'a> {
&& matches!(binding.kind, BindingKind::LoopVar) && matches!(binding.kind, BindingKind::LoopVar)
{ {
self.checks.push(Check::new( self.checks.push(Check::new(
CheckKind::ImportShadowedByLoopVar(name.clone(), existing.location.row()), CheckKind::ImportShadowedByLoopVar(
name.clone(),
existing.location.location.row(),
),
binding.location, binding.location,
)); ));
} }
@ -1249,7 +1267,7 @@ impl<'a> Checker<'a> {
} }
} }
if let Some(binding) = scope.values.get_mut(id) { 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; return;
} }
@ -1273,7 +1291,7 @@ impl<'a> Checker<'a> {
self.checks.push(Check::new( self.checks.push(Check::new(
CheckKind::ImportStarUsage(id.clone(), from_list.join(", ")), CheckKind::ImportStarUsage(id.clone(), from_list.join(", ")),
self.locate_check(expr.location), self.locate_check(Range::from_located(expr)),
)); ));
} }
return; return;
@ -1286,7 +1304,7 @@ impl<'a> Checker<'a> {
} }
self.checks.push(Check::new( self.checks.push(Check::new(
CheckKind::UndefinedName(id.clone()), 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 { Binding {
kind: BindingKind::Annotation, kind: BindingKind::Annotation,
used: None, used: None,
location: expr.location, location: Range::from_located(expr),
}, },
); );
return; return;
@ -1339,7 +1357,7 @@ impl<'a> Checker<'a> {
Binding { Binding {
kind: BindingKind::LoopVar, kind: BindingKind::LoopVar,
used: None, used: None,
location: expr.location, location: Range::from_located(expr),
}, },
); );
return; return;
@ -1351,7 +1369,7 @@ impl<'a> Checker<'a> {
Binding { Binding {
kind: BindingKind::Binding, kind: BindingKind::Binding,
used: None, used: None,
location: expr.location, location: Range::from_located(expr),
}, },
); );
return; return;
@ -1371,7 +1389,7 @@ impl<'a> Checker<'a> {
Binding { Binding {
kind: BindingKind::Export(extract_all_names(parent, current)), kind: BindingKind::Export(extract_all_names(parent, current)),
used: None, used: None,
location: expr.location, location: Range::from_located(expr),
}, },
); );
return; return;
@ -1382,7 +1400,7 @@ impl<'a> Checker<'a> {
Binding { Binding {
kind: BindingKind::Assignment, kind: BindingKind::Assignment,
used: None, used: None,
location: expr.location, location: Range::from_located(expr),
}, },
); );
} }
@ -1401,7 +1419,7 @@ impl<'a> Checker<'a> {
{ {
self.checks.push(Check::new( self.checks.push(Check::new(
CheckKind::UndefinedName(id.clone()), 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."))]; let scope = &self.scopes[*(self.scope_stack.last().expect("No current scope found."))];
// flake8-builtins // 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 self.settings.select.contains(&CheckCode::A002) {
if let Some(check) = checks::check_builtin_shadowing( if let Some(check) = checks::check_builtin_shadowing(
name, name,

View File

@ -1,5 +1,6 @@
use std::collections::BTreeMap; use std::collections::BTreeMap;
use crate::ast::types::Range;
use rustpython_parser::ast::Location; use rustpython_parser::ast::Location;
use crate::autofix::fixer; use crate::autofix::fixer;
@ -64,11 +65,11 @@ pub fn check_lines(
.or_insert_with(|| (noqa::extract_noqa_directive(lines[noqa_lineno]), vec![])); .or_insert_with(|| (noqa::extract_noqa_directive(lines[noqa_lineno]), vec![]));
match noqa { match noqa {
(Directive::All(_), matches) => { (Directive::All(_, _), matches) => {
matches.push(check.kind.code().as_str()); matches.push(check.kind.code().as_str());
ignored.push(index) ignored.push(index)
} }
(Directive::Codes(_, codes), matches) => { (Directive::Codes(_, _, codes), matches) => {
if codes.contains(&check.kind.code().as_str()) { if codes.contains(&check.kind.code().as_str()) {
matches.push(check.kind.code().as_str()); matches.push(check.kind.code().as_str());
ignored.push(index); ignored.push(index);
@ -89,14 +90,17 @@ pub fn check_lines(
let check = Check::new( let check = Check::new(
CheckKind::LineTooLong(line_length, settings.line_length), 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 { match noqa {
(Directive::All(_), matches) => { (Directive::All(_, _), matches) => {
matches.push(check.kind.code().as_str()); matches.push(check.kind.code().as_str());
} }
(Directive::Codes(_, codes), matches) => { (Directive::Codes(_, _, codes), matches) => {
if codes.contains(&check.kind.code().as_str()) { if codes.contains(&check.kind.code().as_str()) {
matches.push(check.kind.code().as_str()); matches.push(check.kind.code().as_str());
} else { } else {
@ -113,24 +117,30 @@ pub fn check_lines(
if enforce_noqa { if enforce_noqa {
for (row, (directive, matches)) in noqa_directives { for (row, (directive, matches)) in noqa_directives {
match directive { match directive {
Directive::All(column) => { Directive::All(start, end) => {
if matches.is_empty() { if matches.is_empty() {
let mut check = Check::new( let mut check = Check::new(
CheckKind::UnusedNOQA(None), 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) { if matches!(autofix, fixer::Mode::Generate | fixer::Mode::Apply) {
check.amend(Fix { check.amend(Fix {
content: "".to_string(), content: "".to_string(),
start: Location::new(row + 1, column + 1), location: Location::new(row + 1, start + 1),
end: Location::new(row + 1, lines[row].chars().count() + 1), end_location: Location::new(
row + 1,
lines[row].chars().count() + 1,
),
applied: false, applied: false,
}); });
} }
line_checks.push(check); line_checks.push(check);
} }
} }
Directive::Codes(column, codes) => { Directive::Codes(start, end, codes) => {
let mut invalid_codes = vec![]; let mut invalid_codes = vec![];
let mut valid_codes = vec![]; let mut valid_codes = vec![];
for code in codes { for code in codes {
@ -144,21 +154,30 @@ pub fn check_lines(
if !invalid_codes.is_empty() { if !invalid_codes.is_empty() {
let mut check = Check::new( let mut check = Check::new(
CheckKind::UnusedNOQA(Some(invalid_codes.join(", "))), 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 matches!(autofix, fixer::Mode::Generate | fixer::Mode::Apply) {
if valid_codes.is_empty() { if valid_codes.is_empty() {
check.amend(Fix { check.amend(Fix {
content: "".to_string(), content: "".to_string(),
start: Location::new(row + 1, column + 1), location: Location::new(row + 1, start + 1),
end: Location::new(row + 1, lines[row].chars().count() + 1), end_location: Location::new(
row + 1,
lines[row].chars().count() + 1,
),
applied: false, applied: false,
}); });
} else { } else {
check.amend(Fix { check.amend(Fix {
content: format!(" # noqa: {}", valid_codes.join(", ")), content: format!(" # noqa: {}", valid_codes.join(", ")),
start: Location::new(row + 1, column + 1), location: Location::new(row + 1, start + 1),
end: Location::new(row + 1, lines[row].chars().count() + 1), end_location: Location::new(
row + 1,
lines[row].chars().count() + 1,
),
applied: false, applied: false,
}); });
} }

View File

@ -1,5 +1,6 @@
use std::str::FromStr; use std::str::FromStr;
use crate::ast::types::Range;
use anyhow::Result; use anyhow::Result;
use rustpython_parser::ast::Location; use rustpython_parser::ast::Location;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
@ -718,8 +719,8 @@ impl CheckKind {
#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)] #[derive(Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct Fix { pub struct Fix {
pub content: String, pub content: String,
pub start: Location, pub location: Location,
pub end: Location, pub end_location: Location,
pub applied: bool, pub applied: bool,
} }
@ -727,14 +728,16 @@ pub struct Fix {
pub struct Check { pub struct Check {
pub kind: CheckKind, pub kind: CheckKind,
pub location: Location, pub location: Location,
pub end_location: Location,
pub fix: Option<Fix>, pub fix: Option<Fix>,
} }
impl Check { impl Check {
pub fn new(kind: CheckKind, location: Location) -> Self { pub fn new(kind: CheckKind, span: Range) -> Self {
Self { Self {
kind, kind,
location, location: span.location,
end_location: span.end_location,
fix: None, fix: None,
} }
} }

View File

@ -64,6 +64,7 @@ pub fn check(path: &Path, contents: &str) -> Result<Vec<Message>> {
kind: check.kind, kind: check.kind,
fixed: check.fix.map(|fix| fix.applied).unwrap_or_default(), fixed: check.fix.map(|fix| fix.applied).unwrap_or_default(),
location: check.location, location: check.location,
end_location: check.end_location,
filename: path.to_string_lossy().to_string(), filename: path.to_string_lossy().to_string(),
}) })
.collect(); .collect();

View File

@ -5,6 +5,7 @@ use log::debug;
use rustpython_parser::lexer::LexResult; use rustpython_parser::lexer::LexResult;
use rustpython_parser::{lexer, parser}; use rustpython_parser::{lexer, parser};
use crate::ast::types::Range;
use crate::autofix::fixer; use crate::autofix::fixer;
use crate::autofix::fixer::fix_file; use crate::autofix::fixer::fix_file;
use crate::check_ast::check_ast; use crate::check_ast::check_ast;
@ -53,7 +54,10 @@ pub(crate) fn check_path(
if settings.select.contains(&CheckCode::E999) { if settings.select.contains(&CheckCode::E999) {
checks.push(Check::new( checks.push(Check::new(
CheckKind::SyntaxError(parse_error.error.to_string()), 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, kind: check.kind,
fixed: check.fix.map(|fix| fix.applied).unwrap_or_default(), fixed: check.fix.map(|fix| fix.applied).unwrap_or_default(),
location: check.location, location: check.location,
end_location: check.end_location,
filename: path.to_string_lossy().to_string(), filename: path.to_string_lossy().to_string(),
}) })
.collect(); .collect();

View File

@ -170,6 +170,7 @@ fn run_once(
kind: CheckKind::IOError(message), kind: CheckKind::IOError(message),
fixed: false, fixed: false,
location: Default::default(), location: Default::default(),
end_location: Default::default(),
filename: path.to_string_lossy().to_string(), filename: path.to_string_lossy().to_string(),
}] }]
} else { } else {

View File

@ -14,6 +14,7 @@ pub struct Message {
pub kind: CheckKind, pub kind: CheckKind,
pub fixed: bool, pub fixed: bool,
pub location: Location, pub location: Location,
pub end_location: Location,
pub filename: String, pub filename: String,
} }

View File

@ -19,8 +19,8 @@ static SPLIT_COMMA_REGEX: Lazy<Regex> = Lazy::new(|| Regex::new(r"[,\s]").expect
#[derive(Debug)] #[derive(Debug)]
pub enum Directive<'a> { pub enum Directive<'a> {
None, None,
All(usize), All(usize, usize),
Codes(usize, Vec<&'a str>), Codes(usize, usize, Vec<&'a str>),
} }
pub fn extract_noqa_directive(line: &str) -> Directive { 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(noqa) => match caps.name("codes") {
Some(codes) => Directive::Codes( Some(codes) => Directive::Codes(
noqa.start(), noqa.start(),
noqa.end(),
SPLIT_COMMA_REGEX SPLIT_COMMA_REGEX
.split(codes.as_str()) .split(codes.as_str())
.map(|code| code.trim()) .map(|code| code.trim())
.filter(|code| !code.is_empty()) .filter(|code| !code.is_empty())
.collect(), .collect(),
), ),
None => Directive::All(noqa.start()), None => Directive::All(noqa.start(), noqa.end()),
}, },
None => Directive::None, None => Directive::None,
}, },
@ -133,8 +134,8 @@ fn add_noqa_inner(
Directive::None => { Directive::None => {
output.push_str(line); output.push_str(line);
} }
Directive::All(start) => output.push_str(&line[..start]), Directive::All(start, _) => output.push_str(&line[..start]),
Directive::Codes(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(); let codes: Vec<&str> = codes.iter().map(|code| code.as_str()).collect();
output.push_str(" # noqa: "); output.push_str(" # noqa: ");
@ -161,6 +162,7 @@ pub fn add_noqa(
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use crate::ast::types::Range;
use anyhow::Result; use anyhow::Result;
use rustpython_parser::ast::Location; use rustpython_parser::ast::Location;
use rustpython_parser::lexer; use rustpython_parser::lexer;
@ -236,7 +238,10 @@ z = x + 1",
let checks = vec![Check::new( let checks = vec![Check::new(
CheckKind::UnusedVariable("x".to_string()), 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 contents = "x = 1";
let noqa_line_for = vec![1]; let noqa_line_for = vec![1];
@ -247,11 +252,17 @@ z = x + 1",
let checks = vec![ let checks = vec![
Check::new( Check::new(
CheckKind::AmbiguousVariableName("x".to_string()), CheckKind::AmbiguousVariableName("x".to_string()),
Location::new(1, 1), Range {
location: Location::new(1, 1),
end_location: Location::new(1, 1),
},
), ),
Check::new( Check::new(
CheckKind::UnusedVariable("x".to_string()), 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"; let contents = "x = 1 # noqa: E741";
@ -263,11 +274,17 @@ z = x + 1",
let checks = vec![ let checks = vec![
Check::new( Check::new(
CheckKind::AmbiguousVariableName("x".to_string()), CheckKind::AmbiguousVariableName("x".to_string()),
Location::new(1, 1), Range {
location: Location::new(1, 1),
end_location: Location::new(1, 1),
},
), ),
Check::new( Check::new(
CheckKind::UnusedVariable("x".to_string()), 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"; let contents = "x = 1 # noqa";

View File

@ -21,6 +21,7 @@ struct ExpandedMessage<'a> {
message: String, message: String,
fixed: bool, fixed: bool,
location: Location, location: Location,
end_location: Location,
filename: &'a String, filename: &'a String,
} }
@ -55,6 +56,7 @@ impl Printer {
message: m.kind.body(), message: m.kind.body(),
fixed: m.fixed, fixed: m.fixed,
location: m.location, location: m.location,
end_location: m.end_location,
filename: &m.filename, filename: &m.filename,
}) })
.collect::<Vec<_>>() .collect::<Vec<_>>()

View File

@ -7,106 +7,161 @@ expression: checks
location: location:
row: 1 row: 1
column: 1 column: 1
end_location:
row: 1
column: 19
fix: ~ fix: ~
- kind: - kind:
BuiltinVariableShadowing: int BuiltinVariableShadowing: int
location: location:
row: 2 row: 2
column: 1 column: 1
end_location:
row: 2
column: 30
fix: ~ fix: ~
- kind: - kind:
BuiltinVariableShadowing: print BuiltinVariableShadowing: print
location: location:
row: 4 row: 4
column: 1 column: 1
end_location:
row: 4
column: 6
fix: ~ fix: ~
- kind: - kind:
BuiltinVariableShadowing: copyright BuiltinVariableShadowing: copyright
location: location:
row: 5 row: 5
column: 1 column: 1
end_location:
row: 5
column: 10
fix: ~ fix: ~
- kind: - kind:
BuiltinVariableShadowing: complex BuiltinVariableShadowing: complex
location: location:
row: 6 row: 6
column: 2 column: 2
end_location:
row: 6
column: 14
fix: ~ fix: ~
- kind: - kind:
BuiltinVariableShadowing: float BuiltinVariableShadowing: float
location: location:
row: 7 row: 7
column: 1 column: 1
end_location:
row: 7
column: 6
fix: ~ fix: ~
- kind: - kind:
BuiltinVariableShadowing: object BuiltinVariableShadowing: object
location: location:
row: 7 row: 7
column: 9 column: 9
end_location:
row: 7
column: 15
fix: ~ fix: ~
- kind: - kind:
BuiltinVariableShadowing: min BuiltinVariableShadowing: min
location: location:
row: 8 row: 8
column: 1 column: 1
end_location:
row: 8
column: 4
fix: ~ fix: ~
- kind: - kind:
BuiltinVariableShadowing: max BuiltinVariableShadowing: max
location: location:
row: 8 row: 8
column: 6 column: 6
end_location:
row: 8
column: 9
fix: ~ fix: ~
- kind: - kind:
BuiltinVariableShadowing: bytes BuiltinVariableShadowing: bytes
location: location:
row: 10 row: 10
column: 1 column: 1
end_location:
row: 13
column: 1
fix: ~ fix: ~
- kind: - kind:
BuiltinVariableShadowing: slice BuiltinVariableShadowing: slice
location: location:
row: 13 row: 13
column: 1 column: 1
end_location:
row: 16
column: 1
fix: ~ fix: ~
- kind: - kind:
BuiltinVariableShadowing: ValueError BuiltinVariableShadowing: ValueError
location: location:
row: 18 row: 18
column: 1 column: 1
end_location:
row: 21
column: 1
fix: ~ fix: ~
- kind: - kind:
BuiltinVariableShadowing: memoryview BuiltinVariableShadowing: memoryview
location: location:
row: 21 row: 21
column: 5 column: 5
end_location:
row: 21
column: 15
fix: ~ fix: ~
- kind: - kind:
BuiltinVariableShadowing: bytearray BuiltinVariableShadowing: bytearray
location: location:
row: 21 row: 21
column: 18 column: 18
end_location:
row: 21
column: 27
fix: ~ fix: ~
- kind: - kind:
BuiltinVariableShadowing: str BuiltinVariableShadowing: str
location: location:
row: 24 row: 24
column: 22 column: 22
end_location:
row: 24
column: 25
fix: ~ fix: ~
- kind: - kind:
BuiltinVariableShadowing: all BuiltinVariableShadowing: all
location: location:
row: 24 row: 24
column: 45 column: 45
end_location:
row: 24
column: 48
fix: ~ fix: ~
- kind: - kind:
BuiltinVariableShadowing: any BuiltinVariableShadowing: any
location: location:
row: 24 row: 24
column: 50 column: 50
end_location:
row: 24
column: 53
fix: ~ fix: ~
- kind: - kind:
BuiltinVariableShadowing: sum BuiltinVariableShadowing: sum
location: location:
row: 27 row: 27
column: 8 column: 8
end_location:
row: 27
column: 11
fix: ~ fix: ~

View File

@ -7,40 +7,62 @@ expression: checks
location: location:
row: 1 row: 1
column: 11 column: 11
end_location:
row: 1
column: 14
fix: ~ fix: ~
- kind: - kind:
BuiltinArgumentShadowing: type BuiltinArgumentShadowing: type
location: location:
row: 1 row: 1
column: 19 column: 19
end_location:
row: 1
column: 23
fix: ~ fix: ~
- kind: - kind:
BuiltinArgumentShadowing: complex BuiltinArgumentShadowing: complex
location: location:
row: 1 row: 1
column: 26 column: 26
end_location:
row: 1
column: 33
fix: ~ fix: ~
- kind: - kind:
BuiltinArgumentShadowing: Exception BuiltinArgumentShadowing: Exception
location: location:
row: 1 row: 1
column: 35 column: 35
end_location:
row: 1
column: 44
fix: ~ fix: ~
- kind: - kind:
BuiltinArgumentShadowing: getattr BuiltinArgumentShadowing: getattr
location: location:
row: 1 row: 1
column: 48 column: 48
end_location:
row: 1
column: 55
fix: ~ fix: ~
- kind: - kind:
BuiltinArgumentShadowing: bytes BuiltinArgumentShadowing: bytes
location: location:
row: 5 row: 5
column: 17 column: 17
end_location:
row: 5
column: 22
fix: ~ fix: ~
- kind: - kind:
BuiltinArgumentShadowing: float BuiltinArgumentShadowing: float
location: location:
row: 9 row: 9
column: 16 column: 16
end_location:
row: 9
column: 21
fix: ~ fix: ~

View File

@ -1,6 +1,5 @@
--- ---
source: src/linter.rs source: src/linter.rs
assertion_line: 762
expression: checks expression: checks
--- ---
- kind: - kind:
@ -8,11 +7,17 @@ expression: checks
location: location:
row: 2 row: 2
column: 5 column: 5
end_location:
row: 2
column: 16
fix: ~ fix: ~
- kind: - kind:
BuiltinAttributeShadowing: str BuiltinAttributeShadowing: str
location: location:
row: 7 row: 7
column: 5 column: 5
end_location:
row: 9
column: 1
fix: ~ fix: ~

View File

@ -6,5 +6,8 @@ expression: checks
location: location:
row: 24 row: 24
column: 1 column: 1
end_location:
row: 24
column: 9
fix: ~ fix: ~

View File

@ -8,6 +8,9 @@ expression: checks
- 88 - 88
location: location:
row: 5 row: 5
column: 89 column: 1
end_location:
row: 5
column: 124
fix: ~ fix: ~

View File

@ -7,47 +7,71 @@ expression: checks
location: location:
row: 2 row: 2
column: 11 column: 11
end_location:
row: 2
column: 15
fix: ~ fix: ~
- kind: - kind:
NoneComparison: NotEq NoneComparison: NotEq
location: location:
row: 5 row: 5
column: 11 column: 11
end_location:
row: 5
column: 15
fix: ~ fix: ~
- kind: - kind:
NoneComparison: Eq NoneComparison: Eq
location: location:
row: 8 row: 8
column: 4 column: 4
end_location:
row: 8
column: 8
fix: ~ fix: ~
- kind: - kind:
NoneComparison: NotEq NoneComparison: NotEq
location: location:
row: 11 row: 11
column: 4 column: 4
end_location:
row: 11
column: 8
fix: ~ fix: ~
- kind: - kind:
NoneComparison: Eq NoneComparison: Eq
location: location:
row: 14 row: 14
column: 14 column: 14
end_location:
row: 14
column: 18
fix: ~ fix: ~
- kind: - kind:
NoneComparison: NotEq NoneComparison: NotEq
location: location:
row: 17 row: 17
column: 14 column: 14
end_location:
row: 17
column: 18
fix: ~ fix: ~
- kind: - kind:
NoneComparison: NotEq NoneComparison: NotEq
location: location:
row: 20 row: 20
column: 4 column: 4
end_location:
row: 20
column: 8
fix: ~ fix: ~
- kind: - kind:
NoneComparison: Eq NoneComparison: Eq
location: location:
row: 23 row: 23
column: 4 column: 4
end_location:
row: 23
column: 8
fix: ~ fix: ~

View File

@ -9,6 +9,9 @@ expression: checks
location: location:
row: 2 row: 2
column: 11 column: 11
end_location:
row: 2
column: 15
fix: ~ fix: ~
- kind: - kind:
TrueFalseComparison: TrueFalseComparison:
@ -17,6 +20,9 @@ expression: checks
location: location:
row: 5 row: 5
column: 11 column: 11
end_location:
row: 5
column: 16
fix: ~ fix: ~
- kind: - kind:
TrueFalseComparison: TrueFalseComparison:
@ -25,6 +31,9 @@ expression: checks
location: location:
row: 8 row: 8
column: 4 column: 4
end_location:
row: 8
column: 8
fix: ~ fix: ~
- kind: - kind:
TrueFalseComparison: TrueFalseComparison:
@ -33,6 +42,9 @@ expression: checks
location: location:
row: 11 row: 11
column: 4 column: 4
end_location:
row: 11
column: 9
fix: ~ fix: ~
- kind: - kind:
TrueFalseComparison: TrueFalseComparison:
@ -41,6 +53,9 @@ expression: checks
location: location:
row: 14 row: 14
column: 14 column: 14
end_location:
row: 14
column: 18
fix: ~ fix: ~
- kind: - kind:
TrueFalseComparison: TrueFalseComparison:
@ -49,6 +64,9 @@ expression: checks
location: location:
row: 17 row: 17
column: 14 column: 14
end_location:
row: 17
column: 19
fix: ~ fix: ~
- kind: - kind:
TrueFalseComparison: TrueFalseComparison:
@ -57,6 +75,9 @@ expression: checks
location: location:
row: 20 row: 20
column: 20 column: 20
end_location:
row: 20
column: 24
fix: ~ fix: ~
- kind: - kind:
TrueFalseComparison: TrueFalseComparison:
@ -65,6 +86,9 @@ expression: checks
location: location:
row: 20 row: 20
column: 44 column: 44
end_location:
row: 20
column: 49
fix: ~ fix: ~
- kind: - kind:
TrueFalseComparison: TrueFalseComparison:
@ -73,5 +97,8 @@ expression: checks
location: location:
row: 22 row: 22
column: 5 column: 5
end_location:
row: 22
column: 9
fix: ~ fix: ~

View File

@ -6,25 +6,40 @@ expression: checks
location: location:
row: 2 row: 2
column: 10 column: 10
end_location:
row: 2
column: 14
fix: ~ fix: ~
- kind: NotInTest - kind: NotInTest
location: location:
row: 5 row: 5
column: 12 column: 12
end_location:
row: 5
column: 16
fix: ~ fix: ~
- kind: NotInTest - kind: NotInTest
location: location:
row: 8 row: 8
column: 10 column: 10
end_location:
row: 8
column: 14
fix: ~ fix: ~
- kind: NotInTest - kind: NotInTest
location: location:
row: 11 row: 11
column: 25 column: 25
end_location:
row: 11
column: 29
fix: ~ fix: ~
- kind: NotInTest - kind: NotInTest
location: location:
row: 14 row: 14
column: 11 column: 11
end_location:
row: 14
column: 15
fix: ~ fix: ~

View File

@ -6,15 +6,24 @@ expression: checks
location: location:
row: 2 row: 2
column: 10 column: 10
end_location:
row: 2
column: 14
fix: ~ fix: ~
- kind: NotIsTest - kind: NotIsTest
location: location:
row: 5 row: 5
column: 12 column: 12
end_location:
row: 5
column: 16
fix: ~ fix: ~
- kind: NotIsTest - kind: NotIsTest
location: location:
row: 8 row: 8
column: 10 column: 10
end_location:
row: 8
column: 23
fix: ~ fix: ~

View File

@ -6,80 +6,128 @@ expression: checks
location: location:
row: 2 row: 2
column: 14 column: 14
end_location:
row: 2
column: 25
fix: ~ fix: ~
- kind: TypeComparison - kind: TypeComparison
location: location:
row: 5 row: 5
column: 14 column: 14
end_location:
row: 5
column: 25
fix: ~ fix: ~
- kind: TypeComparison - kind: TypeComparison
location: location:
row: 10 row: 10
column: 8 column: 8
end_location:
row: 10
column: 24
fix: ~ fix: ~
- kind: TypeComparison - kind: TypeComparison
location: location:
row: 15 row: 15
column: 14 column: 14
end_location:
row: 15
column: 35
fix: ~ fix: ~
- kind: TypeComparison - kind: TypeComparison
location: location:
row: 18 row: 18
column: 18 column: 18
end_location:
row: 18
column: 32
fix: ~ fix: ~
- kind: TypeComparison - kind: TypeComparison
location: location:
row: 18 row: 18
column: 46 column: 46
end_location:
row: 18
column: 59
fix: ~ fix: ~
- kind: TypeComparison - kind: TypeComparison
location: location:
row: 20 row: 20
column: 18 column: 18
end_location:
row: 20
column: 29
fix: ~ fix: ~
- kind: TypeComparison - kind: TypeComparison
location: location:
row: 22 row: 22
column: 18 column: 18
end_location:
row: 22
column: 29
fix: ~ fix: ~
- kind: TypeComparison - kind: TypeComparison
location: location:
row: 24 row: 24
column: 18 column: 18
end_location:
row: 24
column: 31
fix: ~ fix: ~
- kind: TypeComparison - kind: TypeComparison
location: location:
row: 26 row: 26
column: 18 column: 18
end_location:
row: 26
column: 30
fix: ~ fix: ~
- kind: TypeComparison - kind: TypeComparison
location: location:
row: 28 row: 28
column: 18 column: 18
end_location:
row: 28
column: 31
fix: ~ fix: ~
- kind: TypeComparison - kind: TypeComparison
location: location:
row: 30 row: 30
column: 18 column: 18
end_location:
row: 30
column: 31
fix: ~ fix: ~
- kind: TypeComparison - kind: TypeComparison
location: location:
row: 32 row: 32
column: 18 column: 18
end_location:
row: 32
column: 35
fix: ~ fix: ~
- kind: TypeComparison - kind: TypeComparison
location: location:
row: 34 row: 34
column: 18 column: 18
end_location:
row: 38
column: 2
fix: ~ fix: ~
- kind: TypeComparison - kind: TypeComparison
location: location:
row: 40 row: 40
column: 18 column: 18
end_location:
row: 40
column: 29
fix: ~ fix: ~
- kind: TypeComparison - kind: TypeComparison
location: location:
row: 42 row: 42
column: 18 column: 18
end_location:
row: 42
column: 31
fix: ~ fix: ~

View File

@ -6,15 +6,24 @@ expression: checks
location: location:
row: 4 row: 4
column: 1 column: 1
end_location:
row: 7
column: 1
fix: ~ fix: ~
- kind: DoNotUseBareExcept - kind: DoNotUseBareExcept
location: location:
row: 11 row: 11
column: 1 column: 1
end_location:
row: 14
column: 1
fix: ~ fix: ~
- kind: DoNotUseBareExcept - kind: DoNotUseBareExcept
location: location:
row: 16 row: 16
column: 1 column: 1
end_location:
row: 19
column: 1
fix: ~ fix: ~

View File

@ -6,25 +6,40 @@ expression: checks
location: location:
row: 2 row: 2
column: 1 column: 1
end_location:
row: 2
column: 20
fix: ~ fix: ~
- kind: DoNotAssignLambda - kind: DoNotAssignLambda
location: location:
row: 4 row: 4
column: 1 column: 1
end_location:
row: 4
column: 20
fix: ~ fix: ~
- kind: DoNotAssignLambda - kind: DoNotAssignLambda
location: location:
row: 7 row: 7
column: 5 column: 5
end_location:
row: 7
column: 30
fix: ~ fix: ~
- kind: DoNotAssignLambda - kind: DoNotAssignLambda
location: location:
row: 12 row: 12
column: 1 column: 1
end_location:
row: 12
column: 28
fix: ~ fix: ~
- kind: DoNotAssignLambda - kind: DoNotAssignLambda
location: location:
row: 16 row: 16
column: 1 column: 1
end_location:
row: 16
column: 26
fix: ~ fix: ~

View File

@ -7,149 +7,224 @@ expression: checks
location: location:
row: 3 row: 3
column: 1 column: 1
end_location:
row: 3
column: 2
fix: ~ fix: ~
- kind: - kind:
AmbiguousVariableName: I AmbiguousVariableName: I
location: location:
row: 4 row: 4
column: 1 column: 1
end_location:
row: 4
column: 2
fix: ~ fix: ~
- kind: - kind:
AmbiguousVariableName: O AmbiguousVariableName: O
location: location:
row: 5 row: 5
column: 1 column: 1
end_location:
row: 5
column: 2
fix: ~ fix: ~
- kind: - kind:
AmbiguousVariableName: l AmbiguousVariableName: l
location: location:
row: 6 row: 6
column: 1 column: 1
end_location:
row: 6
column: 2
fix: ~ fix: ~
- kind: - kind:
AmbiguousVariableName: l AmbiguousVariableName: l
location: location:
row: 8 row: 8
column: 4 column: 4
end_location:
row: 8
column: 5
fix: ~ fix: ~
- kind: - kind:
AmbiguousVariableName: l AmbiguousVariableName: l
location: location:
row: 9 row: 9
column: 5 column: 5
end_location:
row: 9
column: 6
fix: ~ fix: ~
- kind: - kind:
AmbiguousVariableName: l AmbiguousVariableName: l
location: location:
row: 10 row: 10
column: 5 column: 5
end_location:
row: 10
column: 6
fix: ~ fix: ~
- kind: - kind:
AmbiguousVariableName: l AmbiguousVariableName: l
location: location:
row: 11 row: 11
column: 5 column: 5
end_location:
row: 11
column: 6
fix: ~ fix: ~
- kind: - kind:
AmbiguousVariableName: l AmbiguousVariableName: l
location: location:
row: 16 row: 16
column: 5 column: 5
end_location:
row: 16
column: 6
fix: ~ fix: ~
- kind: - kind:
AmbiguousVariableName: l AmbiguousVariableName: l
location: location:
row: 20 row: 20
column: 8 column: 8
end_location:
row: 20
column: 9
fix: ~ fix: ~
- kind: - kind:
AmbiguousVariableName: l AmbiguousVariableName: l
location: location:
row: 25 row: 25
column: 5 column: 5
end_location:
row: 25
column: 13
fix: ~ fix: ~
- kind: - kind:
AmbiguousVariableName: l AmbiguousVariableName: l
location: location:
row: 26 row: 26
column: 5 column: 5
end_location:
row: 26
column: 6
fix: ~ fix: ~
- kind: - kind:
AmbiguousVariableName: l AmbiguousVariableName: l
location: location:
row: 30 row: 30
column: 5 column: 5
end_location:
row: 30
column: 6
fix: ~ fix: ~
- kind: - kind:
AmbiguousVariableName: l AmbiguousVariableName: l
location: location:
row: 33 row: 33
column: 9 column: 9
end_location:
row: 33
column: 19
fix: ~ fix: ~
- kind: - kind:
AmbiguousVariableName: l AmbiguousVariableName: l
location: location:
row: 34 row: 34
column: 9 column: 9
end_location:
row: 34
column: 10
fix: ~ fix: ~
- kind: - kind:
AmbiguousVariableName: l AmbiguousVariableName: l
location: location:
row: 40 row: 40
column: 8 column: 8
end_location:
row: 40
column: 9
fix: ~ fix: ~
- kind: - kind:
AmbiguousVariableName: I AmbiguousVariableName: I
location: location:
row: 40 row: 40
column: 14 column: 14
end_location:
row: 40
column: 15
fix: ~ fix: ~
- kind: - kind:
AmbiguousVariableName: l AmbiguousVariableName: l
location: location:
row: 44 row: 44
column: 8 column: 8
end_location:
row: 44
column: 9
fix: ~ fix: ~
- kind: - kind:
AmbiguousVariableName: I AmbiguousVariableName: I
location: location:
row: 44 row: 44
column: 16 column: 16
end_location:
row: 44
column: 17
fix: ~ fix: ~
- kind: - kind:
AmbiguousVariableName: l AmbiguousVariableName: l
location: location:
row: 48 row: 48
column: 9 column: 9
end_location:
row: 48
column: 10
fix: ~ fix: ~
- kind: - kind:
AmbiguousVariableName: I AmbiguousVariableName: I
location: location:
row: 48 row: 48
column: 14 column: 14
end_location:
row: 48
column: 15
fix: ~ fix: ~
- kind: - kind:
AmbiguousVariableName: l AmbiguousVariableName: l
location: location:
row: 57 row: 57
column: 16 column: 16
end_location:
row: 57
column: 17
fix: ~ fix: ~
- kind: - kind:
AmbiguousVariableName: l AmbiguousVariableName: l
location: location:
row: 66 row: 66
column: 20 column: 20
end_location:
row: 66
column: 21
fix: ~ fix: ~
- kind: - kind:
AmbiguousVariableName: l AmbiguousVariableName: l
location: location:
row: 71 row: 71
column: 1 column: 1
end_location:
row: 74
column: 1
fix: ~ fix: ~
- kind: - kind:
AmbiguousVariableName: l AmbiguousVariableName: l
location: location:
row: 74 row: 74
column: 5 column: 5
end_location:
row: 74
column: 11
fix: ~ fix: ~

View File

@ -7,17 +7,26 @@ expression: checks
location: location:
row: 1 row: 1
column: 1 column: 1
end_location:
row: 5
column: 1
fix: ~ fix: ~
- kind: - kind:
AmbiguousClassName: I AmbiguousClassName: I
location: location:
row: 5 row: 5
column: 1 column: 1
end_location:
row: 9
column: 1
fix: ~ fix: ~
- kind: - kind:
AmbiguousClassName: O AmbiguousClassName: O
location: location:
row: 9 row: 9
column: 1 column: 1
end_location:
row: 13
column: 1
fix: ~ fix: ~

View File

@ -7,17 +7,26 @@ expression: checks
location: location:
row: 1 row: 1
column: 1 column: 1
end_location:
row: 5
column: 1
fix: ~ fix: ~
- kind: - kind:
AmbiguousFunctionName: I AmbiguousFunctionName: I
location: location:
row: 5 row: 5
column: 1 column: 1
end_location:
row: 9
column: 1
fix: ~ fix: ~
- kind: - kind:
AmbiguousFunctionName: O AmbiguousFunctionName: O
location: location:
row: 10 row: 10
column: 5 column: 5
end_location:
row: 14
column: 1
fix: ~ fix: ~

View File

@ -7,5 +7,8 @@ expression: checks
location: location:
row: 2 row: 2
column: 1 column: 1
end_location:
row: 2
column: 1
fix: ~ fix: ~

View File

@ -7,17 +7,26 @@ expression: checks
location: location:
row: 3 row: 3
column: 1 column: 1
end_location:
row: 3
column: 17
fix: ~ fix: ~
- kind: - kind:
UnusedImport: collections.OrderedDict UnusedImport: collections.OrderedDict
location: location:
row: 5 row: 5
column: 1 column: 1
end_location:
row: 9
column: 2
fix: ~ fix: ~
- kind: - kind:
UnusedImport: logging.handlers UnusedImport: logging.handlers
location: location:
row: 13 row: 13
column: 1 column: 1
end_location:
row: 13
column: 24
fix: ~ fix: ~

View File

@ -9,6 +9,9 @@ expression: checks
location: location:
row: 5 row: 5
column: 5 column: 5
end_location:
row: 5
column: 7
fix: ~ fix: ~
- kind: - kind:
ImportShadowedByLoopVar: ImportShadowedByLoopVar:
@ -17,5 +20,8 @@ expression: checks
location: location:
row: 8 row: 8
column: 5 column: 5
end_location:
row: 8
column: 9
fix: ~ fix: ~

View File

@ -7,11 +7,17 @@ expression: checks
location: location:
row: 1 row: 1
column: 1 column: 1
end_location:
row: 1
column: 19
fix: ~ fix: ~
- kind: - kind:
ImportStarUsed: F634 ImportStarUsed: F634
location: location:
row: 2 row: 2
column: 1 column: 1
end_location:
row: 2
column: 19
fix: ~ fix: ~

View File

@ -6,5 +6,8 @@ expression: checks
location: location:
row: 7 row: 7
column: 1 column: 1
end_location:
row: 7
column: 38
fix: ~ fix: ~

View File

@ -9,6 +9,9 @@ expression: checks
location: location:
row: 5 row: 5
column: 11 column: 11
end_location:
row: 5
column: 15
fix: ~ fix: ~
- kind: - kind:
ImportStarUsage: ImportStarUsage:
@ -17,5 +20,8 @@ expression: checks
location: location:
row: 11 row: 11
column: 1 column: 1
end_location:
row: 11
column: 8
fix: ~ fix: ~

View File

@ -7,11 +7,17 @@ expression: checks
location: location:
row: 5 row: 5
column: 5 column: 5
end_location:
row: 5
column: 23
fix: ~ fix: ~
- kind: - kind:
ImportStarNotPermitted: F634 ImportStarNotPermitted: F634
location: location:
row: 9 row: 9
column: 5 column: 5
end_location:
row: 9
column: 23
fix: ~ fix: ~

View File

@ -7,5 +7,8 @@ expression: checks
location: location:
row: 2 row: 2
column: 1 column: 1
end_location:
row: 2
column: 44
fix: ~ fix: ~

View File

@ -6,15 +6,24 @@ expression: checks
location: location:
row: 4 row: 4
column: 7 column: 7
end_location:
row: 4
column: 11
fix: ~ fix: ~
- kind: FStringMissingPlaceholders - kind: FStringMissingPlaceholders
location: location:
row: 5 row: 5
column: 7 column: 7
end_location:
row: 5
column: 11
fix: ~ fix: ~
- kind: FStringMissingPlaceholders - kind: FStringMissingPlaceholders
location: location:
row: 7 row: 7
column: 7 column: 7
end_location:
row: 7
column: 11
fix: ~ fix: ~

View File

@ -6,15 +6,24 @@ expression: checks
location: location:
row: 3 row: 3
column: 6 column: 6
end_location:
row: 3
column: 8
fix: ~ fix: ~
- kind: MultiValueRepeatedKeyLiteral - kind: MultiValueRepeatedKeyLiteral
location: location:
row: 9 row: 9
column: 5 column: 5
end_location:
row: 9
column: 6
fix: ~ fix: ~
- kind: MultiValueRepeatedKeyLiteral - kind: MultiValueRepeatedKeyLiteral
location: location:
row: 11 row: 11
column: 7 column: 7
end_location:
row: 11
column: 11
fix: ~ fix: ~

View File

@ -7,5 +7,8 @@ expression: checks
location: location:
row: 5 row: 5
column: 5 column: 5
end_location:
row: 5
column: 6
fix: ~ fix: ~

View File

@ -6,5 +6,8 @@ expression: checks
location: location:
row: 1 row: 1
column: 1 column: 1
end_location:
row: 1
column: 10
fix: ~ fix: ~

View File

@ -6,10 +6,16 @@ expression: checks
location: location:
row: 1 row: 1
column: 1 column: 1
end_location:
row: 1
column: 20
fix: ~ fix: ~
- kind: AssertTuple - kind: AssertTuple
location: location:
row: 2 row: 2
column: 1 column: 1
end_location:
row: 2
column: 16
fix: ~ fix: ~

View File

@ -6,10 +6,16 @@ expression: checks
location: location:
row: 1 row: 1
column: 6 column: 6
end_location:
row: 1
column: 14
fix: ~ fix: ~
- kind: IsLiteral - kind: IsLiteral
location: location:
row: 4 row: 4
column: 8 column: 8
end_location:
row: 4
column: 16
fix: ~ fix: ~

View File

@ -6,5 +6,8 @@ expression: checks
location: location:
row: 4 row: 4
column: 1 column: 1
end_location:
row: 4
column: 6
fix: ~ fix: ~

View File

@ -6,10 +6,16 @@ expression: checks
location: location:
row: 1 row: 1
column: 1 column: 1
end_location:
row: 4
column: 1
fix: ~ fix: ~
- kind: IfTuple - kind: IfTuple
location: location:
row: 7 row: 7
column: 5 column: 5
end_location:
row: 9
column: 5
fix: ~ fix: ~

View File

@ -6,20 +6,32 @@ expression: checks
location: location:
row: 4 row: 4
column: 5 column: 5
end_location:
row: 4
column: 10
fix: ~ fix: ~
- kind: BreakOutsideLoop - kind: BreakOutsideLoop
location: location:
row: 16 row: 16
column: 5 column: 5
end_location:
row: 16
column: 10
fix: ~ fix: ~
- kind: BreakOutsideLoop - kind: BreakOutsideLoop
location: location:
row: 20 row: 20
column: 5 column: 5
end_location:
row: 20
column: 10
fix: ~ fix: ~
- kind: BreakOutsideLoop - kind: BreakOutsideLoop
location: location:
row: 23 row: 23
column: 1 column: 1
end_location:
row: 23
column: 6
fix: ~ fix: ~

View File

@ -6,20 +6,32 @@ expression: checks
location: location:
row: 4 row: 4
column: 5 column: 5
end_location:
row: 4
column: 13
fix: ~ fix: ~
- kind: ContinueOutsideLoop - kind: ContinueOutsideLoop
location: location:
row: 16 row: 16
column: 5 column: 5
end_location:
row: 16
column: 13
fix: ~ fix: ~
- kind: ContinueOutsideLoop - kind: ContinueOutsideLoop
location: location:
row: 20 row: 20
column: 5 column: 5
end_location:
row: 20
column: 13
fix: ~ fix: ~
- kind: ContinueOutsideLoop - kind: ContinueOutsideLoop
location: location:
row: 23 row: 23
column: 1 column: 1
end_location:
row: 23
column: 9
fix: ~ fix: ~

View File

@ -6,15 +6,24 @@ expression: checks
location: location:
row: 6 row: 6
column: 5 column: 5
end_location:
row: 6
column: 12
fix: ~ fix: ~
- kind: YieldOutsideFunction - kind: YieldOutsideFunction
location: location:
row: 9 row: 9
column: 1 column: 1
end_location:
row: 9
column: 8
fix: ~ fix: ~
- kind: YieldOutsideFunction - kind: YieldOutsideFunction
location: location:
row: 10 row: 10
column: 1 column: 1
end_location:
row: 10
column: 13
fix: ~ fix: ~

View File

@ -6,10 +6,16 @@ expression: checks
location: location:
row: 6 row: 6
column: 5 column: 5
end_location:
row: 6
column: 13
fix: ~ fix: ~
- kind: ReturnOutsideFunction - kind: ReturnOutsideFunction
location: location:
row: 9 row: 9
column: 1 column: 1
end_location:
row: 9
column: 9
fix: ~ fix: ~

View File

@ -6,15 +6,24 @@ expression: checks
location: location:
row: 3 row: 3
column: 1 column: 1
end_location:
row: 5
column: 1
fix: ~ fix: ~
- kind: DefaultExceptNotLast - kind: DefaultExceptNotLast
location: location:
row: 10 row: 10
column: 1 column: 1
end_location:
row: 12
column: 1
fix: ~ fix: ~
- kind: DefaultExceptNotLast - kind: DefaultExceptNotLast
location: location:
row: 19 row: 19
column: 1 column: 1
end_location:
row: 21
column: 1
fix: ~ fix: ~

View File

@ -7,5 +7,8 @@ expression: checks
location: location:
row: 9 row: 9
column: 13 column: 13
end_location:
row: 9
column: 17
fix: ~ fix: ~

View File

@ -7,47 +7,71 @@ expression: checks
location: location:
row: 2 row: 2
column: 12 column: 12
end_location:
row: 2
column: 16
fix: ~ fix: ~
- kind: - kind:
UndefinedName: self UndefinedName: self
location: location:
row: 6 row: 6
column: 13 column: 13
end_location:
row: 6
column: 17
fix: ~ fix: ~
- kind: - kind:
UndefinedName: self UndefinedName: self
location: location:
row: 10 row: 10
column: 9 column: 9
end_location:
row: 10
column: 13
fix: ~ fix: ~
- kind: - kind:
UndefinedName: numeric_string UndefinedName: numeric_string
location: location:
row: 21 row: 21
column: 12 column: 12
end_location:
row: 21
column: 26
fix: ~ fix: ~
- kind: - kind:
UndefinedName: Bar UndefinedName: Bar
location: location:
row: 58 row: 58
column: 5 column: 5
end_location:
row: 58
column: 9
fix: ~ fix: ~
- kind: - kind:
UndefinedName: TOMATO UndefinedName: TOMATO
location: location:
row: 83 row: 83
column: 11 column: 11
end_location:
row: 83
column: 17
fix: ~ fix: ~
- kind: - kind:
UndefinedName: B UndefinedName: B
location: location:
row: 87 row: 87
column: 7 column: 7
end_location:
row: 87
column: 11
fix: ~ fix: ~
- kind: - kind:
UndefinedName: B UndefinedName: B
location: location:
row: 89 row: 89
column: 7 column: 7
end_location:
row: 89
column: 9
fix: ~ fix: ~

View File

@ -7,5 +7,8 @@ expression: checks
location: location:
row: 3 row: 3
column: 1 column: 1
end_location:
row: 3
column: 8
fix: ~ fix: ~

View File

@ -7,5 +7,8 @@ expression: checks
location: location:
row: 6 row: 6
column: 5 column: 5
end_location:
row: 6
column: 11
fix: ~ fix: ~

View File

@ -6,15 +6,24 @@ expression: checks
location: location:
row: 1 row: 1
column: 25 column: 25
end_location:
row: 1
column: 31
fix: ~ fix: ~
- kind: DuplicateArgumentName - kind: DuplicateArgumentName
location: location:
row: 5 row: 5
column: 28 column: 28
end_location:
row: 5
column: 34
fix: ~ fix: ~
- kind: DuplicateArgumentName - kind: DuplicateArgumentName
location: location:
row: 9 row: 9
column: 27 column: 27
end_location:
row: 9
column: 33
fix: ~ fix: ~

View File

@ -7,29 +7,44 @@ expression: checks
location: location:
row: 3 row: 3
column: 1 column: 1
end_location:
row: 7
column: 1
fix: ~ fix: ~
- kind: - kind:
UnusedVariable: z UnusedVariable: z
location: location:
row: 16 row: 16
column: 5 column: 5
end_location:
row: 16
column: 6
fix: ~ fix: ~
- kind: - kind:
UnusedVariable: foo UnusedVariable: foo
location: location:
row: 20 row: 20
column: 5 column: 5
end_location:
row: 20
column: 8
fix: ~ fix: ~
- kind: - kind:
UnusedVariable: a UnusedVariable: a
location: location:
row: 21 row: 21
column: 6 column: 6
end_location:
row: 21
column: 7
fix: ~ fix: ~
- kind: - kind:
UnusedVariable: b UnusedVariable: b
location: location:
row: 21 row: 21
column: 9 column: 9
end_location:
row: 21
column: 10
fix: ~ fix: ~

View File

@ -7,41 +7,62 @@ expression: checks
location: location:
row: 3 row: 3
column: 1 column: 1
end_location:
row: 7
column: 1
fix: ~ fix: ~
- kind: - kind:
UnusedVariable: foo UnusedVariable: foo
location: location:
row: 20 row: 20
column: 5 column: 5
end_location:
row: 20
column: 8
fix: ~ fix: ~
- kind: - kind:
UnusedVariable: a UnusedVariable: a
location: location:
row: 21 row: 21
column: 6 column: 6
end_location:
row: 21
column: 7
fix: ~ fix: ~
- kind: - kind:
UnusedVariable: b UnusedVariable: b
location: location:
row: 21 row: 21
column: 9 column: 9
end_location:
row: 21
column: 10
fix: ~ fix: ~
- kind: - kind:
UnusedVariable: _ UnusedVariable: _
location: location:
row: 35 row: 35
column: 5 column: 5
end_location:
row: 35
column: 6
fix: ~ fix: ~
- kind: - kind:
UnusedVariable: __ UnusedVariable: __
location: location:
row: 36 row: 36
column: 5 column: 5
end_location:
row: 36
column: 7
fix: ~ fix: ~
- kind: - kind:
UnusedVariable: _discarded UnusedVariable: _discarded
location: location:
row: 37 row: 37
column: 5 column: 5
end_location:
row: 37
column: 15
fix: ~ fix: ~

View File

@ -6,10 +6,16 @@ expression: checks
location: location:
row: 2 row: 2
column: 11 column: 11
end_location:
row: 2
column: 27
fix: ~ fix: ~
- kind: RaiseNotImplemented - kind: RaiseNotImplemented
location: location:
row: 6 row: 6
column: 11 column: 11
end_location:
row: 6
column: 25
fix: ~ fix: ~

View File

@ -7,11 +7,17 @@ expression: checks
location: location:
row: 5 row: 5
column: 1 column: 1
end_location:
row: 5
column: 30
fix: ~ fix: ~
- kind: - kind:
UndefinedName: Bar UndefinedName: Bar
location: location:
row: 22 row: 22
column: 19 column: 19
end_location:
row: 22
column: 22
fix: ~ fix: ~

View File

@ -7,12 +7,15 @@ expression: checks
location: location:
row: 9 row: 9
column: 10 column: 10
end_location:
row: 9
column: 18
fix: fix:
content: "" content: ""
start: location:
row: 9 row: 9
column: 10 column: 10
end: end_location:
row: 9 row: 9
column: 18 column: 18
applied: false applied: false
@ -21,12 +24,15 @@ expression: checks
location: location:
row: 13 row: 13
column: 10 column: 10
end_location:
row: 13
column: 24
fix: fix:
content: "" content: ""
start: location:
row: 13 row: 13
column: 10 column: 10
end: end_location:
row: 13 row: 13
column: 24 column: 24
applied: false applied: false
@ -35,12 +41,15 @@ expression: checks
location: location:
row: 16 row: 16
column: 10 column: 10
end_location:
row: 16
column: 30
fix: fix:
content: " # noqa: F841" content: " # noqa: F841"
start: location:
row: 16 row: 16
column: 10 column: 10
end: end_location:
row: 16 row: 16
column: 30 column: 30
applied: false applied: false
@ -49,12 +58,15 @@ expression: checks
location: location:
row: 41 row: 41
column: 4 column: 4
end_location:
row: 41
column: 24
fix: fix:
content: " # noqa: E501" content: " # noqa: E501"
start: location:
row: 41 row: 41
column: 4 column: 4
end: end_location:
row: 41 row: 41
column: 24 column: 24
applied: false applied: false
@ -63,12 +75,15 @@ expression: checks
location: location:
row: 49 row: 49
column: 4 column: 4
end_location:
row: 49
column: 18
fix: fix:
content: "" content: ""
start: location:
row: 49 row: 49
column: 4 column: 4
end: end_location:
row: 49 row: 49
column: 18 column: 18
applied: false applied: false
@ -77,12 +92,15 @@ expression: checks
location: location:
row: 57 row: 57
column: 4 column: 4
end_location:
row: 57
column: 12
fix: fix:
content: "" content: ""
start: location:
row: 57 row: 57
column: 4 column: 4
end: end_location:
row: 57 row: 57
column: 12 column: 12
applied: false applied: false

View File

@ -7,12 +7,15 @@ expression: checks
location: location:
row: 5 row: 5
column: 9 column: 9
end_location:
row: 5
column: 15
fix: fix:
content: "" content: ""
start: location:
row: 5 row: 5
column: 8 column: 8
end: end_location:
row: 5 row: 5
column: 16 column: 16
applied: false applied: false
@ -21,12 +24,15 @@ expression: checks
location: location:
row: 10 row: 10
column: 5 column: 5
end_location:
row: 10
column: 11
fix: fix:
content: "" content: ""
start: location:
row: 9 row: 9
column: 8 column: 8
end: end_location:
row: 11 row: 11
column: 2 column: 2
applied: false applied: false
@ -35,12 +41,15 @@ expression: checks
location: location:
row: 16 row: 16
column: 5 column: 5
end_location:
row: 16
column: 11
fix: fix:
content: "" content: ""
start: location:
row: 15 row: 15
column: 8 column: 8
end: end_location:
row: 18 row: 18
column: 2 column: 2
applied: false applied: false
@ -49,12 +58,15 @@ expression: checks
location: location:
row: 24 row: 24
column: 5 column: 5
end_location:
row: 24
column: 11
fix: fix:
content: "" content: ""
start: location:
row: 22 row: 22
column: 8 column: 8
end: end_location:
row: 25 row: 25
column: 2 column: 2
applied: false applied: false
@ -63,12 +75,15 @@ expression: checks
location: location:
row: 31 row: 31
column: 5 column: 5
end_location:
row: 31
column: 11
fix: fix:
content: "" content: ""
start: location:
row: 29 row: 29
column: 8 column: 8
end: end_location:
row: 32 row: 32
column: 2 column: 2
applied: false applied: false
@ -77,12 +92,15 @@ expression: checks
location: location:
row: 37 row: 37
column: 5 column: 5
end_location:
row: 37
column: 11
fix: fix:
content: "" content: ""
start: location:
row: 36 row: 36
column: 8 column: 8
end: end_location:
row: 39 row: 39
column: 2 column: 2
applied: false applied: false
@ -91,12 +109,15 @@ expression: checks
location: location:
row: 45 row: 45
column: 5 column: 5
end_location:
row: 45
column: 11
fix: fix:
content: "" content: ""
start: location:
row: 43 row: 43
column: 8 column: 8
end: end_location:
row: 47 row: 47
column: 2 column: 2
applied: false applied: false
@ -105,12 +126,15 @@ expression: checks
location: location:
row: 53 row: 53
column: 5 column: 5
end_location:
row: 53
column: 11
fix: fix:
content: "" content: ""
start: location:
row: 51 row: 51
column: 8 column: 8
end: end_location:
row: 55 row: 55
column: 2 column: 2
applied: false applied: false
@ -119,12 +143,15 @@ expression: checks
location: location:
row: 61 row: 61
column: 5 column: 5
end_location:
row: 61
column: 11
fix: fix:
content: "" content: ""
start: location:
row: 59 row: 59
column: 8 column: 8
end: end_location:
row: 63 row: 63
column: 2 column: 2
applied: false applied: false
@ -133,12 +160,15 @@ expression: checks
location: location:
row: 69 row: 69
column: 5 column: 5
end_location:
row: 69
column: 11
fix: fix:
content: "" content: ""
start: location:
row: 67 row: 67
column: 8 column: 8
end: end_location:
row: 71 row: 71
column: 2 column: 2
applied: false applied: false
@ -147,12 +177,15 @@ expression: checks
location: location:
row: 75 row: 75
column: 12 column: 12
end_location:
row: 75
column: 18
fix: fix:
content: "" content: ""
start: location:
row: 75 row: 75
column: 10 column: 10
end: end_location:
row: 75 row: 75
column: 18 column: 18
applied: false applied: false
@ -161,12 +194,15 @@ expression: checks
location: location:
row: 79 row: 79
column: 9 column: 9
end_location:
row: 79
column: 15
fix: fix:
content: "" content: ""
start: location:
row: 79 row: 79
column: 9 column: 9
end: end_location:
row: 79 row: 79
column: 17 column: 17
applied: false applied: false
@ -175,12 +211,15 @@ expression: checks
location: location:
row: 84 row: 84
column: 5 column: 5
end_location:
row: 84
column: 11
fix: fix:
content: "" content: ""
start: location:
row: 84 row: 84
column: 5 column: 5
end: end_location:
row: 85 row: 85
column: 5 column: 5
applied: false applied: false
@ -189,12 +228,15 @@ expression: checks
location: location:
row: 92 row: 92
column: 5 column: 5
end_location:
row: 92
column: 11
fix: fix:
content: "" content: ""
start: location:
row: 91 row: 91
column: 6 column: 6
end: end_location:
row: 92 row: 92
column: 11 column: 11
applied: false applied: false
@ -203,12 +245,15 @@ expression: checks
location: location:
row: 98 row: 98
column: 5 column: 5
end_location:
row: 98
column: 11
fix: fix:
content: "" content: ""
start: location:
row: 98 row: 98
column: 5 column: 5
end: end_location:
row: 100 row: 100
column: 5 column: 5
applied: false applied: false
@ -217,12 +262,15 @@ expression: checks
location: location:
row: 108 row: 108
column: 5 column: 5
end_location:
row: 108
column: 11
fix: fix:
content: "" content: ""
start: location:
row: 107 row: 107
column: 6 column: 6
end: end_location:
row: 108 row: 108
column: 11 column: 11
applied: false applied: false
@ -231,12 +279,15 @@ expression: checks
location: location:
row: 114 row: 114
column: 13 column: 13
end_location:
row: 114
column: 19
fix: fix:
content: "" content: ""
start: location:
row: 114 row: 114
column: 12 column: 12
end: end_location:
row: 114 row: 114
column: 20 column: 20
applied: false applied: false
@ -245,12 +296,15 @@ expression: checks
location: location:
row: 119 row: 119
column: 5 column: 5
end_location:
row: 119
column: 11
fix: fix:
content: "" content: ""
start: location:
row: 118 row: 118
column: 8 column: 8
end: end_location:
row: 120 row: 120
column: 2 column: 2
applied: false applied: false
@ -259,12 +313,15 @@ expression: checks
location: location:
row: 125 row: 125
column: 5 column: 5
end_location:
row: 125
column: 11
fix: fix:
content: "" content: ""
start: location:
row: 124 row: 124
column: 8 column: 8
end: end_location:
row: 126 row: 126
column: 2 column: 2
applied: false applied: false
@ -273,12 +330,15 @@ expression: checks
location: location:
row: 131 row: 131
column: 5 column: 5
end_location:
row: 131
column: 11
fix: fix:
content: "" content: ""
start: location:
row: 130 row: 130
column: 8 column: 8
end: end_location:
row: 133 row: 133
column: 2 column: 2
applied: false applied: false

View File

@ -6,12 +6,15 @@ expression: checks
location: location:
row: 1 row: 1
column: 1 column: 1
end_location:
row: 1
column: 18
fix: fix:
content: assertEqual content: assertEqual
start: location:
row: 1 row: 1
column: 2 column: 2
end: end_location:
row: 1 row: 1
column: 14 column: 14
applied: false applied: false
@ -19,12 +22,15 @@ expression: checks
location: location:
row: 2 row: 2
column: 1 column: 1
end_location:
row: 2
column: 18
fix: fix:
content: assertEqual content: assertEqual
start: location:
row: 2 row: 2
column: 2 column: 2
end: end_location:
row: 2 row: 2
column: 14 column: 14
applied: false applied: false

View File

@ -6,14 +6,24 @@ expression: checks
location: location:
row: 17 row: 17
column: 18 column: 18
end_location:
row: 17
column: 23
fix: ~ fix: ~
- kind: SuperCallWithParameters - kind: SuperCallWithParameters
location: location:
row: 18 row: 18
column: 9 column: 9
end_location:
row: 18
column: 14
fix: ~ fix: ~
- kind: SuperCallWithParameters - kind: SuperCallWithParameters
location: location:
row: 19 row: 19
column: 9 column: 9
end_location:
row: 19
column: 14
fix: ~ fix: ~