(filenames: list[str])
| 40 | |
| 41 | |
| 42 | def parse_files(filenames: list[str]) -> list[AstNode]: |
| 43 | result: list[AstNode] = [] |
| 44 | for filename in filenames: |
| 45 | with open(filename) as file: |
| 46 | src = file.read() |
| 47 | |
| 48 | psr = Parser(src, filename=prettify_filename(filename)) |
| 49 | |
| 50 | # Skip until begin marker |
| 51 | while tkn := psr.next(raw=True): |
| 52 | if tkn.text == BEGIN_MARKER: |
| 53 | break |
| 54 | else: |
| 55 | raise psr.make_syntax_error( |
| 56 | f"Couldn't find {BEGIN_MARKER!r} in {psr.filename}" |
| 57 | ) |
| 58 | start = psr.getpos() |
| 59 | |
| 60 | # Find end marker, then delete everything after it |
| 61 | while tkn := psr.next(raw=True): |
| 62 | if tkn.text == END_MARKER: |
| 63 | break |
| 64 | del psr.tokens[psr.getpos() - 1 :] |
| 65 | |
| 66 | # Parse from start |
| 67 | psr.setpos(start) |
| 68 | thing_first_token = psr.peek() |
| 69 | while node := psr.definition(): |
| 70 | assert node is not None |
| 71 | result.append(node) # type: ignore[arg-type] |
| 72 | if not psr.eof(): |
| 73 | pprint.pprint(result) |
| 74 | psr.backup() |
| 75 | raise psr.make_syntax_error( |
| 76 | f"Extra stuff at the end of {filename}", psr.next(True) |
| 77 | ) |
| 78 | return result |
nothing calls this directly
no test coverage detected
searching dependent graphs…