Skip to content

Commit 6c63737

Browse files
committed
fix: handle whitespace around array brackets
1 parent 98fa1f7 commit 6c63737

File tree

3 files changed

+32
-23
lines changed

3 files changed

+32
-23
lines changed

lib/json5/decode/backend/combine/array.ex

+13-22
Original file line numberDiff line numberDiff line change
@@ -7,29 +7,20 @@ defmodule Json5.Decode.Backend.Combine.Array do
77
import Json5.Decode.Backend.Combine.Helper
88

99
def array do
10-
either(
11-
pipe(
12-
[
13-
ignore_whitespace(),
14-
char("["),
15-
ignore_whitespace(),
16-
char("]"),
17-
ignore_whitespace()
18-
],
19-
fn _ -> [] end
10+
between(
11+
ignore(sequence([ignore_whitespace(), char("[")])),
12+
either(
13+
pipe(
14+
[
15+
ignore_whitespace(),
16+
array_items(),
17+
ignore_whitespace()
18+
],
19+
fn [expr] -> expr end
20+
),
21+
map(ignore_whitespace(), fn _ -> [] end)
2022
),
21-
pipe(
22-
[
23-
ignore_whitespace(),
24-
ignore(char("[")),
25-
ignore_whitespace(),
26-
array_items(),
27-
ignore_whitespace(),
28-
ignore(char("]")),
29-
ignore_whitespace()
30-
],
31-
fn [expr] -> expr end
32-
)
23+
ignore(sequence([ignore_whitespace(), char("]")]))
3324
)
3425
end
3526

mix.exs

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ defmodule Json5.MixProject do
44
def project do
55
[
66
app: :json5,
7-
version: "0.3.1",
7+
version: "0.3.2",
88
elixir: "~> 1.10",
99
description: "Json5 in Elixir",
1010
start_permanent: Mix.env() == :prod,

test/json5/decode_test.exs

+18
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ defmodule Json5.DecodeTest do
3333
[:number, decimal("-.123"), "-.123"],
3434
[:number, decimal("-.123e+7"), "-.123e+7"],
3535
[:number, decimal("-12.123e+7"), "-12.123e+7"],
36+
[:array, [], " [] "],
3637
[:array, [], "[]"],
3738
[:array, [nil], "[null]"],
3839
[:array, [decimal(1)], "[1]"],
@@ -82,6 +83,22 @@ defmodule Json5.DecodeTest do
8283
2]
8384
"""
8485
],
86+
[
87+
:comment,
88+
Macro.escape(%{
89+
"test" => []
90+
}),
91+
"""
92+
{
93+
"test": [
94+
// {
95+
// "test2": "",
96+
// "test3": "",
97+
// },
98+
]
99+
}
100+
"""
101+
],
85102
[
86103
:multi_line_comment,
87104
[decimal(1), decimal(2)],
@@ -112,6 +129,7 @@ defmodule Json5.DecodeTest do
112129
"""
113130
],
114131
[:object, Macro.escape(%{}), "{}"],
132+
[:object, Macro.escape(%{}), " {} "],
115133
[:object, Macro.escape(%{}), "{ }"],
116134
[:object, Macro.escape(%{"a" => Decimal.new(1)}), "{a : 1}"],
117135
[:object, Macro.escape(%{"test" => Decimal.new(1)}), "{test: 1}"],

0 commit comments

Comments
 (0)