| 1551 | self.traverse(node.annotation) |
| 1552 | |
| 1553 | def visit_arguments(self, node): |
| 1554 | first = True |
| 1555 | # normal arguments |
| 1556 | all_args = node.posonlyargs + node.args |
| 1557 | defaults = [None] * (len(all_args) - len(node.defaults)) + node.defaults |
| 1558 | for index, elements in enumerate(zip(all_args, defaults), 1): |
| 1559 | a, d = elements |
| 1560 | if first: |
| 1561 | first = False |
| 1562 | else: |
| 1563 | self.write(", ") |
| 1564 | self.traverse(a) |
| 1565 | if d: |
| 1566 | self.write("=") |
| 1567 | self.traverse(d) |
| 1568 | if index == len(node.posonlyargs): |
| 1569 | self.write(", /") |
| 1570 | |
| 1571 | # varargs, or bare '*' if no varargs but keyword-only arguments present |
| 1572 | if node.vararg or node.kwonlyargs: |
| 1573 | if first: |
| 1574 | first = False |
| 1575 | else: |
| 1576 | self.write(", ") |
| 1577 | self.write("*") |
| 1578 | if node.vararg: |
| 1579 | self.write(node.vararg.arg) |
| 1580 | if node.vararg.annotation: |
| 1581 | self.write(": ") |
| 1582 | self.traverse(node.vararg.annotation) |
| 1583 | |
| 1584 | # keyword-only arguments |
| 1585 | if node.kwonlyargs: |
| 1586 | for a, d in zip(node.kwonlyargs, node.kw_defaults): |
| 1587 | self.write(", ") |
| 1588 | self.traverse(a) |
| 1589 | if d: |
| 1590 | self.write("=") |
| 1591 | self.traverse(d) |
| 1592 | |
| 1593 | # kwargs |
| 1594 | if node.kwarg: |
| 1595 | if first: |
| 1596 | first = False |
| 1597 | else: |
| 1598 | self.write(", ") |
| 1599 | self.write("**" + node.kwarg.arg) |
| 1600 | if node.kwarg.annotation: |
| 1601 | self.write(": ") |
| 1602 | self.traverse(node.kwarg.annotation) |
| 1603 | |
| 1604 | def visit_keyword(self, node): |
| 1605 | if node.arg is None: |