lexer: Tiny improvement to shebang detection
Lexer now discerns between regular comments and doc comments, so use that. The change only affects the choice of reported errors.
This commit is contained in:
parent
eb9e7c357e
commit
b1491eacfc
3 changed files with 14 additions and 13 deletions
|
@ -191,12 +191,16 @@ pub fn strip_shebang(input: &str) -> Option<usize> {
|
|||
// For simplicity we consider any line starting with `#!` a shebang,
|
||||
// regardless of restrictions put on shebangs by specific platforms.
|
||||
if let Some(input_tail) = input.strip_prefix("#!") {
|
||||
// Ok, this is a shebang but if the next non-whitespace token is `[` or maybe
|
||||
// a doc comment (due to `TokenKind::(Line,Block)Comment` ambiguity at lexer level),
|
||||
// Ok, this is a shebang but if the next non-whitespace token is `[`,
|
||||
// then it may be valid Rust code, so consider it Rust code.
|
||||
let next_non_whitespace_token = tokenize(input_tail).map(|tok| tok.kind).find(|tok|
|
||||
!matches!(tok, TokenKind::Whitespace | TokenKind::LineComment { .. } | TokenKind::BlockComment { .. })
|
||||
);
|
||||
let next_non_whitespace_token = tokenize(input_tail).map(|tok| tok.kind).find(|tok| {
|
||||
!matches!(
|
||||
tok,
|
||||
TokenKind::Whitespace
|
||||
| TokenKind::LineComment { doc_style: None }
|
||||
| TokenKind::BlockComment { doc_style: None, .. }
|
||||
)
|
||||
});
|
||||
if next_non_whitespace_token != Some(TokenKind::OpenBracket) {
|
||||
// No other choice than to consider this a shebang.
|
||||
return Some(2 + input_tail.lines().next().unwrap_or_default().len());
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue