File tree Expand file tree Collapse file tree 2 files changed +24
-1
lines changed Expand file tree Collapse file tree 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