summaryrefslogtreecommitdiff
path: root/pylint/checkers/similar.py
diff options
context:
space:
mode:
authorMaksym Humetskyi <Humetsky@gmail.com>2021-08-17 21:54:44 +0300
committerGitHub <noreply@github.com>2021-08-17 20:54:44 +0200
commitef72cdc6f9b96ea680d6a9d0f37861f80d6bc3db (patch)
treea74dec167eccd9cf5b244a07cc685561e26ef500 /pylint/checkers/similar.py
parent676f484871a40bd0256e1cc68c28ea748a61acec (diff)
downloadpylint-git-ef72cdc6f9b96ea680d6a9d0f37861f80d6bc3db.tar.gz
[duplicate-code] Parse functions and class methods recursively when gathering signature lines (#4858)
* [duplicate-code] Parse functions and class methods recursively when gathering signature lines
Diffstat (limited to 'pylint/checkers/similar.py')
-rw-r--r--pylint/checkers/similar.py23
1 files changed, 18 insertions, 5 deletions
diff --git a/pylint/checkers/similar.py b/pylint/checkers/similar.py
index 762ae35b2..b44081924 100644
--- a/pylint/checkers/similar.py
+++ b/pylint/checkers/similar.py
@@ -64,6 +64,7 @@ from typing import (
)
import astroid
+from astroid.node_classes import NodeNG
from pylint.checkers import BaseChecker, MapReduceMixin, table_lines_from_stats
from pylint.interfaces import IRawChecker
@@ -586,11 +587,23 @@ def stripped_lines(
}
current_line_is_import = False
if ignore_signatures:
- functions = [
- n
- for n in tree.body
- if isinstance(n, (astroid.FunctionDef, astroid.AsyncFunctionDef))
- ]
+
+ def _get_functions(functions: List[NodeNG], tree: NodeNG) -> List[NodeNG]:
+ """Recursively get all functions including nested in the classes from the tree."""
+
+ for node in tree.body:
+ if isinstance(node, (astroid.FunctionDef, astroid.AsyncFunctionDef)):
+ functions.append(node)
+
+ if isinstance(
+ node,
+ (astroid.ClassDef, astroid.FunctionDef, astroid.AsyncFunctionDef),
+ ):
+ _get_functions(functions, node)
+
+ return functions
+
+ functions = _get_functions([], tree)
signature_lines = set(
chain(
*(