Skip to content

Commit 20334a3

Browse files
committed
Error on duplicate message ids.
1 parent f5befd5 commit 20334a3

File tree

1 file changed

+20
-3
lines changed

1 file changed

+20
-3
lines changed

bin/Extract.re

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,21 @@ open Migrate_parsetree;
22

33
open Lib;
44

5-
let messages = ref([]);
5+
module StringMap = Map.Make(String);
66

7-
let iterator = ExtractionIterator.getIterator(message => (messages := [message, ...messages^]) |> ignore);
7+
let messages = ref(StringMap.empty);
8+
9+
let iterator =
10+
ExtractionIterator.getIterator(message => {
11+
let {Message.id} = message;
12+
if (messages^ |> StringMap.mem(id)) {
13+
Printf.eprintf("Error: duplicate message id: %s\n", id);
14+
exit(3);
15+
} else {
16+
messages := messages^ |> StringMap.add(id, message);
17+
();
18+
};
19+
});
820

921
let extractMessages = ast => iterator.structure(iterator, Obj.magic(ast));
1022

@@ -37,7 +49,12 @@ let rec processDirectory = dir =>
3749
});
3850

3951
let outputJson = () => {
40-
let sortedJsonObjects = messages^ |> List.sort(Message.compare) |> List.map(Message.toJson);
52+
let sortedJsonObjects =
53+
messages^
54+
|> StringMap.bindings
55+
|> List.map(((_id, message)) => message)
56+
|> List.sort(Message.compare)
57+
|> List.map(Message.toJson);
4158
Yojson.Basic.pretty_to_channel(stdout, `List(sortedJsonObjects));
4259
print_newline();
4360
};

0 commit comments

Comments
 (0)