(self, node: nodes.Expr)
| 939 | return node |
| 940 | |
| 941 | def parse_test(self, node: nodes.Expr) -> nodes.Expr: |
| 942 | token = next(self.stream) |
| 943 | if self.stream.current.test("name:not"): |
| 944 | next(self.stream) |
| 945 | negated = True |
| 946 | else: |
| 947 | negated = False |
| 948 | name = self.stream.expect("name").value |
| 949 | while self.stream.current.type == "dot": |
| 950 | next(self.stream) |
| 951 | name += "." + self.stream.expect("name").value |
| 952 | dyn_args = dyn_kwargs = None |
| 953 | kwargs = [] |
| 954 | if self.stream.current.type == "lparen": |
| 955 | args, kwargs, dyn_args, dyn_kwargs = self.parse_call_args() |
| 956 | elif self.stream.current.type in { |
| 957 | "name", |
| 958 | "string", |
| 959 | "integer", |
| 960 | "float", |
| 961 | "lparen", |
| 962 | "lbracket", |
| 963 | "lbrace", |
| 964 | } and not self.stream.current.test_any("name:else", "name:or", "name:and"): |
| 965 | if self.stream.current.test("name:is"): |
| 966 | self.fail("You cannot chain multiple tests with is") |
| 967 | arg_node = self.parse_primary() |
| 968 | arg_node = self.parse_postfix(arg_node) |
| 969 | args = [arg_node] |
| 970 | else: |
| 971 | args = [] |
| 972 | node = nodes.Test( |
| 973 | node, name, args, kwargs, dyn_args, dyn_kwargs, lineno=token.lineno |
| 974 | ) |
| 975 | if negated: |
| 976 | node = nodes.Not(node, lineno=token.lineno) |
| 977 | return node |
| 978 | |
| 979 | def subparse( |
| 980 | self, end_tokens: t.Optional[t.Tuple[str, ...]] = None |
no test coverage detected