2323 "name" : "Run only selected transformers" ,
2424 "options" : ["--transform" ],
2525 },
26+ {
27+ "name" : "Load custom transformers" ,
28+ "options" : ["--load-transformers" ],
29+ },
2630 {
2731 "name" : "Work modes" ,
2832 "options" : ["--overwrite" , "--diff" , "--check" , "--force-order" ],
@@ -165,7 +169,8 @@ def print_transformer_docs(transformer):
165169
166170@decorators .optional_rich
167171def print_description (name : str , target_version : int ):
168- transformers = load_transformers (None , {}, allow_disabled = True , target_version = target_version )
172+ # TODO: --desc works only for default transformers, it should also print custom transformer desc
173+ transformers = load_transformers ([], [], {}, allow_disabled = True , target_version = target_version )
169174 transformer_by_names = {transformer .name : transformer for transformer in transformers }
170175 if name == "all" :
171176 for transformer in transformers :
@@ -182,6 +187,7 @@ def print_description(name: str, target_version: int):
182187
183188def _load_external_transformers (
184189 transformers : List ,
190+ custom_transformers : List [Tuple [str , List ]],
185191 transformers_from_config : List [Tuple [str , List ]],
186192 transformer_config : List [Tuple [str , List ]],
187193 target_version : int ,
@@ -190,7 +196,7 @@ def _load_external_transformers(
190196 transformers_names = {transformer .name for transformer in transformers }
191197 transformer_config_converted = Config .convert_configure (transformer_config )
192198 transformers_from_conf = load_transformers (
193- transformers_from_config , transformer_config_converted , target_version = target_version
199+ transformers_from_config , custom_transformers , transformer_config_converted , target_version = target_version
194200 )
195201 for transformer in transformers_from_conf :
196202 if transformer .name not in transformers_names :
@@ -201,6 +207,7 @@ def _load_external_transformers(
201207@decorators .optional_rich
202208def print_transformers_list (
203209 transformers_from_config : List [Tuple [str , List ]],
210+ custom_transformers : List [Tuple [str , List ]],
204211 transformer_config : List [Tuple [str , List ]],
205212 config : Config ,
206213 target_version : int ,
@@ -211,9 +218,11 @@ def print_transformers_list(
211218 table = Table (title = "Transformers" , header_style = "bold red" )
212219 table .add_column ("Name" , justify = "left" , no_wrap = True )
213220 table .add_column ("Enabled" )
214- transformers = load_transformers (None , {}, allow_disabled = True , target_version = target_version )
221+ transformers = load_transformers ([], [] , {}, allow_disabled = True , target_version = target_version )
215222 transformers .extend (
216- _load_external_transformers (transformers , transformers_from_config , transformer_config , target_version )
223+ _load_external_transformers (
224+ transformers , custom_transformers , transformers_from_config , transformer_config , target_version
225+ )
217226 )
218227
219228 for transformer in transformers :
@@ -248,7 +257,15 @@ def print_transformers_list(
248257 type = TransformType (),
249258 multiple = True ,
250259 metavar = "TRANSFORMER_NAME" ,
251- help = "Transform files from \[PATH(S)] with given transformer" ,
260+ help = "Transform files from [PATH(S)] with given transformer" ,
261+ )
262+ @click .option (
263+ "--load-transformers" ,
264+ "custom_transformers" ,
265+ type = TransformType (),
266+ multiple = True ,
267+ metavar = "TRANSFORMER_NAME" ,
268+ help = "Load custom transformer from the path and run them after default ones." ,
252269)
253270@click .option (
254271 "--configure" ,
@@ -474,6 +491,7 @@ def print_transformers_list(
474491def cli (
475492 ctx : click .Context ,
476493 transform : List [Tuple [str , List ]],
494+ custom_transformers : List [Tuple [str , List ]],
477495 configure : List [Tuple [str , List ]],
478496 src : Tuple [str , ...],
479497 exclude : Optional [Pattern ],
@@ -566,10 +584,13 @@ def cli(
566584 end_line = endline ,
567585 line_length = line_length ,
568586 )
587+ # array of some class, that holds info if it's forced, configure or custom
588+ # or just name:args TODO
569589 config = Config (
570590 formatting = formatting ,
571591 skip = skip_config ,
572592 transformers = transform ,
593+ custom_transformers = custom_transformers ,
573594 transformers_config = configure ,
574595 src = src ,
575596 exclude = exclude ,
@@ -588,7 +609,7 @@ def cli(
588609 )
589610
590611 if list_transformers :
591- print_transformers_list (transform , configure , config , target_version , list_transformers )
612+ print_transformers_list (transform , custom_transformers , configure , config , target_version , list_transformers )
592613 sys .exit (0 )
593614 if desc is not None :
594615 return_code = print_description (desc , target_version )
0 commit comments