Skip to content

Commit 3727eec

Browse files
use fluent_syntax to parse fluent files
1 parent 1a3cdd3 commit 3727eec

File tree

1 file changed

+20
-19
lines changed

1 file changed

+20
-19
lines changed

src/tools/tidy/src/fluent_alphabetical.rs

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ use std::fs::OpenOptions;
55
use std::io::Write;
66
use std::path::Path;
77

8+
use fluent_syntax::ast::Entry;
9+
use fluent_syntax::parser;
810
use regex::Regex;
911

1012
use crate::diagnostics::{CheckId, DiagCtx, RunningCheck};
@@ -24,30 +26,29 @@ fn check_alphabetic(
2426
check: &mut RunningCheck,
2527
all_defined_msgs: &mut HashMap<String, String>,
2628
) {
27-
let mut matches = message().captures_iter(fluent).peekable();
28-
while let Some(m) = matches.next() {
29-
let name = m.get(1).unwrap();
30-
if let Some(defined_filename) = all_defined_msgs.get(name.as_str()) {
31-
check.error(format!(
32-
"{filename}: message `{}` is already defined in {defined_filename}",
33-
name.as_str(),
34-
));
35-
}
29+
let resource = parser::parse(fluent).expect("Errors encountered while parsing a resource.");
3630

37-
all_defined_msgs.insert(name.as_str().to_owned(), filename.to_owned());
31+
let mut prev: Option<&str> = None;
3832

39-
if let Some(next) = matches.peek() {
40-
let next = next.get(1).unwrap();
41-
if name.as_str() > next.as_str() {
33+
for entry in &resource.body {
34+
if let Entry::Message(msg) = entry {
35+
let name: &str = msg.id.name;
36+
if let Some(defined_filename) = all_defined_msgs.get(name) {
4237
check.error(format!(
43-
"{filename}: message `{}` appears before `{}`, but is alphabetically later than it
44-
run `./x.py test tidy --bless` to sort the file correctly",
45-
name.as_str(),
46-
next.as_str()
38+
"{filename}: message `{name}` is already defined in {defined_filename}",
39+
));
40+
} else {
41+
all_defined_msgs.insert(name.to_string(), filename.to_owned());
42+
}
43+
if let Some(prev) = prev
44+
&& prev > name
45+
{
46+
check.error(format!(
47+
"{filename}: message `{prev}` appears before `{name}`, but is alphabetically \
48+
later than it run `./x.py test tidy --bless` to sort the file correctly",
4749
));
4850
}
49-
} else {
50-
break;
51+
prev = Some(name);
5152
}
5253
}
5354
}

0 commit comments

Comments
 (0)