File tree 2 files changed +24
-1
lines changed
2 files changed +24
-1
lines changed Original file line number Diff line number Diff line change @@ -236,12 +236,17 @@ pub enum Base {
236
236
/// (e.g. "#![deny(missing_docs)]").
237
237
pub fn strip_shebang ( input : & str ) -> Option < usize > {
238
238
debug_assert ! ( !input. is_empty( ) ) ;
239
- if !input. starts_with ( "#!" ) || input. starts_with ( "#![" ) {
239
+ let s: & str = & remove_whitespace ( input) ;
240
+ if !s. starts_with ( "#!" ) || s. starts_with ( "#![" ) {
240
241
return None ;
241
242
}
242
243
Some ( input. find ( '\n' ) . unwrap_or ( input. len ( ) ) )
243
244
}
244
245
246
+ fn remove_whitespace ( s : & str ) -> String {
247
+ s. chars ( ) . filter ( |c| !c. is_whitespace ( ) ) . collect ( )
248
+ }
249
+
245
250
/// Parses the first token from the provided input string.
246
251
pub fn first_token ( input : & str ) -> Token {
247
252
debug_assert ! ( !input. is_empty( ) ) ;
Original file line number Diff line number Diff line change @@ -145,4 +145,22 @@ mod tests {
145
145
} ) ,
146
146
) ;
147
147
}
148
+
149
+ #[ test]
150
+ fn test_valid_shebang ( ) {
151
+ // https://github.com/rust-lang/rust/issues/70528
152
+ let input = "#!/usr/bin/rustrun" ;
153
+ let actual = strip_shebang ( input) ;
154
+ let expected: Option < usize > = Some ( 18 ) ;
155
+ assert_eq ! ( expected, actual) ;
156
+ }
157
+
158
+ #[ test]
159
+ fn test_invalid_shebang_valid_rust_syntax ( ) {
160
+ // https://github.com/rust-lang/rust/issues/70528
161
+ let input = "#! [bad_attribute]" ;
162
+ let actual = strip_shebang ( input) ;
163
+ let expected: Option < usize > = None ;
164
+ assert_eq ! ( expected, actual) ;
165
+ }
148
166
}
You can’t perform that action at this time.
0 commit comments