()
| 1738 | // '**' test | |
| 1739 | // '*' test ) |
| 1740 | private _parseArgument(): ArgumentNode { |
| 1741 | let firstToken = this._peekToken(); |
| 1742 | |
| 1743 | let argType = ArgumentCategory.Simple; |
| 1744 | if (this._consumeTokenIfOperator(OperatorType.Multiply)) { |
| 1745 | argType = ArgumentCategory.List; |
| 1746 | } else if (this._consumeTokenIfOperator(OperatorType.Power)) { |
| 1747 | argType = ArgumentCategory.Dictionary; |
| 1748 | } |
| 1749 | |
| 1750 | let valueExpr = this._parseTestExpression(); |
| 1751 | let nameIdentifier: IdentifierToken | undefined; |
| 1752 | |
| 1753 | if (argType === ArgumentCategory.Simple) { |
| 1754 | if (this._consumeTokenIfOperator(OperatorType.Assign)) { |
| 1755 | let nameExpr = valueExpr; |
| 1756 | valueExpr = this._parseTestExpression(); |
| 1757 | |
| 1758 | if (nameExpr instanceof NameNode) { |
| 1759 | nameIdentifier = nameExpr.nameToken; |
| 1760 | } else { |
| 1761 | this._addError('Expected parameter name', nameExpr); |
| 1762 | } |
| 1763 | } else { |
| 1764 | let listComp = this._tryParseListComprehension(valueExpr); |
| 1765 | if (listComp) { |
| 1766 | valueExpr = listComp; |
| 1767 | } |
| 1768 | } |
| 1769 | } |
| 1770 | |
| 1771 | let argNode = new ArgumentNode(firstToken, valueExpr, argType); |
| 1772 | if (nameIdentifier) { |
| 1773 | argNode.name = new NameNode(nameIdentifier); |
| 1774 | } |
| 1775 | |
| 1776 | return argNode; |
| 1777 | } |
| 1778 | |
| 1779 | // atom: ('(' [yield_expr | testlist_comp] ')' | |
| 1780 | // '[' [testlist_comp] ']' | |
no test coverage detected