Skip to content

Commit 7978fc0

Browse files
committed
Add rescript
1 parent f63e123 commit 7978fc0

File tree

8 files changed

+130
-3
lines changed

8 files changed

+130
-3
lines changed

.gitmodules

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
[submodule "rescript_parser/syntax"]
2+
path = rescript_parser/syntax
3+
url = https://github.com/rescript-lang/syntax.git

lib/Extractor.re

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,30 @@ let extract = (~duplicatesAllowed=false, paths) => {
3333
extractMessages(ast);
3434
};
3535

36+
let processReScriptFile = path => {
37+
let channel = open_in_bin(path);
38+
let src = really_input_string(channel, in_channel_length(channel));
39+
close_in(channel);
40+
41+
let parser = Res_parser.(make(~mode=Default, src, path));
42+
let ast = Res_core.parseImplementation(parser);
43+
44+
extractMessages(ast);
45+
};
46+
3647
let rec processPath = path => {
3748
if (!Sys.file_exists(path)) {
3849
raise(PathNotFound(path));
3950
};
4051

4152
if (Sys.is_directory(path)) {
4253
Sys.readdir(path) |> Array.iter(filename => processPath(Filename.concat(path, filename)));
43-
} else if (Filename.extension(path) == ".re") {
44-
processReasonFile(path);
54+
} else {
55+
switch (Filename.extension(path)) {
56+
| ".re" => processReasonFile(path)
57+
| ".res" => processReScriptFile(path)
58+
| _ => ()
59+
};
4560
};
4661
};
4762

lib/dune

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
(library
22
(name lib)
3-
(libraries reason yojson unix)
3+
(libraries reason yojson unix rescript_parser)
44
)

rescript_parser/dune

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
(copy_files ./syntax/src/*.ml)
2+
(copy_files ./syntax/src/*.mli)
3+
4+
(library
5+
(name rescript_parser)
6+
(wrapped false)
7+
(libraries compiler-libs)
8+
)

rescript_parser/syntax

Submodule syntax added at 7cc70c9
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
ReScript › full
2+
[
3+
{ \"id\": \"test4.msg1.1\", \"defaultMessage\": \"This is message 1.1\" },
4+
{ \"id\": \"test4.msg1.2\", \"defaultMessage\": \"This is message 1.2\" },
5+
{
6+
\"id\": \"test4.msg1.3\",
7+
\"defaultMessage\": \"This is message 1.3\",
8+
\"description\": \"Description for message 1.3\"
9+
},
10+
{ \"id\": \"test4.msg1.4\", \"defaultMessage\": \"This is message 1.4\" },
11+
{ \"id\": \"test4.msg1.5\", \"defaultMessage\": \"This is message 1.5\" },
12+
{ \"id\": \"test4.msg1.6\", \"defaultMessage\": \"This is message 1.6\" },
13+
{
14+
\"id\": \"test4.msg1.7\",
15+
\"defaultMessage\": \"This is message 1.7\",
16+
\"description\": \"Description for message 1.7\"
17+
},
18+
{ \"id\": \"test4.msg1.8\", \"defaultMessage\": \"This is message 1.8\" },
19+
{
20+
\"id\": \"test4.msg1.9\",
21+
\"defaultMessage\": \"This is message 1.9\",
22+
\"description\": \"Description for message 1.9\"
23+
}
24+
]

test/lib/Tests.re

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,3 +53,10 @@ describe("Path not found", ({test}) => {
5353
expect.fn(extract).toThrowException(Extractor.PathNotFound("testData/test1/SomeFile.re"));
5454
});
5555
});
56+
57+
describe("ReScript", ({test}) => {
58+
test("full", ({expect}) => {
59+
let json = extractAndGetJson(["testData/test4"]);
60+
expect.string(json).toMatchSnapshot();
61+
})
62+
});

testData/test4/Test_4_1.res

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
let renderMessages1 = () =>
2+
<ReactIntl.FormattedMessage id="test4.msg1.1" defaultMessage="This is message 1.1" />
3+
4+
let renderMessages2 = () =>
5+
<div>
6+
<FormattedMessage id="test4.msg1.4" defaultMessage="This is message 1.4" />
7+
<ReactIntl.FormattedMessage id="test4.msg1.5" defaultMessage="This is message 1.5" />
8+
</div>
9+
10+
let renderMessages3 = () =>
11+
<div>
12+
<ReactIntl.FormattedMessage id="test4.msg1.2" defaultMessage="This is message 1.2" />
13+
<ReactIntl.FormattedMessage
14+
id="test4.msg1.3"
15+
defaultMessage="This is message 1.3"
16+
description="Description for message 1.3"
17+
/>
18+
</div>
19+
20+
let theseShouldBeIgnored = () =>
21+
<div>
22+
<ReactIntl.FormattedMessage x="ignored1.1" y="This message is ignored" />
23+
<FormattedMessage id="ignored1.2" description="This is a description" />
24+
</div>
25+
26+
let _ = ReactIntl.defineMessages({
27+
"test4.msg1.6": {
28+
"id": "test4.msg1.6",
29+
"defaultMessage": "This is message 1.6",
30+
},
31+
"ignored1.3": {
32+
"idd": "test4.msg1.8" /* This will not be extracted. */,
33+
"defaultMessage": "This is message 1.8",
34+
},
35+
})
36+
37+
let _ = defineMessages({
38+
"test4.msg1.7": {
39+
"id": "test4.msg1.7",
40+
"defaultMessage": "This is message 1.7",
41+
"description": "Description for message 1.7",
42+
},
43+
})
44+
45+
module Msg = {
46+
open ReactIntl
47+
48+
@@intl.messages
49+
50+
let msg18 = {id: "test4.msg1.8", defaultMessage: "This is message 1.8"}
51+
52+
let ignored1 = {idd: "test4.ignored1.1", defaultMessage: "This message is ignored"}
53+
}
54+
55+
module Msg2 = {
56+
open ReactIntl
57+
58+
let ignored2 = {id: "test4.ignored1.2", defaultMessage: "This message is ignored"}
59+
}
60+
61+
module Msg3 = {
62+
open ReactIntl
63+
64+
@@intl.messages
65+
66+
let msg19 =
67+
@intl.description("Description for message 1.9")
68+
{id: "test4.msg1.9", defaultMessage: "This is message 1.9"}
69+
}

0 commit comments

Comments
 (0)