1
+ use anyhow:: Context ;
2
+
1
3
use ruff_diagnostics:: { Diagnostic , Edit , Fix , FixAvailability , Violation } ;
2
4
use ruff_macros:: { derive_message_formats, violation} ;
3
5
use ruff_python_ast:: helpers:: map_subscript;
@@ -97,27 +99,27 @@ pub(crate) fn generic_not_last_base_class(checker: &mut Checker, class_def: &Stm
97
99
98
100
// No fix if multiple generics are seen in the class bases.
99
101
if generic_base_iter. next ( ) . is_none ( ) {
100
- diagnostic. set_fix ( generate_fix ( generic_base, last_base, checker. locator ( ) ) ) ;
102
+ diagnostic. try_set_fix ( || generate_fix ( generic_base, last_base, checker. locator ( ) ) ) ;
101
103
}
102
104
103
105
checker. diagnostics . push ( diagnostic) ;
104
106
}
105
107
106
- fn generate_fix ( generic_base : & Expr , last_base : & Expr , locator : & Locator ) -> Fix {
108
+ fn generate_fix ( generic_base : & Expr , last_base : & Expr , locator : & Locator ) -> anyhow :: Result < Fix > {
107
109
let comma_after_generic_base = generic_base. end ( ) . to_usize ( )
108
110
+ locator
109
111
. after ( generic_base. end ( ) )
110
112
. find ( ',' )
111
- . expect ( "Comma must always exist after generic base" ) ;
113
+ . context ( "Comma must always exist after generic base" ) ? ;
112
114
113
115
let last_whitespace = ( comma_after_generic_base + 1 )
114
116
+ locator. contents ( ) [ comma_after_generic_base + 1 ..]
115
117
. bytes ( )
116
118
. position ( |b| !b. is_ascii_whitespace ( ) )
117
- . expect ( "Non whitespace character must always exist after Generic[]" ) ;
119
+ . context ( "Non whitespace character must always exist after Generic[]" ) ? ;
118
120
119
- let comma_after_generic_base: u32 = comma_after_generic_base. try_into ( ) . unwrap ( ) ;
120
- let last_whitespace: u32 = last_whitespace. try_into ( ) . unwrap ( ) ;
121
+ let comma_after_generic_base: u32 = comma_after_generic_base. try_into ( ) ? ;
122
+ let last_whitespace: u32 = last_whitespace. try_into ( ) ? ;
121
123
122
124
let base_deletion = Edit :: deletion ( generic_base. start ( ) , generic_base. end ( ) ) ;
123
125
let base_comma_deletion =
@@ -126,5 +128,8 @@ fn generate_fix(generic_base: &Expr, last_base: &Expr, locator: &Locator) -> Fix
126
128
format ! ( ", {}" , locator. slice( generic_base. range( ) ) ) ,
127
129
last_base. end ( ) ,
128
130
) ;
129
- Fix :: safe_edits ( insertion, [ base_deletion, base_comma_deletion] )
131
+ Ok ( Fix :: safe_edits (
132
+ insertion,
133
+ [ base_deletion, base_comma_deletion] ,
134
+ ) )
130
135
}
0 commit comments