diff --git a/tools/lib/template_parser.py b/tools/lib/template_parser.py index 670642f0b9..1f09aaab8e 100644 --- a/tools/lib/template_parser.py +++ b/tools/lib/template_parser.py @@ -75,6 +75,9 @@ def tokenize(text: str) -> List[Token]: def looking_at_handlebars_partial() -> bool: return looking_at("{{>") + def looking_at_handlebars_partial_block() -> bool: + return looking_at("{{#>") + def looking_at_html_start() -> bool: return looking_at("<") and not looking_at(" List[Token]: s = get_handlebars_partial(text, state.i) tag = s[9:-2] kind = "handlebars_partial" + elif looking_at_handlebars_partial_block(): + s = get_handlebars_partial(text, state.i) + tag = s[5:-2] + kind = "handlebars_partial_block" elif looking_at_html_start(): s = get_html_tag(text, state.i) if s.endswith("/>"): @@ -311,7 +318,7 @@ def tag_flavor(token: Token) -> Optional[str]: ): return None - if kind in ("handlebars_start", "html_start"): + if kind in ("handlebars_start", "handlebars_partial_block", "html_start"): return "start" elif kind in ( "django_else", @@ -726,6 +733,7 @@ def get_django_comment(text: str, i: int) -> str: def get_handlebars_partial(text: str, i: int) -> str: + """Works for both partials and partial blocks.""" end = i + 10 unclosed_end = 0 while end <= len(text): diff --git a/tools/tests/test_template_parser.py b/tools/tests/test_template_parser.py index e3db01540f..30c82db36f 100644 --- a/tools/tests/test_template_parser.py +++ b/tools/tests/test_template_parser.py @@ -49,6 +49,22 @@ class ParserTest(unittest.TestCase): """ validate(text=my_html) + def test_validate_handlebars_partial_block(self) -> None: + my_html = """ + {{#> generic_thing }} +

hello!

+ {{/generic_thing}} + """ + validate(text=my_html) + + def test_validate_bad_handlebars_partial_block(self) -> None: + my_html = """ + {{#> generic_thing }} +

hello!

+ {{# generic_thing}} + """ + self._assert_validate_error("Missing end tag for the token at row 4 13!", text=my_html) + def test_validate_comment(self) -> None: my_html = """