Skip to content

Commit f00d4c0

Browse files
authored
be able to get codemods by tool from registry (#920)
1 parent 2cf33fd commit f00d4c0

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

src/codemodder/registry.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import os
44
import re
5+
from collections import defaultdict
56
from dataclasses import dataclass
67
from importlib.metadata import EntryPoint, entry_points
78
from itertools import chain
@@ -36,6 +37,7 @@ class CodemodRegistry:
3637

3738
def __init__(self):
3839
self._codemods_by_id = {}
40+
self._codemods_by_tool = defaultdict(list)
3941
self._default_include_paths = set()
4042

4143
@property
@@ -50,6 +52,9 @@ def codemods(self):
5052
def default_include_paths(self) -> list[str]:
5153
return list(self._default_include_paths)
5254

55+
def codemods_by_tool(self, tool_name: str) -> list[BaseCodemod]:
56+
return self._codemods_by_tool.get(tool_name, [])
57+
5358
def add_codemod_collection(self, collection: CodemodCollection):
5459
for codemod in collection.codemods:
5560
wrapper = codemod() if isinstance(codemod, type) else codemod
@@ -59,6 +64,7 @@ def add_codemod_collection(self, collection: CodemodCollection):
5964
)
6065

6166
self._codemods_by_id[wrapper.id] = wrapper
67+
self._codemods_by_tool[collection.origin].append(wrapper)
6268
self._default_include_paths.update(
6369
chain(
6470
*[

tests/test_registry.py

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
from codemodder.registry import CodemodCollection, CodemodRegistry
1+
from codemodder.registry import (
2+
CodemodCollection,
3+
CodemodRegistry,
4+
load_registered_codemods,
5+
)
26

37

48
def test_default_extensions(mocker):
@@ -18,3 +22,24 @@ def test_default_extensions(mocker):
1822
"*.py",
1923
"*.txt",
2024
]
25+
26+
27+
def test_codemods_by_tool(mocker):
28+
registry = CodemodRegistry()
29+
assert not registry._codemods_by_tool
30+
31+
CodemodA = mocker.MagicMock()
32+
CodemodB = mocker.MagicMock()
33+
34+
registry.add_codemod_collection(
35+
CodemodCollection(origin="origin", codemods=[CodemodA, CodemodB])
36+
)
37+
38+
assert len(registry.codemods_by_tool("origin")) == 2
39+
40+
41+
def test_current_codemods_by_tool():
42+
codemod_registry = load_registered_codemods()
43+
assert len(codemod_registry.codemods_by_tool("sonar")) > 0
44+
assert len(codemod_registry.codemods_by_tool("semgrep")) > 0
45+
assert len(codemod_registry.codemods_by_tool("pixee")) > 0

0 commit comments

Comments
 (0)