@@ -386,7 +386,8 @@ def _get_ast_node_for_external_class(class_, external_class_nodes_map):
386386 #FIXME: This is not OK, we shouldn't use `__name__` as it can differ from
387387 # the name from `dir(module)`. We should use the latter instead.
388388 # If the name from `dir()` is not available, we need to find such name by
389- # comparing `id(class_)` with each `dir()` member (or use a {module: member ID} map?).
389+ # comparing `id(class_)` with each `dir()` member
390+ # (or use a {module: member ID} map?).
390391 class_element = Element (class_ , class_ .__name__ , inspect .getmodule (class_ ))
391392 class_node = get_ast_node_for_class (class_element )
392393 external_class_nodes_map [class_ ] = class_node
@@ -405,30 +406,25 @@ def _get_class_member_nodes(class_, class_node, member_nodes_for_classes):
405406
406407def _remove_redundant_class_member_node (
407408 class_member_node , class_node , parent_class_member_nodes ):
408- if isinstance (class_member_node , ast .FunctionDef ):
409- if _is_same_routine_node_in_nodes (
410- class_member_node ,
411- (node for node in parent_class_member_nodes
412- if isinstance (node , ast .FunctionDef ))):
413- _remove_ast_node (class_member_node , class_node )
414- elif isinstance (class_member_node , ast .Assign ):
415- if _is_same_assign_node_in_nodes (
416- class_member_node ,
417- (node for node in parent_class_member_nodes if isinstance (node , ast .Assign ))):
418- _remove_ast_node (class_member_node , class_node )
409+ for node_type , equality_function in [
410+ (ast .FunctionDef , _routine_nodes_equal ), (ast .Assign , _assign_nodes_equal )]:
411+ if isinstance (class_member_node , node_type ):
412+ _remove_node (
413+ class_member_node , class_node , parent_class_member_nodes , node_type ,
414+ equality_function )
415+ break
419416
420417
421- def _is_same_routine_node_in_nodes ( routine_node , routine_nodes ):
422- """
423- Return True if there is a routine node in `routine_nodes` with the same name,
424- signature and docstring as `routine_node`.
425- """
418+ def _remove_node (
419+ class_member_node , class_node , parent_class_member_nodes , node_type ,
420+ equality_function ):
421+ member_nodes_of_type = (
422+ node for node in parent_class_member_nodes if isinstance ( node , node_type ))
426423
427- for node in routine_nodes :
428- if _routine_nodes_equal (routine_node , node ):
429- return True
430-
431- return False
424+ for node in member_nodes_of_type :
425+ if equality_function (class_member_node , node ):
426+ _remove_ast_node (class_member_node , class_node )
427+ break
432428
433429
434430def _routine_nodes_equal (routine_node1 , routine_node2 ):
@@ -456,14 +452,6 @@ def _routine_docstrings_equal(routine_node1, routine_node2):
456452 return ast .get_docstring (routine_node1 ) == ast .get_docstring (routine_node2 )
457453
458454
459- def _is_same_assign_node_in_nodes (assign_node , assign_nodes ):
460- for node in assign_nodes :
461- if _assign_nodes_equal (assign_node , node ):
462- return True
463-
464- return False
465-
466-
467455def _assign_nodes_equal (assign_node1 , assign_node2 ):
468456 return (
469457 _assign_targets_equal (assign_node1 , assign_node2 )
0 commit comments