Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 18 additions & 5 deletions src/becwright/engine.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import os
import re
import subprocess
from concurrent.futures import ThreadPoolExecutor
from dataclasses import dataclass
from functools import lru_cache
from pathlib import Path
Expand Down Expand Up @@ -93,7 +94,7 @@ def _run_check(rule: Rule, stdin: str, root: Path) -> RuleResult:


def evaluate(rules: list[Rule], files: list[str], root: Path) -> Result:
results: list[RuleResult] = []
tasks: list[tuple[Rule, str]] = []
for rule in rules:
if rule.target != "files":
continue
Expand All @@ -103,17 +104,29 @@ def evaluate(rules: list[Rule], files: list[str], root: Path) -> Result:
]
if not relevant:
continue
results.append(_run_check(rule, "\n".join(relevant), root))
tasks.append((rule, "\n".join(relevant)))

with ThreadPoolExecutor() as executor:
futures = [
executor.submit(_run_check, rule, stdin, root)
for rule, stdin in tasks
]
results = [f.result() for f in futures]
return Result(per_rule=results)


def evaluate_message(rules: list[Rule], message_path: str, root: Path) -> Result:
"""Run the `commit-msg` rules against the commit message. The message file
path is fed to each check on stdin, exactly like a source file, so the generic
`forbid` / `require` checks work on the message with no special casing."""
results = [
_run_check(rule, message_path, root)
for rule in rules
tasks = [
rule for rule in rules
if rule.target == "commit-msg"
]
with ThreadPoolExecutor() as executor:
futures = [
executor.submit(_run_check, rule, message_path, root)
for rule in tasks
]
results = [f.result() for f in futures]
return Result(per_rule=results)
Loading