File tree Expand file tree Collapse file tree 2 files changed +32
-1
lines changed
Expand file tree Collapse file tree 2 files changed +32
-1
lines changed Original file line number Diff line number Diff line change 22
33import os
44import re
5+ from collections import defaultdict
56from dataclasses import dataclass
67from importlib .metadata import EntryPoint , entry_points
78from 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 * [
Original file line number Diff line number Diff line change 1- from codemodder .registry import CodemodCollection , CodemodRegistry
1+ from codemodder .registry import (
2+ CodemodCollection ,
3+ CodemodRegistry ,
4+ load_registered_codemods ,
5+ )
26
37
48def 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
You can’t perform that action at this time.
0 commit comments