31 @type ast.Node |
31 @type ast.Node |
32 @yield call path components |
32 @yield call path components |
33 @ytype str |
33 @ytype str |
34 """ |
34 """ |
35 if isinstance(node, ast.Attribute): |
35 if isinstance(node, ast.Attribute): |
36 for v in composeCallPath(node.value): |
36 yield from composeCallPath(node.value) |
37 yield v |
|
38 yield node.attr |
37 yield node.attr |
39 elif isinstance(node, ast.Name): |
38 elif isinstance(node, ast.Name): |
40 yield node.id |
39 yield node.id |
41 |
40 |
42 |
41 |
450 break |
449 break |
451 |
450 |
452 if isinstance(node, ast.Module) or not hasCode: |
451 if isinstance(node, ast.Module) or not hasCode: |
453 return |
452 return |
454 |
453 |
455 if not (imports >= expectedImports): |
454 if imports < expectedImports: |
456 if imports: |
455 if imports: |
457 self.__error(node.lineno - 1, node.col_offset, "M701", |
456 self.__error(node.lineno - 1, node.col_offset, "M701", |
458 ", ".join(expectedImports), ", ".join(imports)) |
457 ", ".join(expectedImports), ", ".join(imports)) |
459 else: |
458 else: |
460 self.__error(node.lineno - 1, node.col_offset, "M702", |
459 self.__error(node.lineno - 1, node.col_offset, "M702", |