"""A minimal hook for gathering line coverage of the standard library. Designed to be used with -Xpresite= which means: * it installs itself on import * it's not imported as `__main__` so can't use the ifmain idiom * it can't import anything besides `sys` to avoid tainting gathered coverage * filenames are not normalized To get gathered coverage back, look for 'test.cov' in `sys.modules` instead of importing directly. That way you can determine if the module was already in use. If you need to disable the hook, call the `disable()` function. """ import sys mon = sys.monitoring FileName = str LineNo = int Location = tuple[FileName, LineNo] coverage: set[Location] = set() # `types` and `typing` aren't imported to avoid invalid coverage def add_line( code: "types.CodeType", lineno: int, ) -> "typing.Literal[sys.monitoring.DISABLE]": coverage.add((code.co_filename, lineno)) return mon.DISABLE def enable(): mon.use_tool_id(mon.COVERAGE_ID, "regrtest coverage") mon.register_callback(mon.COVERAGE_ID, mon.events.LINE, add_line) mon.set_events(mon.COVERAGE_ID, mon.events.LINE) def disable(): mon.set_events(mon.COVERAGE_ID, 0) mon.register_callback(mon.COVERAGE_ID, mon.events.LINE, None) mon.free_tool_id(mon.COVERAGE_ID) enable()