Skip to content

Commit 800723f

Browse files
authored
Add description support for record type messages (#62)
* Add [@intl.description] annotation Fmt * Bump version to 0.9.1 * Update intl.description matcher comment * Update description
1 parent 48d791c commit 800723f

File tree

7 files changed

+44
-6
lines changed

7 files changed

+44
-6
lines changed

Diff for: README.md

+5
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,11 @@ module Msg = {
7878
};
7979
```
8080

81+
You also can pass descriptions to the records with:
82+
```reason
83+
let foo = [@intl.description "Hello description"] {id: "message.hello", defaultMessage: "Hello"};
84+
```
85+
8186
## Message Definition (bs-react-intl 1.x)
8287

8388
Formatted messages may be defined in your source files in one of the following ways:

Diff for: bin/Version.re

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
let version = "0.9.0";
1+
let version = "0.9.1";

Diff for: lib/ExtractionIterator.re

+22-2
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ let extractMessageFromLabels = (callback, labels) => {
2222
Message.fromStringMap(map) |> Option.iter(callback);
2323
};
2424

25-
let extractMessageFromRecord = (callback, fields) => {
25+
let extractMessageFromRecord = (~description=?, callback, fields) => {
2626
let map =
2727
fields
2828
|> List.fold_left(
@@ -35,7 +35,7 @@ let extractMessageFromRecord = (callback, fields) => {
3535
StringMap.empty,
3636
);
3737

38-
Message.fromStringMap(map) |> Option.iter(callback);
38+
Message.fromStringMap(~description?, map) |> Option.iter(callback);
3939
};
4040

4141
let extractMessagesFromRecords = (callback, records) =>
@@ -70,6 +70,26 @@ let extractMessagesFromValueBindings = (callback, valueBindings: list(value_bind
7070
valueBindings
7171
|> List.iter(valueBinding =>
7272
switch (valueBinding) {
73+
// Match with [@intl.description "i am description"] let foo = { ... };
74+
| {
75+
pvb_pat: {ppat_desc: Ppat_var(_)},
76+
pvb_expr: {
77+
pexp_desc: Pexp_record(fields, None),
78+
pexp_attributes: [
79+
{
80+
attr_name: {txt: "intl.description"},
81+
attr_payload:
82+
PStr([
83+
{
84+
pstr_desc: Pstr_eval({pexp_desc: Pexp_constant(Pconst_string(description, _))}, _),
85+
pstr_loc: _,
86+
},
87+
]),
88+
},
89+
],
90+
},
91+
} =>
92+
extractMessageFromRecord(~description, callback, fields)
7393
| {pvb_pat: {ppat_desc: Ppat_var(_)}, pvb_expr: {pexp_desc: Pexp_record(fields, None)}} =>
7494
extractMessageFromRecord(callback, fields)
7595
| _ => ()

Diff for: lib/Message.re

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ type t = {
66

77
let compare = (a, b) => compare(a.id, b.id);
88

9-
let fromStringMap = map => {
9+
let fromStringMap = (~description=?, map) => {
1010
let id = map |> StringMap.find_opt("id");
1111
let defaultMessage = map |> StringMap.find_opt("defaultMessage");
12-
let description = map |> StringMap.find_opt("description");
12+
let description = description |> Option.is_none ? map |> StringMap.find_opt("description") : description;
1313
switch (id, defaultMessage) {
1414
| (Some(id), Some(defaultMessage)) => Some({id, defaultMessage, description})
1515
| _ => None

Diff for: package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "bs-react-intl-extractor",
3-
"version": "0.9.0",
3+
"version": "0.9.1",
44
"description": "Message extractor for bs-react-intl",
55
"author": "Christoph Knittel <[email protected]>",
66
"license": "MIT",

Diff for: test/__snapshots__/Extract.a27e9fd5.0.snapshot

+5
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@ Extract › full
1616
\"description\": \"Description for message 1.7\"
1717
},
1818
{ \"id\": \"test1.msg1.8\", \"defaultMessage\": \"This is message 1.8\" },
19+
{
20+
\"id\": \"test1.msg1.9\",
21+
\"defaultMessage\": \"This is message 1.9\",
22+
\"description\": \"Description for message 1.9\"
23+
},
1924
{ \"id\": \"test1.msg2.1\", \"defaultMessage\": \"This is message 2.1\" },
2025
{
2126
\"id\": \"test1.msg2.2\",

Diff for: testData/test1/Test_1_1.re

+8
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,11 @@ module Msg2 = {
5858

5959
let ignored2 = {id: "test1.ignored1.2", defaultMessage: "This message is ignored"};
6060
};
61+
62+
module Msg3 = {
63+
open ReactIntl;
64+
65+
[@intl.messages];
66+
67+
let msg19 = [@intl.description "Description for message 1.9"] {id: "test1.msg1.9", defaultMessage: "This is message 1.9"};
68+
};

0 commit comments

Comments
 (0)