|
4 | 4 | import os
|
5 | 5 | import subprocess
|
6 | 6 | from typing import Any, Dict, Union
|
| 7 | +from fnmatch import fnmatch |
| 8 | + |
| 9 | +EXCLUDE_LIKE: Dict[str, str] = { |
| 10 | + 'numpy': '*.tests.*', |
| 11 | +} |
7 | 12 |
|
8 | 13 |
|
9 | 14 | def create_output_directory(output_dir: str) -> None:
|
@@ -66,13 +71,23 @@ def run_pyright(venv_name: str, package: str, output_file: str) -> None:
|
66 | 71 | print(f"Output: {e.output}")
|
67 | 72 |
|
68 | 73 |
|
69 |
| -def parse_output_json(output_file: str) -> Dict[str, Union[int, float]]: |
| 74 | +def parse_output_json(output_file: str, exclude_like: str | None = None) -> Dict[str, Union[int, float]]: |
70 | 75 | try:
|
71 | 76 | with open(output_file, "r") as f:
|
72 | 77 | output_data = json.load(f)
|
73 | 78 | pyright_data: Dict[str, Union[int, float]] = {}
|
| 79 | + |
74 | 80 | symbol_count = output_data["typeCompleteness"]["exportedSymbolCounts"]
|
75 |
| - coverage: float = output_data["typeCompleteness"]["completenessScore"] * 100.0 |
| 81 | + if exclude_like is None: |
| 82 | + coverage: float = output_data["typeCompleteness"]["completenessScore"] * 100.0 |
| 83 | + else: |
| 84 | + matched_symbols = [ |
| 85 | + x for x in output_data["typeCompleteness"]["symbols"] if not fnmatch(x["name"], exclude_like) |
| 86 | + and x['isExported'] |
| 87 | + ] |
| 88 | + coverage = ( |
| 89 | + sum(x["isTypeKnown"] for x in matched_symbols) / len(matched_symbols) * 100 |
| 90 | + ) |
76 | 91 |
|
77 | 92 | pyright_data = symbol_count
|
78 | 93 | pyright_data["coverage"] = coverage
|
@@ -133,7 +148,7 @@ def main(packages: list[dict[str, Any]]) -> Dict[str, Any]:
|
133 | 148 |
|
134 | 149 | output_file = f"{output_dir}/{package}_output.json"
|
135 | 150 | run_pyright(venv_name, package, output_file)
|
136 |
| - pyright_data = parse_output_json(output_file) |
| 151 | + pyright_data = parse_output_json(output_file, EXCLUDE_LIKE.get(package, None)) |
137 | 152 |
|
138 | 153 | stats[package] = pyright_data
|
139 | 154 |
|
|
0 commit comments