From afa2ff79ba5dc2449d5bcf42fbff1d335000cc6f Mon Sep 17 00:00:00 2001 From: Daniel D'Avella Date: Wed, 30 Apr 2025 17:15:53 -0400 Subject: [PATCH 1/3] Add optional values for CodeTFv3 types --- src/codemodder/codetf/v3/codetf.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/codemodder/codetf/v3/codetf.py b/src/codemodder/codetf/v3/codetf.py index 255b8cec..6c8a8e1f 100644 --- a/src/codemodder/codetf/v3/codetf.py +++ b/src/codemodder/codetf/v3/codetf.py @@ -41,14 +41,14 @@ class FixStatus(BaseModel): """Metadata describing fix outcome""" status: FixStatusType - reason: Optional[str] - details: Optional[str] + reason: Optional[str] = None + details: Optional[str] = None class ChangeSet(BaseModel): path: str diff: str - changes: list[Change] + changes: list[Change] = [] class Reference(BaseModel): @@ -88,7 +88,7 @@ class FixMetadata(BaseModel): summary: str # A detailed description of the fix description: str - references: list[Reference] + references: list[Reference] = [] generation: GenerationMetadata From 708f9725acb2285982cb4a1af92f4b311077d751 Mon Sep 17 00:00:00 2001 From: Daniel D'Avella Date: Wed, 30 Apr 2025 19:42:52 -0400 Subject: [PATCH 2/3] ChangeSets can also be optional when finding is not fixed --- src/codemodder/codetf/v3/codetf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/codemodder/codetf/v3/codetf.py b/src/codemodder/codetf/v3/codetf.py index 6c8a8e1f..2c0b0d3d 100644 --- a/src/codemodder/codetf/v3/codetf.py +++ b/src/codemodder/codetf/v3/codetf.py @@ -108,7 +108,7 @@ class FixResult(BaseModel): finding: Finding | V2Finding fixStatus: FixStatus - changeSets: list[ChangeSet] + changeSets: list[ChangeSet] = [] fixMetadata: Optional[FixMetadata] = None fixQuality: Optional[FixQuality] = None # A description of the reasoning process that led to the fix From b5196c8b5b9d398014c4322ab8adbb866cf07dad Mon Sep 17 00:00:00 2001 From: Daniel D'Avella Date: Wed, 30 Apr 2025 21:31:40 -0400 Subject: [PATCH 3/3] Move FixQuality and Rating to common codetf module --- src/codemodder/codetf/common.py | 11 +++++++++++ src/codemodder/codetf/v2/codetf.py | 12 +----------- src/codemodder/codetf/v3/codetf.py | 13 +------------ 3 files changed, 13 insertions(+), 23 deletions(-) diff --git a/src/codemodder/codetf/common.py b/src/codemodder/codetf/common.py index fa1086ec..7bfdee6d 100644 --- a/src/codemodder/codetf/common.py +++ b/src/codemodder/codetf/common.py @@ -84,3 +84,14 @@ def validate_description(self): if self.description is not None and not self.description: raise ValueError("description must not be empty") return self + + +class Rating(BaseModel): + score: int + description: Optional[str] = None + + +class FixQuality(BaseModel): + safetyRating: Rating + effectivenessRating: Rating + cleanlinessRating: Rating diff --git a/src/codemodder/codetf/v2/codetf.py b/src/codemodder/codetf/v2/codetf.py index c4920179..2528a747 100644 --- a/src/codemodder/codetf/v2/codetf.py +++ b/src/codemodder/codetf/v2/codetf.py @@ -21,6 +21,7 @@ from ..common import Change as CommonChange from ..common import ( CodeTFWriter, + FixQuality, Rule, ) @@ -104,17 +105,6 @@ class Strategy(Enum): deterministic = "deterministic" -class Rating(BaseModel): - score: int - description: Optional[str] = None - - -class FixQuality(BaseModel): - safetyRating: Rating - effectivenessRating: Rating - cleanlinessRating: Rating - - class ChangeSet(BaseModel): """A set of changes made to a file at `path`""" diff --git a/src/codemodder/codetf/v3/codetf.py b/src/codemodder/codetf/v3/codetf.py index 2c0b0d3d..dc5ccff1 100644 --- a/src/codemodder/codetf/v3/codetf.py +++ b/src/codemodder/codetf/v3/codetf.py @@ -5,7 +5,7 @@ from pydantic import BaseModel, model_validator -from ..common import Change, CodeTFWriter, Finding +from ..common import Change, CodeTFWriter, Finding, FixQuality from ..v2.codetf import Finding as V2Finding @@ -92,17 +92,6 @@ class FixMetadata(BaseModel): generation: GenerationMetadata -class Rating(BaseModel): - score: int - description: Optional[str] = None - - -class FixQuality(BaseModel): - safetyRating: Rating - effectivenessRating: Rating - cleanlinessRating: Rating - - class FixResult(BaseModel): """Result corresponding to a single finding"""