MCPcopy Create free account
hub / github.com/pytest-dev/pytest / lex

Method lex

src/_pytest/mark/expression.py:79–108  ·  view source on GitHub ↗
(self, input: str)

Source from the content-addressed store, hash-verified

77 self.current = next(self.tokens)
78
79 def lex(self, input: str) -> Iterator[Token]:
80 pos = 0
81 while pos < len(input):
82 if input[pos] in (" ", "\t"):
83 pos += 1
84 elif input[pos] == "(":
85 yield Token(TokenType.LPAREN, "(", pos)
86 pos += 1
87 elif input[pos] == ")":
88 yield Token(TokenType.RPAREN, ")", pos)
89 pos += 1
90 else:
91 match = re.match(r"(:?\w|:|\+|-|\.|\[|\]|\\|/)+", input[pos:])
92 if match:
93 value = match.group(0)
94 if value == "or":
95 yield Token(TokenType.OR, value, pos)
96 elif value == "and":
97 yield Token(TokenType.AND, value, pos)
98 elif value == "not":
99 yield Token(TokenType.NOT, value, pos)
100 else:
101 yield Token(TokenType.IDENT, value, pos)
102 pos += len(value)
103 else:
104 raise ParseError(
105 pos + 1,
106 f'unexpected character "{input[pos]}"',
107 )
108 yield Token(TokenType.EOF, "", pos)
109
110 def accept(self, type: TokenType, *, reject: bool = False) -> Optional[Token]:
111 if self.current.type is type:

Callers 1

__init__Method · 0.95

Calls 3

TokenClass · 0.85
ParseErrorClass · 0.85
matchMethod · 0.80

Tested by

no test coverage detected