diff options
Diffstat (limited to 'src/lexer/comments.rs')
-rw-r--r-- | src/lexer/comments.rs | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/src/lexer/comments.rs b/src/lexer/comments.rs index b70f2c6c6..d1e958817 100644 --- a/src/lexer/comments.rs +++ b/src/lexer/comments.rs | |||
@@ -14,12 +14,35 @@ pub(crate) fn scan_shebang(ptr: &mut Ptr) -> bool { | |||
14 | } | 14 | } |
15 | } | 15 | } |
16 | 16 | ||
17 | fn scan_block_comment(ptr: &mut Ptr) -> Option<SyntaxKind> { | ||
18 | if ptr.next_is('*') { | ||
19 | ptr.bump(); | ||
20 | let mut depth: u32 = 1; | ||
21 | while depth > 0 { | ||
22 | if ptr.next_is('*') && ptr.nnext_is('/') { | ||
23 | depth -= 1; | ||
24 | ptr.bump(); | ||
25 | ptr.bump(); | ||
26 | } else if ptr.next_is('/') && ptr.nnext_is('*') { | ||
27 | depth += 1; | ||
28 | ptr.bump(); | ||
29 | ptr.bump(); | ||
30 | } else if ptr.bump().is_none() { | ||
31 | break; | ||
32 | } | ||
33 | } | ||
34 | Some(COMMENT) | ||
35 | } else { | ||
36 | None | ||
37 | } | ||
38 | } | ||
39 | |||
17 | pub(crate) fn scan_comment(ptr: &mut Ptr) -> Option<SyntaxKind> { | 40 | pub(crate) fn scan_comment(ptr: &mut Ptr) -> Option<SyntaxKind> { |
18 | if ptr.next_is('/') { | 41 | if ptr.next_is('/') { |
19 | bump_until_eol(ptr); | 42 | bump_until_eol(ptr); |
20 | Some(COMMENT) | 43 | Some(COMMENT) |
21 | } else { | 44 | } else { |
22 | None | 45 | scan_block_comment(ptr) |
23 | } | 46 | } |
24 | } | 47 | } |
25 | 48 | ||