|
11 | 11 | from libcst._position import CodeRange |
12 | 12 | from typing_extensions import Self |
13 | 13 |
|
14 | | -from codemodder.codetf import Finding, Rule |
| 14 | +from codemodder.codetf import Finding |
| 15 | +from codemodder.codetf import Rule as CodetfRule |
15 | 16 |
|
16 | 17 | from .utils.abc_dataclass import ABCDataclass |
17 | 18 |
|
@@ -176,18 +177,33 @@ def fuzzy_column_match(pos: CodeRange, location: Location) -> bool: |
176 | 177 | ) |
177 | 178 |
|
178 | 179 |
|
179 | | -class ResultSet(dict[str, dict[Path, list[Result]]]): |
180 | | - results_for_rule: dict[str, list[Result]] |
| 180 | +class Rule(CodetfRule): |
| 181 | + short_description: str = "" |
| 182 | + full_description: str = "" |
| 183 | + help: str = "" |
| 184 | + |
181 | 185 |
|
182 | | - def __init__(self, *args, **kwargs): |
183 | | - super().__init__(*args, **kwargs) |
184 | | - self.results_for_rule = {} |
| 186 | +class ResultSet(dict[str, dict[Path, list[Result]]]): |
| 187 | + results_for_rule: dict[str, list[Result]] = {} |
| 188 | + metadata_for_rule: dict[str, list[Rule]] = {} |
185 | 189 |
|
186 | 190 | def add_result(self, result: Result): |
187 | 191 | self.results_for_rule.setdefault(result.rule_id, []).append(result) |
188 | 192 | for loc in result.locations: |
189 | 193 | self.setdefault(result.rule_id, {}).setdefault(loc.file, []).append(result) |
190 | 194 |
|
| 195 | + def add_rule_metadata(self, rule_data: dict): |
| 196 | + if (rule_id := rule_data["id"]) not in self.metadata_for_rule: |
| 197 | + rule = Rule( |
| 198 | + id=rule_id, |
| 199 | + name=rule_data["name"], |
| 200 | + short_description=rule_data.get("shortDescription", {}).get("text", ""), |
| 201 | + full_description=rule_data.get("fullDescription", {}).get("text", ""), |
| 202 | + help=rule_data.get("help", {}).get("text", "") |
| 203 | + or rule_data.get("help", {}).get("markdown", ""), |
| 204 | + ) |
| 205 | + self.metadata_for_rule[rule_id] = rule |
| 206 | + |
191 | 207 | def results_for_rule_and_file( |
192 | 208 | self, context: CodemodExecutionContext, rule_id: str, file: Path |
193 | 209 | ) -> list[Result]: |
|
0 commit comments