11use crate :: importer:: ImportRequest ;
22
3- use crate :: rules:: airflow:: helpers:: ProviderReplacement ;
3+ use crate :: rules:: airflow:: helpers:: { is_guarded_by_try_except , ProviderReplacement } ;
44use ruff_diagnostics:: { Diagnostic , Edit , Fix , FixAvailability , Violation } ;
55use ruff_macros:: { derive_message_formats, ViolationMetadata } ;
66use ruff_python_ast:: { Expr , ExprAttribute } ;
@@ -271,6 +271,19 @@ fn check_names_moved_to_provider(checker: &Checker, expr: &Expr, ranged: TextRan
271271 _ => return ,
272272 } ;
273273
274+ if let ProviderReplacement :: AutoImport {
275+ module,
276+ name,
277+ provider : _,
278+ version : _,
279+ } = replacement
280+ {
281+ let semantic = checker. semantic ( ) ;
282+ if is_guarded_by_try_except ( expr, module, name, semantic) {
283+ return ;
284+ }
285+ }
286+
274287 let mut diagnostic = Diagnostic :: new (
275288 Airflow3SuggestedToMoveToProvider {
276289 deprecated : qualified_name. to_string ( ) ,
@@ -279,22 +292,47 @@ fn check_names_moved_to_provider(checker: &Checker, expr: &Expr, ranged: TextRan
279292 ranged. range ( ) ,
280293 ) ;
281294
282- if let ProviderReplacement :: AutoImport {
283- module,
284- name,
285- provider : _,
286- version : _,
287- } = replacement
288- {
289- diagnostic. try_set_fix ( || {
290- let ( import_edit, binding) = checker. importer ( ) . get_or_import_symbol (
291- & ImportRequest :: import_from ( module, name) ,
292- expr. start ( ) ,
293- checker. semantic ( ) ,
294- ) ?;
295- let replacement_edit = Edit :: range_replacement ( binding, ranged. range ( ) ) ;
296- Ok ( Fix :: safe_edits ( import_edit, [ replacement_edit] ) )
297- } ) ;
295+ let semantic = checker. semantic ( ) ;
296+ match replacement {
297+ ProviderReplacement :: AutoImport {
298+ module,
299+ name,
300+ provider : _,
301+ version : _,
302+ } => {
303+ if is_guarded_by_try_except ( expr, module, name, semantic) {
304+ return ;
305+ }
306+ diagnostic. try_set_fix ( || {
307+ let ( import_edit, binding) = checker. importer ( ) . get_or_import_symbol (
308+ & ImportRequest :: import_from ( module, name) ,
309+ expr. start ( ) ,
310+ checker. semantic ( ) ,
311+ ) ?;
312+ let replacement_edit = Edit :: range_replacement ( binding, ranged. range ( ) ) ;
313+ Ok ( Fix :: safe_edits ( import_edit, [ replacement_edit] ) )
314+ } ) ;
315+ }
316+ ProviderReplacement :: SourceModuleMovedToProvider {
317+ module,
318+ name,
319+ provider : _,
320+ version : _,
321+ } => {
322+ if is_guarded_by_try_except ( expr, module, name. as_str ( ) , semantic) {
323+ return ;
324+ }
325+ diagnostic. try_set_fix ( || {
326+ let ( import_edit, binding) = checker. importer ( ) . get_or_import_symbol (
327+ & ImportRequest :: import_from ( module, name. as_str ( ) ) ,
328+ expr. start ( ) ,
329+ checker. semantic ( ) ,
330+ ) ?;
331+ let replacement_edit = Edit :: range_replacement ( binding, ranged. range ( ) ) ;
332+ Ok ( Fix :: safe_edits ( import_edit, [ replacement_edit] ) )
333+ } ) ;
334+ }
335+ _ => { }
298336 }
299337
300338 checker. report_diagnostic ( diagnostic) ;
0 commit comments