From 04ab22d4f7464af4586619adea981ae6332cab1b Mon Sep 17 00:00:00 2001 From: Daniel D'Avella Date: Tue, 29 Apr 2025 16:29:40 -0400 Subject: [PATCH 1/3] Findings for results are not optional --- src/codemodder/result.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/codemodder/result.py b/src/codemodder/result.py index ecc5a03e..0d3dbda9 100644 --- a/src/codemodder/result.py +++ b/src/codemodder/result.py @@ -84,7 +84,7 @@ class Result(ABCDataclass): locations: Sequence[Location] codeflows: Sequence[Sequence[Location]] = field(default_factory=tuple) related_locations: Sequence[LocationWithMessage] = field(default_factory=tuple) - finding: Finding | None = None + finding: Finding def match_location(self, pos: CodeRange, node: cst.CSTNode) -> bool: del node From bf46ba96afdc0068d7b2509f97ce217a3ad6baff Mon Sep 17 00:00:00 2001 From: Daniel D'Avella Date: Wed, 30 Apr 2025 09:32:26 -0400 Subject: [PATCH 2/3] Loosen restriction on packaging --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index aa522c5b..df5431e0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,7 +15,7 @@ dependencies = [ "GitPython<4", "isort>=5.12,<6.1", "libcst>=1.7,<1.8", - "packaging>=25,<25.1", + "packaging>=24.2,<25.1", # do not update pydantic due to inconsistent test failures "pydantic~=2.10.6", "pylint>=3.3,<3.4", From a5fb1c29f8fcc0622e063a43e784bd9c3f0882b8 Mon Sep 17 00:00:00 2001 From: Daniel D'Avella Date: Wed, 30 Apr 2025 09:35:43 -0400 Subject: [PATCH 3/3] Add method to retrieve locations --- src/codemodder/result.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/codemodder/result.py b/src/codemodder/result.py index 0d3dbda9..c221fa84 100644 --- a/src/codemodder/result.py +++ b/src/codemodder/result.py @@ -103,6 +103,13 @@ def match_location(self, pos: CodeRange, node: cst.CSTNode) -> bool: def __hash__(self): return hash(self.rule_id) + def get_locations(self) -> Sequence[Sequence[Location]]: + return self.codeflows or ( + [self.locations] + if self.locations + else [[loc.location for loc in self.related_locations]] + ) + @dataclass(frozen=True, kw_only=True) class SASTResult(Result):