diff options
author | Maksym Humetskyi <Humetsky@gmail.com> | 2021-08-17 21:54:44 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-08-17 20:54:44 +0200 |
commit | ef72cdc6f9b96ea680d6a9d0f37861f80d6bc3db (patch) | |
tree | a74dec167eccd9cf5b244a07cc685561e26ef500 /pylint/checkers/similar.py | |
parent | 676f484871a40bd0256e1cc68c28ea748a61acec (diff) | |
download | pylint-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.py | 23 |
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( *( |