@@ -164,6 +164,14 @@ impl Parameter {
164164 let mut it = parser. flatten ( ) . peekable ( ) ;
165165 Template :: parse_param ( s, & mut it, s. len ( ) - 1 )
166166 }
167+
168+ fn debug_name ( & self ) -> String {
169+ if let Some ( name) = self . as_name ( ) {
170+ name. to_owned ( )
171+ } else {
172+ format ! ( "{:?}" , self )
173+ }
174+ }
167175}
168176
169177impl Template {
@@ -647,8 +655,8 @@ impl Template {
647655 } else {
648656 return Err ( TemplateError :: of (
649657 TemplateErrorReason :: MismatchingClosedHelper (
650- h. name . as_name ( ) . unwrap ( ) . into ( ) ,
651- close_tag_name . unwrap ( ) . into ( ) ,
658+ h. name . debug_name ( ) ,
659+ exp . name . debug_name ( ) ,
652660 ) ,
653661 )
654662 . at ( source, line_no, col_no) ) ;
@@ -669,8 +677,8 @@ impl Template {
669677 } else {
670678 return Err ( TemplateError :: of (
671679 TemplateErrorReason :: MismatchingClosedDecorator (
672- d. name . as_name ( ) . unwrap ( ) . into ( ) ,
673- close_tag_name . unwrap ( ) . into ( ) ,
680+ d. name . debug_name ( ) ,
681+ exp . name . debug_name ( ) ,
674682 ) ,
675683 )
676684 . at ( source, line_no, col_no) ) ;
@@ -1144,3 +1152,11 @@ fn test_decorator() {
11441152 }
11451153 }
11461154}
1155+
1156+ #[ test]
1157+ fn test_panic_with_tag_name ( ) {
1158+ let s = "{{#>(X)}}{{/X}}" ;
1159+ let result = Template :: compile ( s) ;
1160+ assert ! ( result. is_err( ) ) ;
1161+ assert_eq ! ( "decorator \" Subexpression(Subexpression { element: Expression(HelperTemplate { name: Path(Relative(([Named(\\ \" X\\ \" )], \\ \" X\\ \" ))), params: [], hash: {}, block_param: None, template: None, inverse: None, block: false }) })\" was opened, but \" X\" is closing" , format!( "{}" , result. unwrap_err( ) . reason) ) ;
1162+ }
0 commit comments