Skip to content

Commit 4790704

Browse files
committed
Refactoring
1 parent 1400289 commit 4790704

File tree

1 file changed

+18
-30
lines changed

1 file changed

+18
-30
lines changed

pypredefgen.py

Lines changed: 18 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -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

406407
def _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

434430
def _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-
467455
def _assign_nodes_equal(assign_node1, assign_node2):
468456
return (
469457
_assign_targets_equal(assign_node1, assign_node2)

0 commit comments

Comments
 (0)