11from __future__ import annotations
22
3+ import os
34import re
45from dataclasses import dataclass
56from importlib .metadata import entry_points
7+ from itertools import chain
68from typing import TYPE_CHECKING , Optional
79
810from codemodder .logging import logger
@@ -31,10 +33,12 @@ class CodemodCollection:
3133class CodemodRegistry :
3234 _codemods_by_name : dict [str , BaseCodemod ]
3335 _codemods_by_id : dict [str , BaseCodemod ]
36+ _default_include_paths : set [str ]
3437
3538 def __init__ (self ):
3639 self ._codemods_by_name = {}
3740 self ._codemods_by_id = {}
41+ self ._default_include_paths = set ()
3842
3943 @property
4044 def names (self ):
@@ -48,11 +52,23 @@ def ids(self):
4852 def codemods (self ):
4953 return list (self ._codemods_by_name .values ())
5054
55+ @property
56+ def default_include_paths (self ) -> list [str ]:
57+ return list (self ._default_include_paths )
58+
5159 def add_codemod_collection (self , collection : CodemodCollection ):
5260 for codemod in collection .codemods :
5361 wrapper = codemod () if isinstance (codemod , type ) else codemod
5462 self ._codemods_by_name [wrapper .name ] = wrapper
5563 self ._codemods_by_id [wrapper .id ] = wrapper
64+ self ._default_include_paths .update (
65+ chain (
66+ * [
67+ (f"*{ ext } " , os .path .join ("**" , f"*{ ext } " ))
68+ for ext in wrapper .default_extensions
69+ ]
70+ )
71+ )
5672
5773 def match_codemods (
5874 self ,
0 commit comments