aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lexer/comments.rs25
-rw-r--r--tests/data/lexer/00012_block_comment.rs4
-rw-r--r--tests/data/lexer/00012_block_comment.txt7
3 files changed, 35 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
17fn 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
17pub(crate) fn scan_comment(ptr: &mut Ptr) -> Option<SyntaxKind> { 40pub(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
diff --git a/tests/data/lexer/00012_block_comment.rs b/tests/data/lexer/00012_block_comment.rs
new file mode 100644
index 000000000..708aac197
--- /dev/null
+++ b/tests/data/lexer/00012_block_comment.rs
@@ -0,0 +1,4 @@
1/* */
2/**/
3/* /* */ */
4/*
diff --git a/tests/data/lexer/00012_block_comment.txt b/tests/data/lexer/00012_block_comment.txt
new file mode 100644
index 000000000..9958b2518
--- /dev/null
+++ b/tests/data/lexer/00012_block_comment.txt
@@ -0,0 +1,7 @@
1COMMENT 5 "/* */"
2WHITESPACE 1 "\n"
3COMMENT 4 "/**/"
4WHITESPACE 1 "\n"
5COMMENT 11 "/* /* */ */"
6WHITESPACE 1 "\n"
7COMMENT 3 "/*\n"