Skip to content

Commit c36cb17

Browse files
authored
generalize sarif loc code (#979)
1 parent 8d769d4 commit c36cb17

File tree

3 files changed

+27
-19
lines changed

3 files changed

+27
-19
lines changed

src/codemodder/codeql.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ def detect(cls, run_data: dict) -> bool:
1414

1515

1616
class CodeQLLocation(SarifLocation):
17+
@staticmethod
18+
def get_snippet(sarif_location) -> str:
19+
return ""
20+
1721
@classmethod
1822
def from_sarif(cls, sarif_location) -> Self:
1923
artifact_location = sarif_location["physicalLocation"]["artifactLocation"]

src/codemodder/result.py

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,28 @@ class Location(ABCDataclass):
3535

3636
@dataclass(frozen=True)
3737
class SarifLocation(Location):
38-
@classmethod
38+
@staticmethod
3939
@abstractmethod
40-
def from_sarif(cls, sarif_location) -> Self:
40+
def get_snippet(sarif_location) -> str:
4141
pass
4242

43+
@classmethod
44+
def from_sarif(cls, sarif_location) -> Self:
45+
artifact_location = sarif_location["physicalLocation"]["artifactLocation"]
46+
file = Path(artifact_location["uri"])
47+
snippet = cls.get_snippet(sarif_location)
48+
start = LineInfo(
49+
line=sarif_location["physicalLocation"]["region"]["startLine"],
50+
column=sarif_location["physicalLocation"]["region"]["startColumn"],
51+
snippet=snippet,
52+
)
53+
end = LineInfo(
54+
line=sarif_location["physicalLocation"]["region"]["endLine"],
55+
column=sarif_location["physicalLocation"]["region"]["endColumn"],
56+
snippet=snippet,
57+
)
58+
return cls(file=file, start=start, end=end)
59+
4360

4461
@dataclass(frozen=True)
4562
class LocationWithMessage:

src/codemodder/semgrep.py

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
from codemodder.context import CodemodExecutionContext
1111
from codemodder.logging import logger
12-
from codemodder.result import LineInfo, Result, ResultSet, SarifLocation, SarifResult
12+
from codemodder.result import Result, ResultSet, SarifLocation, SarifResult
1313
from codemodder.sarifs import AbstractSarifToolDetector
1414

1515

@@ -23,24 +23,11 @@ def detect(cls, run_data: dict) -> bool:
2323

2424

2525
class SemgrepLocation(SarifLocation):
26-
@classmethod
27-
def from_sarif(cls, sarif_location) -> Self:
28-
artifact_location = sarif_location["physicalLocation"]["artifactLocation"]
29-
file = Path(artifact_location["uri"])
30-
snippet = (
26+
@staticmethod
27+
def get_snippet(sarif_location) -> str:
28+
return (
3129
sarif_location["physicalLocation"]["region"].get("snippet", {}).get("text")
3230
)
33-
start = LineInfo(
34-
line=sarif_location["physicalLocation"]["region"]["startLine"],
35-
column=sarif_location["physicalLocation"]["region"]["startColumn"],
36-
snippet=snippet,
37-
)
38-
end = LineInfo(
39-
line=sarif_location["physicalLocation"]["region"]["endLine"],
40-
column=sarif_location["physicalLocation"]["region"]["endColumn"],
41-
snippet=snippet,
42-
)
43-
return cls(file=file, start=start, end=end)
4431

4532

4633
class SemgrepResult(SarifResult):

0 commit comments

Comments
 (0)