Extract a class definition (including body) from source.
(self, class_name: str)
| 322 | ''' |
| 323 | |
| 324 | def _extract_class(self, class_name: str) -> Optional[str]: |
| 325 | """Extract a class definition (including body) from source.""" |
| 326 | lines = self.source_code.split("\n") |
| 327 | collecting = False |
| 328 | class_lines: List[str] = [] |
| 329 | |
| 330 | for line in lines: |
| 331 | if re.match(rf"^class\s+{class_name}\s*\(", line): |
| 332 | collecting = True |
| 333 | class_lines.append(line) |
| 334 | continue |
| 335 | if collecting: |
| 336 | # End of class: non-empty, non-indented, top-level construct |
| 337 | if line.strip() and not line[0].isspace() and not line.strip().startswith("#"): |
| 338 | if re.match(r"^(class |def |@)", line): |
| 339 | break |
| 340 | class_lines.append(line) |
| 341 | |
| 342 | if class_lines: |
| 343 | # Trim trailing blank lines |
| 344 | while class_lines and not class_lines[-1].strip(): |
| 345 | class_lines.pop() |
| 346 | return "\n".join(class_lines) |
| 347 | return None |
| 348 | |
| 349 | |
| 350 | # --------------------------------------------------------------------------- |
no outgoing calls
no test coverage detected