Skip to content

Commit 0d9fcd0

Browse files
authored
Merge pull request #468 from sunng87/fix/whitespace-behind-expression
Whitespaces behind expression are ignored
2 parents 0c7e785 + e9fb1cb commit 0d9fcd0

File tree

2 files changed

+35
-14
lines changed

2 files changed

+35
-14
lines changed

src/template.rs

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -468,7 +468,7 @@ impl Template {
468468
// flag for newline removal of standalone statements
469469
// this option is marked as true when standalone statement is detected
470470
// then the leading whitespaces and newline of next rawstring will be trimed
471-
let mut trim_line_requiered = false;
471+
let mut trim_line_required = false;
472472

473473
let parser_queue = HandlebarsParser::parse(Rule::handlebars, source).map_err(|e| {
474474
let (line_no, col_no) = match e.line_col {
@@ -511,7 +511,7 @@ impl Template {
511511
&source[prev_end..span.start()],
512512
None,
513513
false,
514-
trim_line_requiered,
514+
trim_line_required,
515515
),
516516
line_no,
517517
col_no,
@@ -524,12 +524,15 @@ impl Template {
524524
&source[prev_end..span.start()],
525525
None,
526526
false,
527-
trim_line_requiered,
527+
trim_line_required,
528528
),
529529
line_no,
530530
col_no,
531531
);
532532
}
533+
534+
// reset standalone statement marker
535+
trim_line_required = false;
533536
}
534537

535538
let (line_no, col_no) = span.start_pos().line_col();
@@ -551,14 +554,14 @@ impl Template {
551554
&source[start..span.end()],
552555
Some(pair.clone()),
553556
omit_pro_ws,
554-
trim_line_requiered,
557+
trim_line_required,
555558
),
556559
line_no,
557560
col_no,
558561
);
559562

560563
// reset standalone statement marker
561-
trim_line_requiered = false;
564+
trim_line_required = false;
562565
}
563566
Rule::helper_block_start
564567
| Rule::raw_block_start
@@ -598,7 +601,7 @@ impl Template {
598601

599602
// standalone statement check, it also removes leading whitespaces of
600603
// previous rawstring when standalone statement detected
601-
trim_line_requiered = Template::process_standalone_statement(
604+
trim_line_required = Template::process_standalone_statement(
602605
&mut template_stack,
603606
source,
604607
&span,
@@ -619,7 +622,7 @@ impl Template {
619622

620623
// standalone statement check, it also removes leading whitespaces of
621624
// previous rawstring when standalone statement detected
622-
trim_line_requiered = Template::process_standalone_statement(
625+
trim_line_required = Template::process_standalone_statement(
623626
&mut template_stack,
624627
source,
625628
&span,
@@ -636,7 +639,7 @@ impl Template {
636639
span.as_str(),
637640
Some(pair.clone()),
638641
omit_pro_ws,
639-
trim_line_requiered,
642+
trim_line_required,
640643
),
641644
line_no,
642645
col_no,
@@ -680,7 +683,7 @@ impl Template {
680683
Rule::decorator_expression | Rule::partial_expression => {
681684
// standalone statement check, it also removes leading whitespaces of
682685
// previous rawstring when standalone statement detected
683-
trim_line_requiered = Template::process_standalone_statement(
686+
trim_line_required = Template::process_standalone_statement(
684687
&mut template_stack,
685688
source,
686689
&span,
@@ -703,7 +706,7 @@ impl Template {
703706
Rule::helper_block_end | Rule::raw_block_end => {
704707
// standalone statement check, it also removes leading whitespaces of
705708
// previous rawstring when standalone statement detected
706-
trim_line_requiered = Template::process_standalone_statement(
709+
trim_line_required = Template::process_standalone_statement(
707710
&mut template_stack,
708711
source,
709712
&span,
@@ -733,7 +736,7 @@ impl Template {
733736
Rule::decorator_block_end | Rule::partial_block_end => {
734737
// standalone statement check, it also removes leading whitespaces of
735738
// previous rawstring when standalone statement detected
736-
trim_line_requiered = Template::process_standalone_statement(
739+
trim_line_required = Template::process_standalone_statement(
737740
&mut template_stack,
738741
source,
739742
&span,
@@ -764,7 +767,7 @@ impl Template {
764767
}
765768
}
766769
Rule::hbs_comment_compact => {
767-
trim_line_requiered = Template::process_standalone_statement(
770+
trim_line_required = Template::process_standalone_statement(
768771
&mut template_stack,
769772
source,
770773
&span,
@@ -778,7 +781,7 @@ impl Template {
778781
t.push_element(Comment(text.to_owned()), line_no, col_no);
779782
}
780783
Rule::hbs_comment => {
781-
trim_line_requiered = Template::process_standalone_statement(
784+
trim_line_required = Template::process_standalone_statement(
782785
&mut template_stack,
783786
source,
784787
&span,

tests/escape.rs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ extern crate handlebars;
33
#[macro_use]
44
extern crate serde_json;
55

6-
use handlebars::{handlebars_helper, Handlebars};
6+
use handlebars::{handlebars_helper, no_escape, Handlebars};
77

88
#[test]
99
fn test_escape_216() {
@@ -41,3 +41,21 @@ fn test_string_no_escape_422() {
4141
.unwrap()
4242
);
4343
}
44+
45+
#[test]
46+
fn test_string_whitespace_467() {
47+
const TEMPLATE_UNQUOTED: &str = r#"{{#each synonyms}}
48+
{{this.name}} => '{{this.sym}}',
49+
{{/each}}
50+
"#;
51+
52+
let mut hbs = Handlebars::new();
53+
hbs.register_escape_fn(no_escape);
54+
hbs.register_template_string("perl", TEMPLATE_UNQUOTED)
55+
.unwrap();
56+
57+
let r = hbs
58+
.render("perl", &json!({"synonyms": [{"name": "lt", "sym": "<"}]}))
59+
.unwrap();
60+
assert_eq!(" lt => '<',\n", r);
61+
}

0 commit comments

Comments
 (0)