Skip to content

Commit ee0045f

Browse files
topecongirowada314
authored andcommitted
Add InString field to FullCodeCharKind
1 parent 6ce5fd6 commit ee0045f

File tree

1 file changed

+29
-11
lines changed

1 file changed

+29
-11
lines changed

src/comment.rs

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -464,7 +464,7 @@ impl FindUncommented for str {
464464
return Some(i - pat.len());
465465
}
466466
Some(c) => match kind {
467-
FullCodeCharKind::Normal if b == c => {}
467+
FullCodeCharKind::Normal | FullCodeCharKind::InString if b == c => {}
468468
_ => {
469469
needle_iter = pat.chars();
470470
}
@@ -487,7 +487,7 @@ impl FindUncommented for str {
487487
pub fn find_comment_end(s: &str) -> Option<usize> {
488488
let mut iter = CharClasses::new(s.char_indices());
489489
for (kind, (i, _c)) in &mut iter {
490-
if kind == FullCodeCharKind::Normal {
490+
if kind == FullCodeCharKind::Normal || kind == FullCodeCharKind::InString {
491491
return Some(i);
492492
}
493493
}
@@ -568,15 +568,17 @@ enum FullCodeCharKind {
568568
InComment,
569569
/// Last character of a comment, '\n' for a line comment, '/' for a block comment.
570570
EndComment,
571+
/// Inside a string.
572+
InString,
571573
}
572574

573575
impl FullCodeCharKind {
574576
fn is_comment(&self) -> bool {
575577
match *self {
576-
FullCodeCharKind::Normal => false,
577578
FullCodeCharKind::StartComment |
578579
FullCodeCharKind::InComment |
579580
FullCodeCharKind::EndComment => true,
581+
_ => false,
580582
}
581583
}
582584

@@ -612,21 +614,34 @@ where
612614
fn next(&mut self) -> Option<(FullCodeCharKind, T::Item)> {
613615
let item = try_opt!(self.base.next());
614616
let chr = item.get_char();
617+
let mut char_kind = FullCodeCharKind::Normal;
615618
self.status = match self.status {
616619
CharClassesStatus::LitString => match chr {
617620
'"' => CharClassesStatus::Normal,
618-
'\\' => CharClassesStatus::LitStringEscape,
619-
_ => CharClassesStatus::LitString,
621+
'\\' => {
622+
char_kind = FullCodeCharKind::InString;
623+
CharClassesStatus::LitStringEscape
624+
}
625+
_ => {
626+
char_kind = FullCodeCharKind::InString;
627+
CharClassesStatus::LitString
628+
}
620629
},
621-
CharClassesStatus::LitStringEscape => CharClassesStatus::LitString,
630+
CharClassesStatus::LitStringEscape => {
631+
char_kind = FullCodeCharKind::InString;
632+
CharClassesStatus::LitString
633+
}
622634
CharClassesStatus::LitChar => match chr {
623635
'\\' => CharClassesStatus::LitCharEscape,
624636
'\'' => CharClassesStatus::Normal,
625637
_ => CharClassesStatus::LitChar,
626638
},
627639
CharClassesStatus::LitCharEscape => CharClassesStatus::LitChar,
628640
CharClassesStatus::Normal => match chr {
629-
'"' => CharClassesStatus::LitString,
641+
'"' => {
642+
char_kind = FullCodeCharKind::InString;
643+
CharClassesStatus::LitString
644+
}
630645
'\'' => CharClassesStatus::LitChar,
631646
'/' => match self.base.peek() {
632647
Some(next) if next.get_char() == '*' => {
@@ -680,7 +695,7 @@ where
680695
}
681696
},
682697
};
683-
Some((FullCodeCharKind::Normal, item))
698+
Some((char_kind, item))
684699
}
685700
}
686701

@@ -707,9 +722,12 @@ impl<'a> Iterator for UngroupedCommentCodeSlices<'a> {
707722
fn next(&mut self) -> Option<Self::Item> {
708723
let (kind, (start_idx, _)) = try_opt!(self.iter.next());
709724
match kind {
710-
FullCodeCharKind::Normal => {
725+
FullCodeCharKind::Normal | FullCodeCharKind::InString => {
711726
// Consume all the Normal code
712-
while let Some(&(FullCodeCharKind::Normal, (_, _))) = self.iter.peek() {
727+
while let Some(&(char_kind, _)) = self.iter.peek() {
728+
if char_kind.is_comment() {
729+
break;
730+
}
713731
let _ = self.iter.next();
714732
}
715733
}
@@ -1032,7 +1050,7 @@ mod test {
10321050
fn uncommented(text: &str) -> String {
10331051
CharClasses::new(text.chars())
10341052
.filter_map(|(s, c)| match s {
1035-
FullCodeCharKind::Normal => Some(c),
1053+
FullCodeCharKind::Normal | FullCodeCharKind::InString => Some(c),
10361054
_ => None,
10371055
})
10381056
.collect()

0 commit comments

Comments
 (0)