Use case identifier section (benchmarks 43, 48).
(repo_dir, q, strictness)
| 1236 | |
| 1237 | |
| 1238 | def check_use_cases(repo_dir, q, strictness): |
| 1239 | """Use case identifier section (benchmarks 43, 48).""" |
| 1240 | print("[Use Cases]") |
| 1241 | req_md = q / "REQUIREMENTS.md" |
| 1242 | if not req_md.is_file(): |
| 1243 | fail("REQUIREMENTS.md missing") |
| 1244 | return |
| 1245 | |
| 1246 | try: |
| 1247 | req_content = req_md.read_text(encoding="utf-8", errors="replace") |
| 1248 | except OSError: |
| 1249 | req_content = "" |
| 1250 | |
| 1251 | # uc_ids: count of lines matching UC-N (bash grep -cE counts lines) |
| 1252 | uc_ids = sum(1 for ln in req_content.splitlines() |
| 1253 | if re.search(r"UC-[0-9]+", ln)) |
| 1254 | uc_unique = len(set(re.findall(r"UC-[0-9]+", req_content))) |
| 1255 | |
| 1256 | src_count = count_source_files(repo_dir) if repo_dir.is_dir() else 0 |
| 1257 | min_uc = 3 if src_count < 5 else 5 |
| 1258 | |
| 1259 | if uc_unique >= min_uc: |
| 1260 | pass_(f"Found {uc_unique} distinct UC identifiers ({uc_ids} total references, {src_count} source files)") |
| 1261 | elif uc_unique > 0: |
| 1262 | connector = "for" if strictness == "general" else "required for" |
| 1263 | msg = f"Only {uc_unique} distinct UC identifiers (minimum {min_uc} {connector} {src_count} source files)" |
| 1264 | if strictness == "general": |
| 1265 | warn(msg) |
| 1266 | else: |
| 1267 | fail(msg) |
| 1268 | else: |
| 1269 | fail("No canonical UC-NN identifiers in REQUIREMENTS.md") |
| 1270 | |
| 1271 | |
| 1272 | def check_test_file_extension(repo_dir, q): |
no test coverage detected