(expr: Expression)
| 297 | |
| 298 | |
| 299 | def contains_sys_version_info(expr: Expression) -> None | int | tuple[int | None, int | None]: |
| 300 | if is_sys_attr(expr, "version_info"): |
| 301 | return (None, None) # Same as sys.version_info[:] |
| 302 | if isinstance(expr, IndexExpr) and is_sys_attr(expr.base, "version_info"): |
| 303 | index = expr.index |
| 304 | if isinstance(index, IntExpr): |
| 305 | return index.value |
| 306 | if isinstance(index, SliceExpr): |
| 307 | if index.stride is not None: |
| 308 | if not isinstance(index.stride, IntExpr) or index.stride.value != 1: |
| 309 | return None |
| 310 | begin = end = None |
| 311 | if index.begin_index is not None: |
| 312 | if not isinstance(index.begin_index, IntExpr): |
| 313 | return None |
| 314 | begin = index.begin_index.value |
| 315 | if index.end_index is not None: |
| 316 | if not isinstance(index.end_index, IntExpr): |
| 317 | return None |
| 318 | end = index.end_index.value |
| 319 | return (begin, end) |
| 320 | return None |
| 321 | |
| 322 | |
| 323 | def is_sys_attr(expr: Expression, name: str) -> bool: |
no test coverage detected
searching dependent graphs…