Skip to content

Commit b901716

Browse files
authored
Merge pull request #22 from alexfedoseev/allow-dup-ids
Add --allow-duplicates flag
2 parents 0dd25ee + 5c44637 commit b901716

File tree

5 files changed

+56
-8
lines changed

5 files changed

+56
-8
lines changed

bin/Extract.re

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,21 @@ module StringMap = Map.Make(String);
44

55
let messages = ref(StringMap.empty);
66

7+
let duplicatesAreAllowed = ref(false);
8+
79
let iterator =
810
ExtractionIterator.getIterator(message => {
9-
let {Message.id} = message;
10-
if (messages^ |> StringMap.mem(id)) {
11+
let {Message.id, defaultMessage} = message;
12+
switch (messages^ |> StringMap.find_opt(id)) {
13+
| None => messages := messages^ |> StringMap.add(id, message)
14+
| Some(existingMessage) when duplicatesAreAllowed^ && defaultMessage == existingMessage.defaultMessage =>
15+
messages := messages^ |> StringMap.add(id, message)
16+
| Some(existingMessage) when duplicatesAreAllowed^ && defaultMessage != existingMessage.defaultMessage =>
17+
Printf.eprintf("Error: duplicate message id: %s with different default messages\n", id);
18+
exit(3);
19+
| Some(_) =>
1120
Printf.eprintf("Error: duplicate message id: %s\n", id);
1221
exit(3);
13-
} else {
14-
messages := messages^ |> StringMap.add(id, message);
15-
();
1622
};
1723
});
1824

@@ -27,7 +33,7 @@ let processReasonFile = path => {
2733
};
2834

2935
let rec processPath = path => {
30-
if (!Sys.file_exists(path)) {
36+
if (! Sys.file_exists(path)) {
3137
Printf.eprintf("Error: file or directory does not exist: %s\n", path);
3238
exit(1);
3339
};
@@ -60,7 +66,16 @@ let showVersion = () => {
6066
exit(0);
6167
};
6268

63-
let args = [("-v", Arg.Unit(showVersion), "shows the program version")];
69+
let allowDuplicates = () => duplicatesAreAllowed := true;
70+
71+
let args = [
72+
("-v", Arg.Unit(showVersion), "shows the program version"),
73+
(
74+
"--allow-duplicates",
75+
Arg.Unit(allowDuplicates),
76+
"allows entities with identical `id` props if `defaultMessage` props are identical as well",
77+
),
78+
];
6479

6580
let usage = "Usage: " ++ Sys.argv[0] ++ " [path...]";
6681

test/Test.re

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ module Usage = {
99
++ CmdLine.pathToExtractExe
1010
++ " [path...]
1111
-v shows the program version
12+
--allow-duplicates allows entities with identical `id` props if `defaultMessage` props are identical as well
1213
-help Display this list of options
1314
--help Display this list of options
1415
";
@@ -69,7 +70,34 @@ module Extract = {
6970

7071
let testExtractPartial = () => checkRes("test/test1/subdir/Test_1_2.re test/test2", (partial, ""));
7172

72-
let testSet = [("Extract full", `Quick, testExtractFull), ("Extract partial", `Quick, testExtractPartial)];
73+
let dup = {|[
74+
{ "id": "test3.msg1.1", "defaultMessage": "This is message 1.1" },
75+
{ "id": "test3.msg1.2", "defaultMessage": "This is message 1.2" },
76+
{ "id": "test3.msg1.3", "defaultMessage": "This is message 1.3" }
77+
]
78+
|};
79+
80+
let testExtractDup = () => checkRes("--allow-duplicates test/test3/Test_1_1.re test/test3/Test_1_2.re", (dup, ""));
81+
82+
let dupWithoutFlagError = "Error: duplicate message id: test3.msg1.1\n";
83+
84+
let testExtractDupWithoutFlagError = () => checkRes("test/test3/Test_1_1.re test/test3/Test_1_2.re", ("", dupWithoutFlagError));
85+
86+
let dupWithDifferentDefaultMessageError = "Error: duplicate message id: test3.msg1.1 with different default messages\n";
87+
88+
let testExtractDupWithDifferentDefaultMessageError = () =>
89+
checkRes(
90+
"--allow-duplicates test/test3/Test_1_1.re test/test3/Test_1_2.re test/test3/Test_1_3.re",
91+
("", dupWithDifferentDefaultMessageError),
92+
);
93+
94+
let testSet = [
95+
("Extract full", `Quick, testExtractFull),
96+
("Extract partial", `Quick, testExtractPartial),
97+
("Extract dup", `Quick, testExtractDup),
98+
("Extract dup without flag error", `Quick, testExtractDupWithoutFlagError),
99+
("Extract dup with different defaultMessage error", `Quick, testExtractDupWithDifferentDefaultMessageError),
100+
];
73101
};
74102

75103
let () =

test/test3/Test_1_1.re

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
let renderMessage1 = () => <ReactIntl.FormattedMessage id="test3.msg1.1" defaultMessage="This is message 1.1" />;
2+
let renderMessage2 = () => <ReactIntl.FormattedMessage id="test3.msg1.2" defaultMessage="This is message 1.2" />;

test/test3/Test_1_2.re

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
let renderMessage1 = () => <ReactIntl.FormattedMessage id="test3.msg1.1" defaultMessage="This is message 1.1" />;
2+
let renderMessage3 = () => <ReactIntl.FormattedMessage id="test3.msg1.3" defaultMessage="This is message 1.3" />;

test/test3/Test_1_3.re

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
let renderMessage1 = () => <ReactIntl.FormattedMessage id="test3.msg1.1" defaultMessage="This is different message 1.1" />;

0 commit comments

Comments
 (0)