Skip to content

Commit

Permalink
Support trailing commas for function calls (#95)
Browse files Browse the repository at this point in the history
  • Loading branch information
mitsuhiko committed Sep 3, 2022
1 parent a905d86 commit 7cb351f
Show file tree
Hide file tree
Showing 5 changed files with 147 additions and 4 deletions.
3 changes: 3 additions & 0 deletions minijinja/src/parser.rs
Expand Up @@ -389,6 +389,9 @@ impl<'a> Parser<'a> {
if !args.is_empty() || !kwargs_keys.is_empty() {
expect_token!(self, Token::Comma, "`,`")?;
}
if matches!(self.stream.current()?, Some((Token::ParenClose, _))) {
break;
}
let expr = self.parse_expr()?;

// keyword argument
Expand Down
2 changes: 2 additions & 0 deletions minijinja/tests/parser-inputs/call.txt
Expand Up @@ -2,3 +2,5 @@
{{ loop.cycle(1, 2) }}
{{ self.foo() }}
{{ foo(1, 2, a=3, b=4) }}
{{ trailing(1, 2,) }}
{{ trailing_kwarg(1, 2, a=3,) }}
3 changes: 3 additions & 0 deletions minijinja/tests/parser-inputs/filter.txt
@@ -1 +1,4 @@
{{ foo|bar(1, 2)|baz }}
{{ foo|bar(1, 2,) }}
{{ foo|bar(1, 2, a=1) }}
{{ foo|bar(1, 2, a=1,) }}
52 changes: 50 additions & 2 deletions minijinja/tests/snapshots/test_parser__parser@call.txt.snap
@@ -1,6 +1,6 @@
---
source: minijinja/tests/test_parser.rs
description: "{{ super() }}\n{{ loop.cycle(1, 2) }}\n{{ self.foo() }}\n{{ foo(1, 2, a=3, b=4) }}"
description: "{{ super() }}\n{{ loop.cycle(1, 2) }}\n{{ self.foo() }}\n{{ foo(1, 2, a=3, b=4) }}\n{{ trailing(1, 2,) }}\n{{ trailing_kwarg(1, 2, a=3,) }}"
input_file: minijinja/tests/parser-inputs/call.txt
---
Ok(
Expand Down Expand Up @@ -85,6 +85,54 @@ Ok(
],
} @ 4:6-4:22,
} @ 4:0-4:22,
EmitRaw {
raw: "\n",
} @ 4:25-5:0,
EmitExpr {
expr: Call {
expr: Var {
id: "trailing",
} @ 5:3-5:11,
args: [
Const {
value: 1,
} @ 5:12-5:13,
Const {
value: 2,
} @ 5:15-5:16,
],
} @ 5:11-5:18,
} @ 5:0-5:18,
EmitRaw {
raw: "\n",
} @ 5:21-6:0,
EmitExpr {
expr: Call {
expr: Var {
id: "trailing_kwarg",
} @ 6:3-6:17,
args: [
Const {
value: 1,
} @ 6:18-6:19,
Const {
value: 2,
} @ 6:21-6:22,
Map {
keys: [
Const {
value: "a",
} @ 6:24-6:25,
],
values: [
Const {
value: 3,
} @ 6:26-6:27,
],
} @ 6:24-6:28,
],
} @ 6:17-6:29,
} @ 6:0-6:29,
],
} @ 0:0-4:25,
} @ 0:0-6:32,
)
91 changes: 89 additions & 2 deletions minijinja/tests/snapshots/test_parser__parser@filter.txt.snap
@@ -1,6 +1,6 @@
---
source: minijinja/tests/test_parser.rs
description: "{{ foo|bar(1, 2)|baz }}"
description: "{{ foo|bar(1, 2)|baz }}\n{{ foo|bar(1, 2,) }}\n{{ foo|bar(1, 2, a=1) }}\n{{ foo|bar(1, 2, a=1,) }}"
input_file: minijinja/tests/parser-inputs/filter.txt
---
Ok(
Expand Down Expand Up @@ -30,6 +30,93 @@ Ok(
args: [],
} @ 1:17-1:20,
} @ 1:0-1:20,
EmitRaw {
raw: "\n",
} @ 1:23-2:0,
EmitExpr {
expr: Filter {
name: "bar",
expr: Some(
Var {
id: "foo",
} @ 2:3-2:6,
),
args: [
Const {
value: 1,
} @ 2:11-2:12,
Const {
value: 2,
} @ 2:14-2:15,
],
} @ 2:7-2:17,
} @ 2:0-2:17,
EmitRaw {
raw: "\n",
} @ 2:20-3:0,
EmitExpr {
expr: Filter {
name: "bar",
expr: Some(
Var {
id: "foo",
} @ 3:3-3:6,
),
args: [
Const {
value: 1,
} @ 3:11-3:12,
Const {
value: 2,
} @ 3:14-3:15,
Map {
keys: [
Const {
value: "a",
} @ 3:17-3:18,
],
values: [
Const {
value: 1,
} @ 3:19-3:20,
],
} @ 3:17-3:20,
],
} @ 3:7-3:21,
} @ 3:0-3:21,
EmitRaw {
raw: "\n",
} @ 3:24-4:0,
EmitExpr {
expr: Filter {
name: "bar",
expr: Some(
Var {
id: "foo",
} @ 4:3-4:6,
),
args: [
Const {
value: 1,
} @ 4:11-4:12,
Const {
value: 2,
} @ 4:14-4:15,
Map {
keys: [
Const {
value: "a",
} @ 4:17-4:18,
],
values: [
Const {
value: 1,
} @ 4:19-4:20,
],
} @ 4:17-4:21,
],
} @ 4:7-4:22,
} @ 4:0-4:22,
],
} @ 0:0-1:23,
} @ 0:0-4:25,
)

0 comments on commit 7cb351f

Please sign in to comment.