Files
PromptCR-Lab/backend/app/dataset/rules/base.py
T
2026-09-19 12:54:45 +08:00

31 lines
747 B
Python

"""Base class for pluggable defect mutation rules."""
from abc import ABC, abstractmethod
from dataclasses import dataclass
from typing import List, Optional
@dataclass
class Mutation:
defect_type: str
language: str
line_start: int
line_end: int
mutated_source: str
reference_fix: str
description: str
class MutationRule(ABC):
name: str = ""
language: str = ""
defect_type: str = ""
@abstractmethod
def detect_and_mutate(self, source: str, filename: str = "") -> Optional[Mutation]:
"""Return a mutation if the rule can introduce a defect, else None."""
...
def _line_for_position(self, source: str, position: int) -> int:
return source[:position].count("\n") + 1