Skip to content

Parsing error when comparing strings within a string template directive #247

@mattsperle

Description

@mattsperle

Describe the bug

Parsing error when comparing strings within a string template directive. It seems to be an issue for string comparisons specifically. Comparing other types works as expected.

Software:

  • OS: Linux
  • Python version: 3.12.3
  • python-hcl2 version: 7.3.1

Snippet of HCL2 code causing the unexpected behaviour:

locals {
  service = "kms%{ if var.id != "primary" }-${var.id}%{ endif }"
}

Expected behavior

I would expect it to return

'service': 'kms%{ if var.id != "primary"}-${var.id}%{ endif }'}

instead of throwing an exception.

Exception traceback (if applicable):

Traceback (most recent call last):
  File "/home/msperle/.venv/lib/python3.12/site-packages/lark/parsers/lalr_parser_state.py", line 77, in feed_token
    action, arg = states[state][token.type]
                  ~~~~~~~~~~~~~^^^^^^^^^^^^
KeyError: 'RBRACE'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/msperle/git/kms/terraform/kms/test.py", line 5, in <module>
    hcl2.load(f)
  File "/home/msperle/.venv/lib/python3.12/site-packages/hcl2/api.py", line 16, in load
    return loads(file.read(), with_meta=with_meta)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/msperle/.venv/lib/python3.12/site-packages/hcl2/api.py", line 29, in loads
    tree = parser().parse(text + "\n")
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/msperle/.venv/lib/python3.12/site-packages/lark/lark.py", line 677, in parse
    return self.parser.parse(text, start=start, on_error=on_error)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/msperle/.venv/lib/python3.12/site-packages/lark/parser_frontends.py", line 131, in parse
    return self.parser.parse(stream, chosen_start, **kw)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/msperle/.venv/lib/python3.12/site-packages/lark/parsers/lalr_parser.py", line 42, in parse
    return self.parser.parse(lexer, start)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/msperle/.venv/lib/python3.12/site-packages/lark/parsers/lalr_parser.py", line 88, in parse
    return self.parse_from_state(parser_state)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/msperle/.venv/lib/python3.12/site-packages/lark/parsers/lalr_parser.py", line 111, in parse_from_state
    raise e
  File "/home/msperle/.venv/lib/python3.12/site-packages/lark/parsers/lalr_parser.py", line 102, in parse_from_state
    state.feed_token(token)
  File "/home/msperle/.venv/lib/python3.12/site-packages/lark/parsers/lalr_parser_state.py", line 80, in feed_token
    raise UnexpectedToken(token, expected, state=self, interactive_parser=None)
lark.exceptions.UnexpectedToken: Unexpected token Token('RBRACE', '}') at line 32, column 1.
Expected one of: 
        * LBRACE

Metadata

Metadata

Labels

bugSomething isn't workingenhancementNew feature or requestgrammarIssue is related to HCL2 grammar definition

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions