diff --git a/resources/test/fixtures/pylint/consider_merging_isinstance.py b/resources/test/fixtures/pylint/consider_merging_isinstance.py index d3387bd5ce..52b196999b 100644 --- a/resources/test/fixtures/pylint/consider_merging_isinstance.py +++ b/resources/test/fixtures/pylint/consider_merging_isinstance.py @@ -34,4 +34,5 @@ def isinstances(): result = isinstance(var[7], int) or not isinstance(var[7], float) result = isinstance(var[6], int) or isinstance(var[7], float) result = isinstance(var[6], int) or isinstance(var[7], int) + result = isinstance(var[6], (float, int)) or False return result diff --git a/src/pylint/plugins/consider_merging_isinstance.rs b/src/pylint/plugins/consider_merging_isinstance.rs index 30690dd03e..f1a476938f 100644 --- a/src/pylint/plugins/consider_merging_isinstance.rs +++ b/src/pylint/plugins/consider_merging_isinstance.rs @@ -18,29 +18,31 @@ pub fn consider_merging_isinstance( return; } - let mut obj_to_types: FxHashMap> = FxHashMap::default(); + let mut obj_to_types: FxHashMap)> = FxHashMap::default(); for value in values { if let ExprKind::Call { func, args, .. } = &value.node { if matches!(&func.node, ExprKind::Name { id, .. } if id == "isinstance") { if let [obj, types] = &args[..] { - obj_to_types + let (num_calls, matches) = obj_to_types .entry(obj.to_string()) - .or_insert_with(FxHashSet::default) - .extend(match &types.node { - ExprKind::Tuple { elts, .. } => { - elts.iter().map(std::string::ToString::to_string).collect() - } - _ => { - vec![types.to_string()] - } - }); + .or_insert_with(|| (0, FxHashSet::default())); + + *num_calls += 1; + matches.extend(match &types.node { + ExprKind::Tuple { elts, .. } => { + elts.iter().map(std::string::ToString::to_string).collect() + } + _ => { + vec![types.to_string()] + } + }); } } } } - for (obj, types) in obj_to_types { - if types.len() > 1 { + for (obj, (num_calls, types)) in obj_to_types { + if num_calls > 1 && types.len() > 1 { checker.add_check(Check::new( CheckKind::ConsiderMergingIsinstance(obj, types.into_iter().sorted().collect()), Range::from_located(expr),