Skip to content

Commit 1abbd74

Browse files
authored
Merge pull request #2358 from PSeitz/master
case insensitive FIXME and TODO
2 parents 3e29fe3 + 2e82ad8 commit 1abbd74

File tree

1 file changed

+50
-37
lines changed

1 file changed

+50
-37
lines changed

src/issues.rs

Lines changed: 50 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ use std::fmt;
1616

1717
pub use config::ReportTactic;
1818

19-
const TO_DO_CHARS: &[char] = &['T', 'O', 'D', 'O'];
20-
const FIX_ME_CHARS: &[char] = &['F', 'I', 'X', 'M', 'E'];
19+
const TO_DO_CHARS: &[char] = &['t', 'o', 'd', 'o'];
20+
const FIX_ME_CHARS: &[char] = &['f', 'i', 'x', 'm', 'e'];
2121

2222
// Enabled implementation detail is here because it is
2323
// irrelevant outside the issues module
@@ -127,44 +127,45 @@ impl BadIssueSeeker {
127127
}
128128

129129
fn inspect_issue(&mut self, c: char, mut todo_idx: usize, mut fixme_idx: usize) -> Seeking {
130-
// FIXME: Should we also check for lower case characters?
131-
if self.report_todo.is_enabled() && c == TO_DO_CHARS[todo_idx] {
132-
todo_idx += 1;
133-
if todo_idx == TO_DO_CHARS.len() {
134-
return Seeking::Number {
135-
issue: Issue {
136-
issue_type: IssueType::Todo,
137-
missing_number: if let ReportTactic::Unnumbered = self.report_todo {
138-
true
139-
} else {
140-
false
130+
if let Some(lower_case_c) = c.to_lowercase().next() {
131+
if self.report_todo.is_enabled() && lower_case_c == TO_DO_CHARS[todo_idx] {
132+
todo_idx += 1;
133+
if todo_idx == TO_DO_CHARS.len() {
134+
return Seeking::Number {
135+
issue: Issue {
136+
issue_type: IssueType::Todo,
137+
missing_number: if let ReportTactic::Unnumbered = self.report_todo {
138+
true
139+
} else {
140+
false
141+
},
141142
},
142-
},
143-
part: NumberPart::OpenParen,
144-
};
145-
}
146-
fixme_idx = 0;
147-
} else if self.report_fixme.is_enabled() && c == FIX_ME_CHARS[fixme_idx] {
148-
// Exploit the fact that the character sets of todo and fixme
149-
// are disjoint by adding else.
150-
fixme_idx += 1;
151-
if fixme_idx == FIX_ME_CHARS.len() {
152-
return Seeking::Number {
153-
issue: Issue {
154-
issue_type: IssueType::Fixme,
155-
missing_number: if let ReportTactic::Unnumbered = self.report_fixme {
156-
true
157-
} else {
158-
false
143+
part: NumberPart::OpenParen,
144+
};
145+
}
146+
fixme_idx = 0;
147+
} else if self.report_fixme.is_enabled() && lower_case_c == FIX_ME_CHARS[fixme_idx] {
148+
// Exploit the fact that the character sets of todo and fixme
149+
// are disjoint by adding else.
150+
fixme_idx += 1;
151+
if fixme_idx == FIX_ME_CHARS.len() {
152+
return Seeking::Number {
153+
issue: Issue {
154+
issue_type: IssueType::Fixme,
155+
missing_number: if let ReportTactic::Unnumbered = self.report_fixme {
156+
true
157+
} else {
158+
false
159+
},
159160
},
160-
},
161-
part: NumberPart::OpenParen,
162-
};
161+
part: NumberPart::OpenParen,
162+
};
163+
}
164+
todo_idx = 0;
165+
} else {
166+
todo_idx = 0;
167+
fixme_idx = 0;
163168
}
164-
todo_idx = 0;
165-
} else {
166-
todo_idx = 0;
167-
fixme_idx = 0;
168169
}
169170

170171
Seeking::Issue {
@@ -268,12 +269,24 @@ fn find_issue() {
268269
ReportTactic::Always,
269270
));
270271

272+
assert!(!is_bad_issue(
273+
"Todo: mixed case\n",
274+
ReportTactic::Never,
275+
ReportTactic::Always,
276+
));
277+
271278
assert!(is_bad_issue(
272279
"This is a FIXME(#1)\n",
273280
ReportTactic::Never,
274281
ReportTactic::Always,
275282
));
276283

284+
assert!(is_bad_issue(
285+
"This is a FixMe(#1) mixed case\n",
286+
ReportTactic::Never,
287+
ReportTactic::Always,
288+
));
289+
277290
assert!(!is_bad_issue(
278291
"bad FIXME\n",
279292
ReportTactic::Always,

0 commit comments

Comments
 (0)